Construire des relations : le SQL

Début mai, Tableau a publié la version 2020.2 de Tableau Desktop, qui propose un tout nouveau modèle de données. Au moment de la sortie, nous l'indiquions dans le post « Nouer des relations : le nouveau modèle de données de Tableau », comment les relations rendent la combinaison de données plus facile, plus rapide, plus flexible et plus puissante, par rapport aux fusions ou aux jointures traditionnelles. L'objectif de cet article est d'approfondir l'aspect des performances et de montrer que lorsque nous utilisons des relations, nous interrogeons uniquement la partie du modèle de données utilisée dans la visualisation. Cela contraste avec les jointures, dans lesquelles l'ensemble du modèle de données est interrogé lorsque nous utilisons un élément du modèle de données dans notre visualisation.
Aujourd'hui, nous allons utiliser la fonctionnalité d'enregistrement des performances de Tableau pour explorer ce sujet. L'enregistreur de performances est un outil extrêmement puissant qui enregistre des informations sur les événements clés lorsque vous interagissez avec vos visualisations Tableau. Il est généralement utilisé pour analyser et résoudre les problèmes de performance des tableaux de bord. Nous l'utiliserons ici pour montrer ce qui se passe en coulisse lorsque les données sont combinées dans Tableau. Nous examinerons en particulier les requêtes SQL mises en place par Tableau pour récupérer les données.
Si vous souhaitez suivre, vous pouvez inscrivez-vous pour un essai gratuit de Tableau Desktop. Nous utiliserons le Ensemble de données sur la librairie, créé par Tableau pour présenter les fonctionnalités du nouveau modèle de données. Les données brutes peuvent être téléchargées sous forme de fichier xlsx.
L'ensemble de données Bookshop se compose de 13 tableaux, qui doivent être combinés comme indiqué dans cette image. Par souci de simplicité, nous n'en utiliserons que cinq plus tard. Commencez par connecter Tableau Desktop au fichier Bookshop.xlsx et faites glisser les tableaux de gauche vers le canevas pour établir les relations suivantes :

Notez que nous bénéficions déjà énormément de nos relations. Nous avons pu constituer une source de données complexe composée de cinq tableaux différents en quelques secondes. De plus, nous ne savons toujours pas quelle visualisation nous allons créer, mais nous pouvons être sûrs que cette source servira toutes les visualisations que nous souhaiterions créer.
Dans une nouvelle feuille de travail, nous pouvons activer immédiatement l'enregistreur de performances, en accédant à Aide > Paramètres et performances > Démarrer l'enregistrement des performances :

L'enregistrement des performances étant activé, créons maintenant une visualisation simple : une carte indiquant l'emplacement (ville) des maisons d'édition (couleur) et le nombre de livres (le nombre de livres du tableau Book) pour chacune (taille) :

Une fois que nous avons terminé, nous pouvons arrêter l'enregistrement des performances - Aide > Paramètres et performances > Arrêter l'enregistrement des performances :

Après quelques secondes, un nouveau classeur en lecture seule, nommé PerformanceRecording, devrait apparaître sur votre écran. Ce classeur est produit automatiquement par Tableau et contient des données collectées par l'enregistreur de performances.
Ce classeur contient de nombreuses informations, mais pour l'instant, nous ne nous intéressons qu'aux requêtes SQL que Tableau a soumises à la source de données. Alors, tout d'abord, supprimons la limite inférieure du filtre « Afficher les événements qui prennent au moins (en secondes) ». Ensuite, nous pouvons sélectionner des événements dans la catégorie « Exécution de la requête » uniquement :

Enfin, nous pouvons cliquer sur le dernier événement de la chronologie (celui associé à notre feuille de travail « Publisher Map »), ce qui devrait faire apparaître la requête SQL associée à cet événement en bas de page :

Pour référence, voici la requête SQL complète :
SELECT "t0"."City" AS "City",
"t0"."Country" AS "Country",
"t0"."Publishing House" AS "Publishing House",
"t0"."State" AS "State",
SUM(1) AS "cnt:Book_4DD6B56498F74A318DDBD55DDD24E58F:ok"
FROM "TableauTemp"."Book$" "Book"
INNER JOIN (
SELECT
"Book"."BookID" AS "BookID",
"Publisher"."City" AS "City",
"Publisher"."Country" AS "Country",
"Publisher"."Publishing House" AS "Publishing House",
"Publisher"."State" AS "State"
FROM "TableauTemp"."Book$" "Book"
LEFT JOIN "TableauTemp"."Edition$" "Edition"
ON ("Book"."BookID" = "Edition"."BookID")
LEFT JOIN "TableauTemp"."Publisher$" "Publisher"
ON ("Edition"."PubID" = "Publisher"."PubID")
GROUP BY 1, 2, 3, 4, 5
) "t0"
ON ("Book"."BookID" IS NOT DISTINCT FROM "t0"."BookID")
GROUP BY 1, 2, 3, 4Aux fins de cet exercice, concentrons-nous sur les tableaux qui sont réellement interrogés : livre, éditeur et édition. Ainsi, sur les cinq tables qui étaient initialement liées, seules les trois qui contiennent des données pertinentes pour notre visualisation apparaissent dans la requête SQL. De plus, notez comment Tableau a choisi les types de jointure à implémenter. Nous n'avons pas eu à les choisir à l'avance.
Nous pouvons maintenant répéter l'exercice dans un nouveau classeur, mais cette fois, nous allons joindre les cinq tableaux, au lieu de créer des relations entre eux. N'oubliez pas que vous pouvez toujours créer des jointures en accédant à la couche physique d'une table. Ainsi, une fois que vous avez fait glisser le tableau Livres dans le canevas de gauche, assurez-vous de double-cliquer dessus pour créer les jointures. Ici, nous avons opté pour des jointures gauches partout :

Une fois que vous aurez effectué toutes les étapes, voici la requête SQL que vous verrez dans le nouveau classeur PerformanceRecording :
SELECT "Publisher"."City" AS "City",
"Publisher"."Country" AS "Country",
"Publisher"."Publishing House" AS "Publishing House",
"Publisher"."State" AS "State", SUM(1) AS "cnt:Book_7574EAB3E16C49EFB49807BEEF2AF0C1:ok"
FROM "TableauTemp"."Book$" "Book"
LEFT JOIN "TableauTemp"."Author$" "Author"
ON ("Book"."AuthID" = "Author"."AuthID")
LEFT JOIN "TableauTemp"."Edition$" "Edition"
ON ("Book"."BookID" = "Edition"."BookID")
LEFT JOIN "TableauTemp"."Publisher$" "Publisher"
ON ("Edition"."PubID" = "Publisher"."PubID")
LEFT JOIN "TableauTemp"."'Sales Q1$'" "Sales Q1"
ON ("Edition"."ISBN" = "Sales Q1"."ISBN")
GROUP BY 1, 2, 3, 4Encore une fois, nous sommes surtout intéressés par les tableaux interrogés, qui, dans ce cas, sont tous les cinq : livre, auteur, édition, ventes au premier trimestre et éditeur. Avec les jointures, les données sont combinées à l'avance. Par conséquent, vous pouvez voir des déclarations de jointure pour les cinq tableaux, même si nous n'obtenons pas de données à partir des tableaux Sales Q1 ou Author.
Vous avez peut-être également remarqué que le fait de faire glisser le champ Livre (Nombre) jusqu'à la taille souhaitée ne vous donne pas les mêmes chiffres qu'auparavant. Avec les relations, chaque table conserve son niveau de détail natif. Cela signifie que nous pouvons utiliser le nombre de tables de livres dédié dans la visualisation et obtenir la bonne réponse. Cependant, la jonction de tables présentant différents niveaux de détail entraîne la duplication des enregistrements, ce qui explique pourquoi le nombre est gonflé.
Cet exercice met en évidence le pouvoir des relations, dans le cadre desquelles les combinaisons sont dynamiques et s'adaptent à votre visualisation, ce qui améliore considérablement la flexibilité de vos sources de données et les performances de vos tableaux de bord. Si vous souhaitez essayer les relations, vous pouvez inscrivez-vous pour un essai gratuit de Tableau Desktop.
Début mai, Tableau a publié la version 2020.2 de Tableau Desktop, qui propose un tout nouveau modèle de données. Au moment de la sortie, nous l'indiquions dans le post « Nouer des relations : le nouveau modèle de données de Tableau », comment les relations rendent la combinaison de données plus facile, plus rapide, plus flexible et plus puissante, par rapport aux fusions ou aux jointures traditionnelles. L'objectif de cet article est d'approfondir l'aspect des performances et de montrer que lorsque nous utilisons des relations, nous interrogeons uniquement la partie du modèle de données utilisée dans la visualisation. Cela contraste avec les jointures, dans lesquelles l'ensemble du modèle de données est interrogé lorsque nous utilisons un élément du modèle de données dans notre visualisation.
Aujourd'hui, nous allons utiliser la fonctionnalité d'enregistrement des performances de Tableau pour explorer ce sujet. L'enregistreur de performances est un outil extrêmement puissant qui enregistre des informations sur les événements clés lorsque vous interagissez avec vos visualisations Tableau. Il est généralement utilisé pour analyser et résoudre les problèmes de performance des tableaux de bord. Nous l'utiliserons ici pour montrer ce qui se passe en coulisse lorsque les données sont combinées dans Tableau. Nous examinerons en particulier les requêtes SQL mises en place par Tableau pour récupérer les données.
Si vous souhaitez suivre, vous pouvez inscrivez-vous pour un essai gratuit de Tableau Desktop. Nous utiliserons le Ensemble de données sur la librairie, créé par Tableau pour présenter les fonctionnalités du nouveau modèle de données. Les données brutes peuvent être téléchargées sous forme de fichier xlsx.
L'ensemble de données Bookshop se compose de 13 tableaux, qui doivent être combinés comme indiqué dans cette image. Par souci de simplicité, nous n'en utiliserons que cinq plus tard. Commencez par connecter Tableau Desktop au fichier Bookshop.xlsx et faites glisser les tableaux de gauche vers le canevas pour établir les relations suivantes :

Notez que nous bénéficions déjà énormément de nos relations. Nous avons pu constituer une source de données complexe composée de cinq tableaux différents en quelques secondes. De plus, nous ne savons toujours pas quelle visualisation nous allons créer, mais nous pouvons être sûrs que cette source servira toutes les visualisations que nous souhaiterions créer.
Dans une nouvelle feuille de travail, nous pouvons activer immédiatement l'enregistreur de performances, en accédant à Aide > Paramètres et performances > Démarrer l'enregistrement des performances :

L'enregistrement des performances étant activé, créons maintenant une visualisation simple : une carte indiquant l'emplacement (ville) des maisons d'édition (couleur) et le nombre de livres (le nombre de livres du tableau Book) pour chacune (taille) :

Une fois que nous avons terminé, nous pouvons arrêter l'enregistrement des performances - Aide > Paramètres et performances > Arrêter l'enregistrement des performances :

Après quelques secondes, un nouveau classeur en lecture seule, nommé PerformanceRecording, devrait apparaître sur votre écran. Ce classeur est produit automatiquement par Tableau et contient des données collectées par l'enregistreur de performances.
Ce classeur contient de nombreuses informations, mais pour l'instant, nous ne nous intéressons qu'aux requêtes SQL que Tableau a soumises à la source de données. Alors, tout d'abord, supprimons la limite inférieure du filtre « Afficher les événements qui prennent au moins (en secondes) ». Ensuite, nous pouvons sélectionner des événements dans la catégorie « Exécution de la requête » uniquement :

Enfin, nous pouvons cliquer sur le dernier événement de la chronologie (celui associé à notre feuille de travail « Publisher Map »), ce qui devrait faire apparaître la requête SQL associée à cet événement en bas de page :

Pour référence, voici la requête SQL complète :
SELECT "t0"."City" AS "City",
"t0"."Country" AS "Country",
"t0"."Publishing House" AS "Publishing House",
"t0"."State" AS "State",
SUM(1) AS "cnt:Book_4DD6B56498F74A318DDBD55DDD24E58F:ok"
FROM "TableauTemp"."Book$" "Book"
INNER JOIN (
SELECT
"Book"."BookID" AS "BookID",
"Publisher"."City" AS "City",
"Publisher"."Country" AS "Country",
"Publisher"."Publishing House" AS "Publishing House",
"Publisher"."State" AS "State"
FROM "TableauTemp"."Book$" "Book"
LEFT JOIN "TableauTemp"."Edition$" "Edition"
ON ("Book"."BookID" = "Edition"."BookID")
LEFT JOIN "TableauTemp"."Publisher$" "Publisher"
ON ("Edition"."PubID" = "Publisher"."PubID")
GROUP BY 1, 2, 3, 4, 5
) "t0"
ON ("Book"."BookID" IS NOT DISTINCT FROM "t0"."BookID")
GROUP BY 1, 2, 3, 4Aux fins de cet exercice, concentrons-nous sur les tableaux qui sont réellement interrogés : livre, éditeur et édition. Ainsi, sur les cinq tables qui étaient initialement liées, seules les trois qui contiennent des données pertinentes pour notre visualisation apparaissent dans la requête SQL. De plus, notez comment Tableau a choisi les types de jointure à implémenter. Nous n'avons pas eu à les choisir à l'avance.
Nous pouvons maintenant répéter l'exercice dans un nouveau classeur, mais cette fois, nous allons joindre les cinq tableaux, au lieu de créer des relations entre eux. N'oubliez pas que vous pouvez toujours créer des jointures en accédant à la couche physique d'une table. Ainsi, une fois que vous avez fait glisser le tableau Livres dans le canevas de gauche, assurez-vous de double-cliquer dessus pour créer les jointures. Ici, nous avons opté pour des jointures gauches partout :

Une fois que vous aurez effectué toutes les étapes, voici la requête SQL que vous verrez dans le nouveau classeur PerformanceRecording :
SELECT "Publisher"."City" AS "City",
"Publisher"."Country" AS "Country",
"Publisher"."Publishing House" AS "Publishing House",
"Publisher"."State" AS "State", SUM(1) AS "cnt:Book_7574EAB3E16C49EFB49807BEEF2AF0C1:ok"
FROM "TableauTemp"."Book$" "Book"
LEFT JOIN "TableauTemp"."Author$" "Author"
ON ("Book"."AuthID" = "Author"."AuthID")
LEFT JOIN "TableauTemp"."Edition$" "Edition"
ON ("Book"."BookID" = "Edition"."BookID")
LEFT JOIN "TableauTemp"."Publisher$" "Publisher"
ON ("Edition"."PubID" = "Publisher"."PubID")
LEFT JOIN "TableauTemp"."'Sales Q1$'" "Sales Q1"
ON ("Edition"."ISBN" = "Sales Q1"."ISBN")
GROUP BY 1, 2, 3, 4Encore une fois, nous sommes surtout intéressés par les tableaux interrogés, qui, dans ce cas, sont tous les cinq : livre, auteur, édition, ventes au premier trimestre et éditeur. Avec les jointures, les données sont combinées à l'avance. Par conséquent, vous pouvez voir des déclarations de jointure pour les cinq tableaux, même si nous n'obtenons pas de données à partir des tableaux Sales Q1 ou Author.
Vous avez peut-être également remarqué que le fait de faire glisser le champ Livre (Nombre) jusqu'à la taille souhaitée ne vous donne pas les mêmes chiffres qu'auparavant. Avec les relations, chaque table conserve son niveau de détail natif. Cela signifie que nous pouvons utiliser le nombre de tables de livres dédié dans la visualisation et obtenir la bonne réponse. Cependant, la jonction de tables présentant différents niveaux de détail entraîne la duplication des enregistrements, ce qui explique pourquoi le nombre est gonflé.
Cet exercice met en évidence le pouvoir des relations, dans le cadre desquelles les combinaisons sont dynamiques et s'adaptent à votre visualisation, ce qui améliore considérablement la flexibilité de vos sources de données et les performances de vos tableaux de bord. Si vous souhaitez essayer les relations, vous pouvez inscrivez-vous pour un essai gratuit de Tableau Desktop.
