Exécuter SQL initial

Remarque : Tableau Prep Builder version 2019.2.2 et ultérieure prend en charge SQL initial, mais ne prend pas encore en charge toutes les mêmes options gérées par Tableau Desktop . Pour plus d'informations sur l'utilisation de SQL initial avec Tableau Prep Builder, consultez Utiliser Initial SQL pour interroger vos connexions(Link opens in a new window) dans l'aide en ligne de Tableau Prep Builder.

Lors de la connexion à certaines bases de données, vous pouvez définir une commande SQL initial qui sera exécutée lorsque vous vous connectez à la base de données, par exemple lorsque vous ouvrez le classeur, que vous actualisez un extrait, que vous vous connectez à Tableau Server ou que vous effectuez une publication dans Tableau Server. SQL initial n'est pas exécuté lorsque vous actualisez votre vue. Notez que ce 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, consultez 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 expression 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 le SQL initial :

  1. 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.

  2. 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'expression contient des erreurs. Cette expression SQL est simplement envoyée vers la base de données lorsque vous vous connectez.

Il se peut que votre contrat de licence ne vous permette pas d'utiliser le SQL initial avec votre connexion. Si vous effectuez une publication sur Tableau Server, le serveur doit être configuré pour autoriser les expressions SQL initial. Par défaut, le logiciel du serveur est configuré pour autoriser l'exécution de ces expressions lors du chargement du classeur dans un navigateur Web.

Les administrateurs peuvent configurer le serveur pour ignorer les déclarations SQL en utilisant la commande tsm configuration set :

tsm configuration set -k vizqlserver.initialsql.disabled -v true

Si le serveur n'autorise pas les expressions 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(Link opens in a new window).

Paramètres dans une expression SQL initiale

Vous pouvez transmettre des paramètres à votre source de données dans une expression SQL initial. Cette option est utilisée pour plusieurs raisons :

  • 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 de la ligne (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 expression 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

Exemples

Les exemples suivants montrent différentes manières d'utiliser les paramètres dans une expression 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 de 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 expression 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 expression 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 listées si SQL initial a été utilisé pour créer la 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 une table 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;

 

Merci de vos commentaires !