Se connecter à une requête SQL personnalisée

Remarque : L’utilisation de SQL personnalisé peut nuire aux performances d’un classeur. En travaillant avec votre administrateur de base de données, vous obtiendrez la meilleure requête SQL personnalisée possible. Afin d’effectuer les opérations nécessaires à la création de vues dans Tableau Desktop, Tableau doit être capable de contrôler les clauses WHERE, GROUP BY et d’autres clauses SQL. Étant donné qu’une requête SQL personnalisée peut contenir ces éléments et que Tableau ne peut pas les injecter dans le SQL existant, Tableau doit envelopper l’expression SQL personnalisée dans une expression choisie. Lorsqu’une connexion SQL personnalisée est lente ou produit une erreur, cela est souvent causé par le fait que Tableau Desktop enveloppe l’expression SQL personnalisé.

Pour la majorité des bases de données, vous pouvez vous connecter à une requête spécifique plutôt qu’à l’ensemble de données entier. Étant donné que la syntaxe SQL varie légèrement selon la base de données, l’instruction SQL personnalisée que vous pouvez utiliser pour vous connecter à une base de données peut être différente de l’instruction SQL personnalisée que vous utilisez pour vous connecter à une autre. Par contre, utiliser SQL personnalisé s’avère souvent utile lorsque vous savez exactement de quelles informations vous avez besoin et comment formuler des requêtes SQL.

Bien qu’il existe plusieurs raisons pour lesquelles vous pouvez utiliser SQL personnalisé, vous pouvez utiliser SQL personnalisé pour unir vos données à travers plusieurs tables, remanier des champs afin de réaliser des liaisons entre des bases de données, restructurer ou réduire la taille de vos données à analyser, etc.

Pour les sources de données Excel et texte, cette option est disponible uniquement pour les classeurs créés avec des versions antérieures de Tableau Desktop 8.2 ou en cas d’utilisation de Tableau Desktop sur Windows avec l’ancienne connexion. Pour vous connecter aux fichiers Excel ou texte à l’aide de la connexion héritée, connectez-vous au fichier, et dans la boîte de dialogue Ouvrir, cliquez sur le menu déroulant Ouvrir, puis sélectionnez Ouvrir avec l’ancienne connexion.

REMARQUE : à compter de Tableau 2020.2, les anciennes connexions Excel et texte ne sont plus prises en charge. Consultez le document Alternatives aux connexions héritées dans la communauté Tableau pour connaître les alternatives à l’utilisation de la connexion héritée.

Se connecter à une requête SQL personnalisée

  1. Une fois connecté aux données, double-cliquez sur l’option Nouveau SQL personnalisé dans la page Source de données.

  2. Saisissez ou collez la requête dans la zone de texte. La requête doit être une instruction SELECT* unique.

  3. Lorsque vous avez terminé, cliquez sur OK.

Lorsque vous cliquez sur OK, la requête s’exécute et la table de requête SQL personnalisée apparaît dans la couche logique de l’espace de travail. Seuls les champs pertinents de la requête SQL personnalisé s’affichent dans la grille de données de la page Source de données.

Pour plus d’informations sur les tables logiques et les tables physiques de l’espace de travail, consultez Modèle de données Tableau.

Exemples de requêtes SQL personnalisées

Combiner vos tables verticalement (union)

Si vous avez besoin d’ajouter des données les unes aux autres, vous pouvez utiliser l’option d’union dans la couche physique de l’espace de travail dans Tableau. Dans certains cas, votre base de données ne prend pas en charge cette option si bien que vous pouvez utiliser SQL personnalisé à la place.

Supposons, par exemple, que vous ayez les deux tables suivantes : Novembre et Décembre.

NovembreDécembre

Vous pouvez utiliser la requête SQL personnalisée suivante pour ajouter la seconde table, Décembre, à la première table, Novembre.

SELECT * FROM November UNION ALL SELECT * FROM December

Le résultat de la requête se présente ainsi dans la grille de données :

Pour plus d’informations sur les options d’union, consultez Réunir vos données.

Changer le type de données d’un champ pour réaliser une jointure entre bases de données

Lorsque vous souhaitez réaliser une jointure entre deux tables dans la couche physique de l’espace de travail, le type de données des champs que vous liez doit être identique. Dans les cas où les types de données des champs ne sont pas identiques, vous pouvez utiliser SQL personnalisé pour changer le type de données (remanier) du champ avant de réaliser la jointure.

Par exemple, supposons que vous souhaitiez joindre deux tables, Main et Sub, en utilisant les champs Root et ID, respectivement. Le champ Root est de type nombre, et le champ ID est de type chaîne. Vous pouvez utiliser la requête SQL personnalisé qui suit pour changer le type de données Root d’un nombre à une chaîne afin de pouvoir joindre les tables Main et Sub en utilisant les champs Root et ID.

SELECT [Main].[Root] AS [Root_Number]
CAST([Main].[Root] AS INT] AS [Root_String]
FROM [Main]

Le résultat de cette requête montre le champ Root d’origine et le champ Root remanié sous forme de chaîne.

Pour plus d’informations sur les jointures et les jointures entre bases de données, consultez Lier vos données.

Réduire la taille de vos données

Lorsque vous travaillez avec des ensembles de données extrêmement volumineux, vous pouvez gagner du temps lors de l’exploitation de vos données en commençant par réduire leur taille.

Par exemple, supposons que vous ayez une table volumineuse appelée FischerIris. Vous pouvez utiliser la requête SQL personnalisée suivante pour récupérer les colonnes et les enregistrements spécifiés, réduisant ainsi la taille de l’ensemble de données auquel vous vous connectez depuis Tableau.

SELECT
[FischerIris].[Species] AS [Species],
[FischerIris].[Width] AS [Petal Width],
COUNT([FischerIris].[ID]) AS [Num of Species]
FROM [FischerIris]
WHERE [FischerIris].[Organ] = 'Petal'
AND [FischerIris].[Width] > 15.0000
GROUP BY [FischerIris].[Species], [FischerIris].[Width]

Restructurer vos données (pivot)

Dans certains cas, il peut arriver que vous utilisiez une table ayant besoin d’être restructurée avant l’analyse. Bien que ce type de tâche puisse être effectué directement dans la couche physique de l’espace de travail dans Tableau à l’aide d’options telles que la permutation, il se peut que votre base de données ne la prenne pas en charge. Dans ce cas, vous pouvez utiliser SQL personnalisé à la place.

Supposons, par exemple, que vous ayez la table suivante :

Pour modifier sa structure et optimiser vos données en vue de l’analyse dans Tableau, vous pouvez utiliser la requête SQL personnalisée suivante :

SELECT Table1.Season ID AS [Season ID],
Table1.Items - Don't like AS [Quantity],
"Don't Like" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS [Season ID],
Table.Items - Defective AS [Quantity],
"Defective" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS [Season ID],
Table1.Items - Too big AS [Quantity],
"Too Big" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS Season ID,
Table1.Items - Too small AS [Quantity]
"Too Small" AS [Reason]
FROM Table1

Le résultat de la requête se présente ainsi dans la grille de données :

Pour plus d’informations sur l’option de permutation, consultez Permuter les données de colonnes en lignes.

Combiner (lier) et agréger vos données

Si vous avez besoin de combiner des tables et d’agréger vos données, vous pouvez utiliser à la fois une jointure et les options de type d’agrégation par défaut directement dans la couche physique de l’espace de travail dans Tableau. Dans certains cas, vous pouvez utiliser SQL personnalisé à la place.

Supposons, par exemple, que vous ayez les deux tables suivantes : Commandes et Fournisseurs.

CommandesFournisseurs

Vous pouvez utiliser la requête SQL personnalisé suivante pour trouver un total dans le nombre de commandes et effectuer une jointure gauche dans les tables Commandes et Fournisseurs :

SELECT Vendors.Name,COUNT(Orders.Order) AS Number Of Orders
FROM Orders
LEFT JOIN Vendors
ON Orders.VendorID=Vendors.VendorID
GROUP BY Name;

Le résultat de la requête se présente ainsi :

Pour plus d’informations sur les jointures, consultez Lier vos données.

Erreurs lors de l’identification de colonnes en double

Si votre requête SQL personnalisée identifie des colonnes en double, des erreurs peuvent se produire lorsque vous tentez d’utiliser l’une des colonnes pour votre analyse dans Tableau. Cela se produit même si la requête est valide. Observez par exemple la requête suivante :

SELECT * FROM authors, titleauthor WHERE authors.au_id = titleauthor.au_id

La requête est valide, mais le champ au_id est ambigu, car il existe dans les tables « authors » et « titleauthor ». Tableau se connecte à la requête, mais vous obtenez une erreur chaque fois que vous tentez d’utiliser le champ au_id. Ceci est dû au fait que Tableau ne sait pas à quelle table vous faites référence.

Remarque : il est recommandé de définir des alias de colonne avec une clause AS quand cela est possible dans une requête SQL personnalisée. En effet, chaque base de données possède ses propres règles en matière de génération automatique de nom de colonne, dès lors qu’un alias n’est pas utilisé.

Modifier une requête SQL personnalisée

Pour modifier une requête SQL personnalisée

  1. Dans l’espace de travail de la page Source de données, double-cliquez sur la requête SQL personnalisé dans la couche logique.
  2. Survolez la table SQL personnalisé dans la couche physique jusqu’à ce que la flèche s’affiche.
  3. Cliquez sur la flèche, puis sélectionnez Modifier la requête SQL personnalisée.
  4. Dans la boîte de dialogue, modifiez la requête SQL personnalisée.

Pour modifier le nom d’une requête SQL personnalisée

Lorsque vous faites glisser une requête SQL personnalisée sur la couche logique de l’espace de travail, Tableau lui donne un nom par défaut : Custom SQL Query, Custom SQL Query1, etc. Vous pouvez remplacer le nom par défaut par un nom plus évocateur.

  1. Sur la page Source de données, dans la couche logique de l’espace de travail, sélectionnez la flèche déroulante dans la table de requête SQL personnalisé et sélectionnez Renommer.

  2. Entrez le nom que vous souhaitez utiliser pour votre requête SQL personnalisé.

Utiliser des paramètres dans une requête SQL personnalisée

Dans une instruction de requête SQL personnalisée, vous pouvez utiliser des paramètres pour remplacer une valeur constante par une valeur dynamique. Vous pouvez ensuite mettre à jour le paramètre dans le classeur pour modifier la connexion. Par exemple, vous pouvez vous connecter à une requête SQL personnalisée qui fournit les données de trafic Web d’une page particulière spécifiée par une valeur pageID. Au lieu d’utiliser une constante pour la valeur pageID de la requête SQL, vous pouvez insérer un paramètre. Une fois la connexion terminée, vous pouvez afficher une commande de paramètre dans le classeur. Utilisez la commande de paramètre pour changer le paramètre pageID et insérer des données pour chaque page pertinente sans avoir à modifier ou dupliquer la connexion.

Dans Tableau Desktop, vous pouvez créer un paramètre directement dans la boîte de dialogue SQL personnalisé ou utiliser n’importe quels paramètres faisant partie du classeur. Si vous créez un paramètre, celui-ci devient disponible dans le classeur, comme tout autre paramètre. Consultez Créer des paramètres pour en savoir plus.

Pour la création Web (dans Tableau Cloud ou Tableau Server), vous pouvez utiliser un paramètre existant publié depuis Tableau Desktop. Vous ne pouvez pas créer un nouveau paramètre dans la création Web.

Pour ajouter un paramètre à une requête SQL personnalisée

  1. Dans l’espace de travail de la page Source de données, pointez la table jusqu’à ce que l’icône de modification apparaisse, puis cliquez sur le bouton de modification.
  2. En bas de la boîte de dialogue, cliquez sur Insérer le paramètre.
  3. Sélectionnez une valeur constante dans l’instruction SQL, puis sélectionnez le paramètre que vous souhaitez utiliser à la place dans le menu déroulant Insérer le paramètre. Si vous n’avez pas encore créé de paramètre, sélectionnez Créer un paramètre. Suivez les instructions fournies dans Créer des paramètres pour créer un paramètre.

Remarque : Les paramètres ne peuvent remplacer que des valeurs littérales. Ils ne peuvent remplacer ni des expressions ni des identifiants comme des noms de table.

Dans l’exemple ci-dessous, la requête SQL personnalisée renvoie toutes les commandes associées à la priorité Urgent. Dans l’instruction SQL personnalisée, la priorité de la commande est la valeur constante. Si vous souhaitez changer la connexion pour visualiser les commandes ayant une priorité High, vous devez modifier la source de données.

Au lieu de créer et de gérer plusieurs variantes de la même requête, vous pouvez remplacer la constante de la priorité de commande par un paramètre. Celui-ci doit contenir toutes les valeurs possibles pour Priorité de commande.

Une fois le paramètre créé, vous pouvez l’insérer dans l’instruction SQL pour remplacer la valeur constante.

Une fois que vous avez modifié la connexion, le nouveau paramètre est répertorié dans la zone Paramètres en bas du volet Données; la commande de paramètre s’affiche sur le côté droit de la vue. La connexion est mise à jour à mesure que vous sélectionnez différentes valeurs.

Remarque : Si vous utilisez un extrait, vous devez l’actualiser pour qu’il reflète les modifications apportées au paramètre. La publication d’une source de données qui utilise des paramètres SQL personnalisé contient les paramètres. Ceux-ci sont transférés dans tous les classeurs qui se connectent à la source de données.

Prise en charge de Tableau Catalog pour SQL personnalisé

La prise en charge du SQL personnalisé dans Tableau Catalog dépend de la requête SQL personnalisée.

Tableau Catalog est disponible dans le cadre de l’offre de Gestion des données pour Tableau Server et Tableau Cloud. Pour plus d’informations sur Tableau Catalog, consultez « À propos de Tableau Catalog » dans l’aide de Tableau Server ou Tableau Cloud.

Requêtes prises en charge

Catalog prend en charge les requêtes SQL personnalisées qui répondent à la norme ANSI SQL-2003, à trois exceptions près :

  • Expressions de fuseau horaire
  • Expressions à ensembles multiples
  • Paramètres Tableau

À partir de la version 2021.4, Tableau Catalog prend également en charge l’utilisation du dialecte Transact-SQL (T-SQL) dans Custom SQL, avec les exceptions suivantes :

  • Conseils
  • Clauses FOR
  • Fonctions OPENROWSET, OPENXML et OPENJSON
  • Fonctions scalaires ODBC
  • FOR SYSTEM_TIME
  • TABLESAMPLE
  • Expression MATCH
  • Expression CONTAINS
  • Expression FREETEXT

À partir de Tableau Cloud octobre 2023 et de Tableau Server 2023.3, Tableau Catalog prend également en charge des requêtes SQL personnalisées qui utilisent PostgreSQL, avec les exceptions suivantes :

  • Fonctions XML
  • Fonctions et opérateurs JSON

Fonctionnalités et fonctions prises en charge

Catalog prend en charge les fonctionnalités supplémentaires suivantes pour les sources de données, les classeurs et les flux avec des connexions utilisant les pilotes MySQL ou PostgreSQL, par exemple Amazon Aurora pour MySQL, Amazon RedShift, Pivotal Greenplum Database, MemSQL, Denodo et autres.

  • Fonction MySQL GROUP_CONCAT
  • Tableaux PostgreSQL
  • Fonction PostgreSQL EXTRACT()

D’autres scénarios et fonctionnalités SQL personnalisés peuvent fonctionner, mais Tableau ne les teste pas ou ne les prend pas en charge spécifiquement.

Prise en charge du lignage

Lorsqu’un actif utilise un SQL personnalisé, un message avec un bouton Afficher la requête SQL personnalisée s’affiche dans l’onglet Lignage de la page de l’actif. Cliquez sur le bouton pour voir le SQL personnalisé utilisé dans la connexion. Ensuite, si vous souhaitez copier le SQL personnalisé dans votre presse-papiers, cliquez sur Copier.

Bouton pour afficher la requête SQL personnalisée

Certains types de SQL personnalisés peuvent rendre le lignage en amont incomplet. Lorsque cela se produit, un message apparaît avec ces informations. Les cartes de détails de champ peuvent ne pas contenir de liens vers des colonnes connectées ou ne pas afficher de colonnes connectées du tout. Les cartes de détails de colonne peuvent ne pas contenir de liens vers les champs qui utilisent la colonne ou ne pas afficher de champs du tout.

Si vous examinez le lignage d’une table, notez que Catalog ne prend pas en charge l’affichage des informations de colonne dans le lignage pour les métadonnées de table recueillies à l’aide du SQL personnalisé. Toutefois, si d’autres actifs utilisent la même table et n’utilisent pas de SQL personnalisé, Tableau Catalog peut être en mesure d’afficher des informations sur les colonnes qu’il a découvertes via ces autres actifs.

Dans la capture d’écran suivante, la table factAccountOpportunityByQuarter a été indexée car elle est utilisée par une source de données. Cependant, étant donné qu’elle est référencé par une requête SQL personnalisée, les information de la colonne ne sont pas disponibles.

Dans le cas où plusieurs sources de données, classeurs ou flux utilisent une table, toutes les ressources en aval de cette table qui utilisent une requête SQL personnalisée sont exclues lorsque des filtres sont appliqués au niveau des colonnes. Par conséquent, moins d’actifs en aval apparaissent dans le lignage que ce qui est réellement utilisé.

Pour plus d’informations sur l’utilisation du lignage, consultez « Utiliser le lignage pour l’analyse d’impact » dans l’aide de Tableau Server(Le lien s’ouvre dans une nouvelle fenêtre) ou Tableau Cloud(Le lien s’ouvre dans une nouvelle fenêtre).

Voir également

Utiliser SQL personnalisé et RAWSQL pour effectuer des analyses avancées de données spatiales(Le lien s’ouvre dans une nouvelle fenêtre)

Merci de vos commentaires!Votre commentaire s été envoyé avec succès. Merci!