L'utilisation d'une source de données qui comporte plusieurs tables reliées a une incidence sur le mode d'analyse dans Tableau. Étant donné que plusieurs tables reliées ont des domaines indépendants et conservent leur niveau de détail natif, lorsque vous faites glisser des champs dans la vue :

  • Les données sont interrogées à leur niveau de détail naturel.
  • Seules les données pertinentes pour une visualisation sont interrogées.
  • Les relations entre les tables affectent les résultats de la requête. Le flux de création d'une visualisation peut varier selon la manière dont les tables de champs sont reliées les unes aux autres dans le modèle de données, ou si elles ne sont pas reliées directement.

Pour une vue d'ensemble des améliorations apportées aux sources de données et une introduction à l'utilisation des relations dans Tableau, visionnez cette vidéo de 5 minutes.

Remarque : l'interface de modification des relations présentée dans cette vidéo et dans cette rubrique diffère légèrement de la version actuelle, mais possède les mêmes fonctionnalités.

En savoir plus sur le fonctionnement des relations dans l’article Maîtriser les relations et ces billets du blog Tableau :

Consultez également les podcasts vidéo consacrés aux relations sur le site Action Analytics(Le lien s’ouvre dans une nouvelle fenêtre), par exemple Pourquoi Tableau a-t-il inventé les relations ?(Le lien s’ouvre dans une nouvelle fenêtre) Cliquez sur « Video Podcast » dans Library(Le lien s’ouvre dans une nouvelle fenêtre) (Bibliothèque) pour afficher plus de titres.

Remarque : vous pouvez toujours créer des sources de données à table unique dans Tableau. Vous pouvez créer une table logique à l'aide d'une combinaison de jointures, d'unions, de SQL personnalisé, etc. Le comportement d'analyse d’une table unique dans Tableau n’a pas changé. L'analyse d'une seule table logique contenant un mélange de dimensions et de mesures fonctionne comme dans Tableau pré-2020.2.

Considérations concernant l'analyse

Validation des relations

Vous disposez de plusieurs options pour valider votre modèle de données à des fins d'analyse. Au fur et à mesure que vous créez le modèle pour votre source de données, nous vous recommandons d'accéder à une feuille, de sélectionner cette source de données, puis de créer une visualisation qui explore le nombre d'enregistrements, les données attendues, les valeurs sans correspondances, les valeurs null ou les valeurs de mesures répétées. Essayez de travailler avec des champs de différentes tables pour vous assurer que tout se présente comme attendu.

Que rechercher :

  • Vos relations dans le modèle de données utilisent-elles les champs correspondants corrects pour leurs tables ?
  • L’ajout de plusieurs paires de champs correspondants rendrait-il la relation plus précise ?
  • Que se passe-t-il si vous faites glisser différentes dimensions et mesures dans la vue ?
  • Voyez-vous le nombre de lignes attendu ?
  • Si vous avez modifié l’un des paramètres d’options de performance par rapport aux paramètres par défaut, les valeurs que vous voyez dans la visualisation correspondent-elles à vos attentes ? Si ce n'est pas le cas, vous pouvez vérifier les paramètres, ou les réinitialiser à la valeur par défaut.

Options de validation des relations et du modèle de données :

  • Chaque table inclut le nombre total de ses enregistrements, sous la forme d'un champ nommé TableName(Count), au niveau de détail défini pour cette table. Pour voir le total pour une table, faites glisser le champ Total dans la vue. Pour voir le total pour toutes les tables, sélectionnez le champ Total pour chaque table dans le volet Données, puis cliquez sur le tableau de texte dans Montre-moi.
  • Cliquez sur Afficher les données dans le volet Données pour voir le nombre de lignes et de données par table. En outre, avant que vous ne commenciez à créer des relations, la visualisation des données à partir de la source de données avant ou pendant l’analyse peut être utile pour vous donner une idée de la portée de chaque table. Pour plus d'informations, consultez Afficher les données sous-jacentes.
  • Faites glisser les dimensions sur les lignes pour voir le nombre de lignes dans la barre d’état. Pour voir les valeurs sans correspondances, cliquez sur le menu Analyse, puis sélectionnez Disposition de table > Afficher des lignes vides ou Afficher des colonnes vides. Vous pouvez également faire glisser différentes mesures sur la vue, par exemple<YourTable>(Count) à partir d'une des tables représentées dans votre visualisation. Vous avez ainsi l'assurance que vous verrez toutes les valeurs de dimensions de cette table.

Conseil : pour voir les requêtes générées pour les relations, vous pouvez utiliser l'enregistrement des performances dans Tableau Desktop.

  1. Cliquez sur le menu d'aide, puis sélectionnez Paramètres et Performances > Démarrer l'enregistrement des performances.
  2. Faites glisser les champs dans la vue pour créer votre visualisation.
  3. Cliquez sur le menu d'aide, puis sélectionnez Paramètres et Performances > Arrêter l'enregistrement des performances. Le classeur Enregistrement des performances s'ouvrira automatiquement.
  4. Dans le tableau de bord Résumé des performances, sous les événements triés par heure, cliquez sur une barre « Exécution de la requête », et consultez la requête ci-dessous.

Une autre option plus avancée consiste à utiliser Tableau Log Viewer(Le lien s’ouvre dans une nouvelle fenêtre) sur GitHub. Vous pouvez filtrer sur un mot-clé spécifique à l’aide de la commande end-protocol.query. Pour plus d’informations, commencez par la page wiki Tableau Log Viewer(Le lien s’ouvre dans une nouvelle fenêtre) dans GitHub.

Visualisations ne contenant que des dimensions

Lorsque vous utilisez une source de données multi-tables avec des tables reliées : si vous créez une visualisation ne comportant que des dimensions, Tableau utilise des jointures internes et vous ne verrez pas le domaine complet sans correspondances.

Pour voir des combinaisons partielles de valeurs de dimensions, vous pouvez :

  • Utiliser Afficher les lignes/colonnes vides pour voir toutes les lignes possibles. Cliquer sur le menu Analyse, puis sélectionner Disposition de table > Afficher des lignes vides ou Afficher des colonnes vides. Sachez que ce paramètre déclenchera également une densification pour les champs Date et Classe numérique, laquelle peut n'être pas souhaitable.
  • Ajouter une mesure à la vue, par exemple <YourTable>(Count) à partir d’une des tables représentées dans votre visualisation. Vous avez ainsi l'assurance que vous verrez toutes les valeurs de dimensions de cette table.

Pour plus d’informations, consultez également Comportement éventuellement surprenant des valeurs sans correspondances pour les dimensions et Résoudre les problèmes de l'analyse multi-tables.

Dans quels cas utiliser des calculs et des expressions LOD

Étant donné que Tableau comprend désormais le niveau de détail (LOD) de vos tables d'entrée, vous ne devriez pas avoir besoin d'utiliser des calculs LOD pour supprimer les duplications indésirables dues aux jointures.

Vous pouvez toujours utiliser des calculs LOD pour :

  • Traiter les duplications indésirables dans vos tables source.
  • Calculer des agrégations multi-niveaux (p. ex. une moyenne sur une somme)
  • Effectuer une analyse de cohortes (p. ex. calculer la première date de commande pour chaque client)

Si la dimensionnalité d’un calcul LOD comprend des champs à partir d’une seule table, ce calcul LOD apparaîtra dans sa propre table dans le volet Données.

Exemples d’analyse multi-tables

Les exemples suivants montrent comment les données peuvent être interrogées dans plusieurs tables reliées. Cette source de données multi-tables contient une courte liste d'apparitions d'acteurs dans différents rôles au cinéma.

Une ligne dans la table Apparitions signifie qu'un acteur a joué un personnage particulier dans un film spécifique. Dans cet ensemble de données, un Acteur peut avoir zéro ou plusieurs Apparitions.

En savoir plus sur le fonctionnement des relations dans ces billets du blog Tableau :

Exemple 1 : analyse d'une seule question dans les données reliées par rapport aux données reliées

Lorsque vous vous connectiez à des données dans Tableau pré-2020.2, votre source de données pouvait consister en une seule table, ou plusieurs tables qui avaient été liées ou réunies ensemble en une seule table dénormalisée. Depuis Tableau 2020.2, Tableau reconnaît et préserve les données normalisées pour les sources de données multi-tables, où les données des tables restent séparées, et où chaque table conserve son niveau de détail natif. Les exemples suivants montrent que l'analyse diffère entre les données de table unique et celles de plusieurs tables.

Cet exemple montre trois tables de données de films : Apparitions, Acteurs et Films.

Ces tables peuvent être liées ensemble, en liant la table Apparitions avec la table Acteurs sur Acteur = Acteur et la table Apparitions avec la table Films sur Film = Film. Si les jointures sont des jointures externes complètes de sorte qu'aucune ligne n'est perdue, le résultat final se présente ainsi. Notez que les champs qui sont utilisés dans les clauses de jointure apparaissent deux fois.

Les données ainsi rassemblées dans une seule table sont dites dénormalisées ou aplaties.

Ces données jointes sont des données aplaties. Chaque ligne est constituée de l'apparition d'un acteur en tant que personnage dans un film (ainsi John Rhys-Davies a deux lignes pour Le Retour du roi car il a joué deux personnages) ; la granularité des données est donc au niveau d'un personnage dans un film. Les informations qui sont pertinentes dans plusieurs lignes sont dupliquées. La date de la première du film Le Retour du roi est présente deux fois car il y a deux personnages de ce film dans l'ensemble de données. La taille de John Rhys-Davies est listée cinq fois car il y a 5 combinaisons uniques de personnage/film pour lui en tant qu'acteur.

Ces données aplaties présentent donc certaines caractéristiques dont il faut tenir compte. Par exemple, si vous vouliez tracer la taille des acteurs en fonction de la recette moyenne brute de leurs films, vous pourriez envisager d'amener Taille sur Colonnes et Recette brute sur Lignes, puis de prendre la moyenne de la Recette brute. Mais si vous faites cela, la vue par défaut ne semble pas correcte. Ici, John Rhys-Davies est censé mesurer 925 cm, soit plus de 30 pieds !

Ceci est dû au fait que l'agrégation par défaut est SUM. Il y a 5 lignes dans les données le concernant, donc on obtient sa véritable taille de 185 cm cinq fois. Vous pourriez régler ce problème en modifiant l'agrégation sur la taille, disons à la moyenne ou au minimum. Cela ne renvoie effectivement la valeur que pour une seule ligne (puisqu'elles sont toutes identiques).

Lorsque vous modifiez l'agrégation, les tailles sont beaucoup plus réalistes. Mais maintenant, vous devez faire attention à la recette brute moyenne. Rappelez-vous que Tableau prend en compte l'ensemble des cinq lignes pour la taille de John Rhys-Davies. Quand on pense à la recette brute moyenne des films dans lesquels il a joué, il ne devrait pas s'agir de la moyenne de cinq lignes, mais plutôt de la moyenne de trois films. Vous ne voulez pas compter deux fois la recette brute de Le Retour du roi juste parce qu'il y a joué deux personnages. Mais est-ce cela qui se passe ?

En faisant quelques calculs rapides, les films du Seigneur des Anneaux devraient avoir une moyenne de (869 + 923 + 1119)/3, soit 970,3 $. Cependant, la valeur dans le nuage de points est de 990,6 $. La moyenne actuelle est issue des cinq lignes (869 + 923 + 923 + 1119 + 1119)/5.

Ce n'est pas aussi facile à régler que le problème de la taille par simple modification de l'agrégation. Vous devez utiliser une expression de niveau de détail (LOD) pour modifier le niveau de détail que Tableau prend en compte, en partant de la valeur par défaut (Apparence) jusqu'au niveau Film. Vous pouvez créer un calcul pour LOD Recette brute sous la forme {FIXED [Film] : MIN([Brut (USD millions)])} et ensuite prendre la moyenne de ce nouveau champ LOD Recette brute pour notre vue.

L'expression LOD peut être comprise comme suit : « pour chaque film, renvoyer sa valeur Recette brute minimum ». Cela élimine le problème de duplication car la recette brute est toujours retournée par film, même si la vue est construite avec le film et l'acteur.

Maintenant, les chiffres sont corrects. John Rhys-Davies mesure 185 cm de haut, et la recette brute moyenne de ses films dans cet ensemble de données est de 970,3. Vous devez comprendre comment les données sont répliquées et comment Tableau a regroupé les données pour les afficher avant de pouvoir vous assurer que les valeurs correctes sont renvoyées.

Données normalisées dans plusieurs tables

La création de relations entre les tables logiques peut sembler similaire à la création de jointures, mais au lieu d'aplatir les données en une seule table, avec toutes les réplications que cela peut entraîner, Tableau reste conscient des relations entre les tables. Les informations sont extraites de chaque table au niveau de détail approprié et reliées à d'autres données.

Dans le volet Source de données, vous ne verrez pas la vue de la grille « complète » de la table aplatie. Elle n'existe pas. Tableau conserve les trois tables telles quelles et se contente d'établir les relations, en rassemblant les données requises selon les besoins de la vue.

Pour créer le même nuage de points, faites glisser les options Taille et Recette brute dans la vue et définissez Recette brute sur la moyenne. Exactement ! Tableau examine la façon dont les données de chaque table sont reliées aux données d'autres tables reliées et déduit comment la taille doit être affichée (par acteur) et comment la recette brute moyenne doit être calculée (par film).

Exemple 2 : dimension à partir d'une seule table

Si les dimensions de votre visualisation proviennent d'une seule table, Tableau interroge une seule table et affiche les résultats pour l'ensemble du domaine. Vous pouvez ajouter des mesures et continuer à voir tout le domaine.

Par exemple, en utilisant la source de données Apparitions dans un film présentée ci-dessus, l'ajout du champ Acteur à une visualisation génère la visualisation suivante :

Comme la seule dimension de la visualisation provient de la table Acteurs, Tableau effectue une recherche uniquement dans la table Acteurs. Tous les acteurs qui apparaissent dans la table Acteurs sont affichés dans la visualisation qu'ils aient ou non des Apparitions.

Le fait d'amener le champ Apparitions d'un acteur dans la vue comme mesure, puis d'appliquer une agrégation COUNT crée une vue qui montre le nombre d'apparitions par acteurs. Remarquez que Sigourney Weaver n'a pas d'apparitions, mais que son nom est toujours dans la vue.

Exemple 3 : dimensions de plusieurs tables

Si les dimensions dans la vue proviennent de plusieurs tables, Tableau trouve la table qui relie toutes les dimensions et affiche le domaine de cette table. Par conséquent, certaines valeurs de dimension que vous avez vues dans l'exemple 1 changent.

Par exemple, faire glisser un champ de la table Films dans la visualisation modifie la requête. Comme les tables Films et Acteurs sont reliées par la table Apparitions, la requête ne retourne que les paires Acteur/Film qui existent dans la table Apparitions.

Étant donné que Sigourney Weaver n'a pas d'Apparitions dans cet ensemble de données (et, par conséquent, n'est pas reliée à l'un des Films dans l'ensemble de données), elle n'apparaît pas dans la visualisation des paires Acteur/Film :

Exemple 4 : mesures qui ne peuvent pas être divisées par une dimension

Si une mesure ne peut pas être divisée par une dimension, Tableau réplique la mesure sur cette dimension.

La visualisation suivante montre le montant total brut par film. Comme les deux champs proviennent de la table Films, Tableau n'interrogera que la table Films.

La table Films inclut les recettes brutes déjà agrégées pour chaque film, comme le montre la visualisation suivante (la recette brute pour Infinity War n'était pas disponible au moment de la création de cet ensemble de données et affiche zéro).

Si vous ajoutez Acteur à cette visualisation, Tableau sait qu'il ne peut pas ventiler les recettes brutes du film par Acteur, car cette information plus granulaire n'est pas disponible dans le modèle de données. Au lieu de cela, Tableau affiche les recettes brutes de chaque film, répliquées entre les acteurs.

Exemple 5 : dimension non reliée hiérarchiquement à une mesure

En supprimant la dimension Film de la visualisation précédente, on obtient la somme de la mesure Recette brute du film pour chaque Acteur. Le résultat est l'agrégation Recette brute du film pour chaque film dans lequel l'acteur est apparu.

Dans ce cas, il n'y a pas de relation hiérarchique entre la dimension, l'Acteur, et la mesure, Recette brute du film. Plusieurs acteurs peuvent avoir joué dans le même film. Par exemple, Benedict Cumberbatch et Chris Hemsworth ont tous deux joué dans Doctor Strange. Dans ce cas, Tableau inclut la Recette brute du film pour Doctor Strange dans les totaux des deux acteurs.

Étant donné que la même valeur Recette brute du film est incluse dans les totaux de plusieurs acteurs, Tableau n'additionnera pas directement ces valeurs.

Cependant, lorsque les totaux sont affichés pour cette visualisation, notez que Tableau calcule correctement le total de la Recette brute du film sans inclure les films en double.

 

Résoudre les problèmes de l'analyse multi-tables

Les situations suivantes sont possibles avec des tables multi-tables reliées. Ce tableau décrit des scénarios connus et des descriptions détaillées de résolution des problèmes de votre analyse.

Situation de l’analyse   Description
Jointure interne pour les visualisations ne contenant que des dimensions   Vous ne pouvez pas voir immédiatement toutes les valeurs que vous attendiez lorsque vous ajoutez plusieurs dimensions à la même vue. Ou, vous remarquerez peut-être que l’ajout d’une nouvelle dimension à la visualisation à partir d’une table différente entraîne la disparition de certaines valeurs.

Tableau utilisera des requêtes qui préservent la combinaison de valeurs qui existent réellement dans les données. Cela signifie que vous verrez des lignes qui seraient produites par une jointure interne des tables fournissant des dimensions à la visualisation.

Pour voir des combinaisons partielles des valeurs de dimensions, vous pouvez soit activer Afficher des lignes/colonnes vides pour voir toutes les lignes possibles, ou vous pouvez ajouter une mesure, par exemple <MyTable>(Count), à partir de l’une des tables représentées dans la vue pour être sûr de voir toutes les valeurs de dimensions de cette table.
Constantes dans les calculs   Dans une source de données multi-tables, les valeurs constantes se comportent comme si elles provenaient de leur propre table avec une seule ligne. Si vous agréez une valeur constante, elle se comportera comme si l’agrégation était sur une seule ligne. La valeur Sum(10) sera toujours égale à 10. La valeur Avg(10) sera également toujours égale à 10. La valeur Count(10) sera toujours égale à 1.

Pour assurer la rétrocompatibilité, les valeurs constantes dans une source de données de table unique se comporteront comme si la valeur constante était reproduite pour chaque valeur de la table.

Les constantes dans les calculs de niveau de ligne ne modifient pas le niveau de ligne de détail du calcul. Le calcul [Ventes] + 10 se comportera comme s’il provenait de la même table que le champ [Ventes].
Forcer la jointure externe   Tableau s’assure que toutes les valeurs de mesures sont représentées dans la visualisation (ainsi que toutes les combinaisons de valeurs de dimensions qui se produisent réellement dans les données). De ce fait, si vous voulez être sûr de voir toutes les valeurs possibles dans vos données, y compris les « valeurs null sans correspondances », vous pouvez le faire en intégrant des mesures dans la vue depuis chaque table de la feuille de calcul.
Je ne vois pas les valeurs de mesures que j’attends d’un calcul inter-tables   Le domaine d’un calcul est la jointure interne de ses entrées. S’il n’y a pas de valeurs correspondantes depuis toutes les entrées du calcul de la mesure, elles ne seront pas incluses dans le calcul de la mesure.

Envisagez d’utiliser un calcul LOD pour déplacer les valeurs de mesures vers le même objet avant de créer le calcul de niveau de ligne.
Le calcul permettant de passer d’un champ à l’autre à partir de différentes tables logiques donne des résultats inattendus   Si vous avez un calcul qui bascule entre les champs de niveau de ligne, soit en utilisant une instruction de cas, dans le cas d'une instruction, ou une fonction telle que « IFNULL », vous pouvez obtenir des résultats inattendus, parce que ce calcul est calculé pour chaque ligne, où la ligne est la jointure interne entre les entrées du calcul.

Une meilleure approche consiste à passer d’une valeur agrégée à l’autre, plutôt que d’essayer de basculer dans le calcul de niveau de ligne. Ceci produit également de meilleures performances dans les scénarios de table unique.

Alternativement, le problème ne se pose que pour les calculs qui s’étendent entre plusieurs tables, donc il est également possible d'utiliser des calculs LOD pour intégrer tous les champs dans la même table.

À ne pas faire :
SUM( IF [Parameter] == "Foo" THEN [Field 1] ELSE [Field 2] END )

Opération correcte :
IF [Parameter] == "Foo" THEN SUM([Field 1]) ELSE SUM([Field 2]) END
Valeurs null inattendues sans correspondances   Il se peut que des valeurs inattendues de mesures associées à une valeur de dimension null s'affichent. Cela peut éventuellement être un signe que les relations dans la source de données ont été mal configurées. Cela peut également indiquer qu’il existe en fait des valeurs sans correspondances depuis la table qui contient la mesure, et qui n’ont pas de ligne correspondante dans la table de dimensions.

Dans le passé, ces données auraient pu être perdues si le type de jointure incorrect avait été sélectionné. Lorsque vous utilisez des relations, ces valeurs sans correspondances sont préservées. Si vous ne voulez pas voir les valeurs sans correspondances, vous pouvez les exclure à l’aide d’un filtre.
Valeurs agrégées incorrectes   Utilisez-vous des relations ou des jointures ? Avec les relations, les agrégations sont calculées correctement par défaut. Si vous utilisez des jointures, vous devrez peut-être écrire des calculs LOD pour dédupliquer les valeurs.

Avez-vous incorrectement défini les options de performance sur les relations ? Essayez de réinitialiser les options de performance aux paramètres par défaut et voir si ce changement produit les agrégations correctes.
Les dimensions reproduisent les valeurs de mesures plutôt que de les partitionner.

Les filtres de dimensions ne créent pas des sous-ensembles de mesures.
  Vérifiez que les champs utilisés pour définir les relations sont corrects.
Tableau génère trop de requêtes ou des requêtes avec de nombreux jointures gauches   Consultez les journaux ou l’enregistrement des performances pour voir combien de requêtes sont générées et combien de jointures gauches sont utilisées. Grâce aux nouvelles capacités de modélisation des données, Tableau génère des requêtes avec des jointures gauches et/ou des requêtes supplémentaires pour s’assurer que les valeurs de mesures sans correspondances sont toujours incluses dans la visualisation. Si vous n’avez pas besoin de voir les valeurs sans correspondances, utilisez des filtres pour supprimer les valeurs sans correspondances (NULL) de votre visualisation. Cela devrait se traduire par moins de requêtes.

Si vous savez que vos données n’ont pas de valeurs sans correspondances, vous pouvez définir le paramètre d’intégrité référentielle pour chaque relation sur « Toutes les valeurs correspondent » dans les options de performance. Cela se traduira également par moins de requêtes.

Vous pouvez également réduire la complexité de votre visualisation afin de réduire le nombre de requêtes générées. La suppression des mesures et la dissimulation des commandes de filtre sont des moyens clés de simplifier les requêtes sur des données multi-tables reliées.
Les requêtes comportent de nombreuses sous-requêtes   Consultez les journaux ou l’enregistrement des performances pour voir la complexité des requêtes générées par Tableau.

Tableau génère automatiquement des sous-requêtes pour dédupliquer les données, si nécessaire, afin de générer des agrégations correctes. Il en va de même pour les requêtes générées par des calculs LOD.

Si vous savez que les relations entre les tables logiques de vos données ont une cardinalité de type plusieurs-à-un ou un-à-un, vous pouvez définir ces informations de cardinalité dans les options de performances des relations. Tableau pourra ainsi éliminer les sous-requêtes inutiles puisqu’il sait qu’aucune duplication ne peut avoir lieu.
J’utilisais des jointures pour filtrer les données   Dans la version 2020.2, Tableau fait tout son possible pour retrouver les valeurs sans correspondances. Cela signifie parfois qu’il utilisera une jointure gauche là où vous pourriez avoir spécifié une jointure interne pour filtrer intentionnellement les données.

Si vous filtrez les valeurs sans correspondances qui sont intégrées par cette jointure, Tableau sera en mesure d’optimiser la requête de nouveau en une jointure interne.

Selon votre scénario spécifique, il pourrait être logique de modéliser cette jointure interne comme une jointure physique dans une table logique. Cette possibilité est particulièrement performante si une table contenant des mesures est utilisée pour filtrer une table de dimensions, car elle n’introduit pas de réplication de mesure supplémentaire.
Merci de vos commentaires !