Exécuter SQL initial
Remarque : Tableau Prep Builder version 2019.2.2 et versions ultérieures permet d’utiliser SQL initial, mais n’est pas encore compatible avec toutes les options prises en charge par Tableau Desktop. Pour plus d’informations sur l’utilisation de SQL initial avec Tableau Prep Builder, consultez Utiliser SQL initial pour interroger vos connexions(Le lien s’ouvre dans une nouvelle fenêtre) dans l’Aide de Tableau Prep Builder Salesforce.
Lorsque vous vous connectez à certaines bases de données, vous pouvez définir une commande SQL initial qui sera exécutée ou utilisera une valeur mise en cache lors de la connexion, par exemple dans les cas suivants : ouverture de classe, actualisation d’un extrait, connexion à Tableau Server ou publication dans Tableau Server.
Remarque : SQL initial est différent d’une connexion SQL personnalisée. Une connexion SQL personnalisée définit une relation (ou table) à laquelle envoyer des requêtes. Pour plus d’informations, voir Se connecter à une requête SQL personnalisée.
Vous pouvez utiliser cette commande pour :
Configurer des tables temporaires qui seront utilisées pendant la session.
Définir un environnement de données personnalisé.
Vous avez la possibilité d’ajouter une commande SQL initial dans la source de données Connexion du serveur ou dans la page Source de données.
Remarque : si votre source de données prend en charge l’exécution d’une instruction SQL initial, un lien SQL initial apparaît dans le coin inférieur gauche de la boîte de dialogue Connexion au serveur. Pour plus d’informations sur votre source de données, voir Connecteurs pris en charge.
Pour utiliser SQL initial :
Dans la boîte de dialogue Connexion du serveur, cliquez sur SQL initial. Ou bien, sur la page Source de données, sélectionnez Données > SQL initial ou Données > Répartition de requêtes en bande et SQL initial en fonction de la base de données à laquelle vous vous connectez.
Saisissez la commande SQL dans la boîte de dialogue SQL initial. Vous pouvez utiliser le menu déroulant Insérer pour transmettre des paramètres à votre source de données.
Remarque : Tableau ne vérifie pas si l’instruction contient des erreurs. Cette instruction SQL est simplement envoyée à la base de données lorsque vous vous connectez.
Il se peut que votre contrat de licence ne vous permette pas d’utiliser SQL initial avec votre connexion. Si vous effectuez une publication sur Tableau Server, le serveur doit être configuré pour autoriser les instructions SQL initial. Par défaut, le logiciel du serveur est configuré pour autoriser l’exécution de ces instructions lors du chargement du classeur dans un navigateur Web.
Les administrateurs peuvent configurer le serveur de manière à ignorer les instructions SQL en utilisant la commande tsm configuration set
:
tsm configuration set -k vizqlserver.initialsql.disabled -v true
Si le serveur n’autorise pas les instructions SQL initial, le classeur s’ouvre mais les commandes SQL initial ne sont pas envoyées.
Pour plus d’informations sur la commande tsm configuration set
, consultez l’Aide de Tableau Server(Le lien s’ouvre dans une nouvelle fenêtre).
Paramètres dans une instruction SQL initial
Vous pouvez transmettre des paramètres à votre source de données dans une instruction SQL initial. La liste suivante présente plusieurs avantages liés à l’utilisation de paramètres dans une instruction SQL initial.
Vous pouvez configurer la simulation à l’aide des paramètres TableauServerUser ou TableauServerUserFull.
Si votre source de données prend en charge cette fonction, vous pouvez configurer une sécurité au niveau des lignes (par exemple Oracle VPD ou SAP Sybase ASE) pour vous assurer que les utilisateurs ne voient que les données qu’ils sont autorisés à voir.
Vous pouvez fournir davantage de détails en enregistrant par exemple la version de Tableau ou le nom du classeur.
Les paramètres suivants sont pris en charge dans une instruction SQL initial :
Paramètre | Description | Exemple de valeur retournée |
TableauServerUser | Nom d’utilisateur de l’utilisateur actuel du serveur. S’utilise lors de la mise en place de l’emprunt d’identité sur le serveur. Renvoie une chaîne vide si l’utilisateur n’est pas connecté à Tableau Server. | jsmith |
TableauServerUserFull | Nom d’utilisateur et domaine de l’utilisateur actuel du serveur. S’utilise lors de la mise en place de l’emprunt d’identité sur le serveur. Renvoie une chaîne vide si l’utilisateur n’est pas connecté à Tableau Server. | domain.lan\jsmith |
TableauApp | Le nom de l’application Tableau. | Tableau Desktop Professional Tableau Server |
TableauVersion | La version de l’application Tableau. | 9.3 |
WorkbookName | Le nom du classeur Tableau. À utiliser uniquement dans les classeurs comportant une source de données intégrée. | Financial-Analysis |
Avertissement : Tableau Desktop n’inclut pas de domaine. Vous pouvez l’inclure si vous n’utilisez pas la délégation et que vous définissez tsm configuration set -k DelegationUseFullDomainName=-v true--force-keys
Les exemples suivants montrent différentes manières d’utiliser les paramètres dans une instruction SQL initial.
- Cet exemple configure le contexte de sécurité sur Microsoft SQL Server.
EXECUTE AS USER = [TableauServerUser] WITH NO REVERT;
Cet exemple montre comment, dans une base de données DataStax, vous pouvez utiliser les paramètres pour ajouter des détails dans le journal ou pour configurer une variable de session permettant d’effectuer le suivi des données :
SET TABLEAUVERSION [TableauVersion];
Cet exemple peut être utilisé pour vous aider à configurer une sécurité au niveau de la ligne dans Oracle VPD :
begin
DBMS_SESSION.SET_IDENTIFIER([TableauServerUser]);
end;
Remarque : les blocs Oracle PL/SQL nécessitent un point-virgule en fin de ligne pour terminer le bloc. Consultez la documentation Oracle pour connaître la syntaxe appropriée.
Différer l’exécution sur le serveur
Vous pouvez différer une instruction SQL initial afin qu’elle soit exécutée sur le serveur uniquement. Vous pouvez différer l’exécution sur le serveur parce que vous n’avez pas l’autorisation d’exécuter les commandes permettant de configurer la simulation. Utilisez les balises <ServerOnly></ServerOnly> pour inclure les commandes à exécuter uniquement sur le serveur.
Exemple :
CREATE TEMP TABLE TempTable(x varchar(25)); INSERT INTO TempTable VALUES (1); <ServerOnly>INSERT INTO TempTable Values(2);</ServerOnly>
Sécurité et simulation
Si vous utilisez le paramètre TableauServerUser, TableauServerUserFull dans une instruction SQL initial, vous créez une connexion dédiée qui ne peut pas être partagée avec d’autres utilisateurs. Le partage du cache sera également restreint, ce qui peut améliorer la sécurité, mais également ralentir les performances.
Résoudre les problèmes de la commande « create table » pour les connexions MySQL et Oracle
Pour les connexions MySQL, les tables ne sont pas répertoriées si SQL initial a été utilisé pour créer une table
Lorsque vous vous connectez à MySQL, si vous exécutez une instruction SQL initial comme la suivante, les tables peuvent ne pas s’afficher en raison de la manière dont Tableau construit la requête.
CREATE TABLE TestV1.testtable77(testID int);
Pour résoudre ce problème, ajoutez IF NOT EXISTS
à l’instruction SQL :
CREATE TABLE IF NOT EXISTS TestV1.TestTable(testID int);
Pour les connexions Oracle, l’utilisation de SQL initial pour créer des tables entraîne le blocage de Tableau
Lorsque vous vous connectez à Oracle et exécutez une instruction SQL initial telle que la suivante, Tableau est bloqué avec un rouet à cause de la manière dont Tableau construit la requête.
CREATE TABLE TEST_TABLE (TESTid int)
Pour résoudre ce problème, utilisez l’instruction SQL suivante :
BEGIN EXECUTE IMMEDIATE 'create table test_table(testID int)'; EXCEPTION WHEN OTHERS THEN NULL; END;