Maîtriser les calculs dans les relations
Les calculs peuvent être intimidants. Les calculs dans une source de données utilisant des relations peuvent paraître encore plus intimidants. Mais il n’y a aucune raison d’avoir peur des calculs dans les relations.
Remarque : si vous ne maîtrisez pas encore pleinement les principes sous-jacents des sources de données qui utilisent les relations, nous vous conseillons de lire Maîtriser les relations avant de vous lancer dans cette rubrique.
Types de calcul
Un calcul au niveau de la ligne est calculé pour chaque enregistrement de données. Par exemple, chaque transaction de vente a un montant de vente, le prix, qui est potentiellement ajusté par le pourcentage de remise : Price * (1- ZN([Discount]))
. Le calcul s’effectue ligne par ligne pour chaque transaction. On peut considérer les résultats comme l’ajout d’une nouvelle colonne dans la source de données pour le montant des ventes.
Il existe également des calculs agrégés. Les calculs agrégés sont calculés au niveau de détail de la visualisation et leur valeur dépend de la structure de la vue. Les totaux sont un exemple de calcul agrégé. La valeur de Count([Title])
varie selon que le total est envisagé par format, auteur ou jour de vente.
Voir notre blog(Le lien s’ouvre dans une nouvelle fenêtre) pour plus d’informations sur les types de calculs.
Niveau de détail des tables
Étant donné que chaque table de la source de données Tableau peut avoir son propre niveau de détail, la table à laquelle un calcul est associé a un impact important. Par exemple, historiquement dans Tableau (avant la version 2020.2, avant les relations), il était possible de totaliser le nombre d’enregistrements dans la source de données en créant un calcul avec la valeur constante 1
et en faisant la somme. 1
était attribué à chaque ligne de la source de données, de sorte que la somme était égale au nombre de lignes.
Ce calcul aurait désormais une valeur de 1
. Il n’y a pas de niveau de détail global pour l’ensemble de la source de données, et un calcul constant reste dans la zone non affectée au bas du volet Données. Il a son propre niveau de détail. La somme de 1
est tout simplement 1
.
Comme mentionné précédemment, les calculs qui ont le même niveau de détail qu’une table, généralement parce qu’ils contiennent un champ issu de la table, appartiennent à cette table dans le volet Données. Par exemple, la concaténation du prénom et du nom de famille pour obtenir le nom complet de chaque auteur (à savoir [First Name] + " " + [Last Name]
) est placée dans la table Author.
Toutefois, si nous utilisions des champs issus de plusieurs tables dans un seul calcul, le calcul irait dans la zone non affectée au bas du volet Données. C’est ce qu’on appelle un calcul de niveau de ligne inter-tables. Il nécessite une jointure au niveau des lignes des tables concernées, ce qui peut avoir un impact sur les performances. (Assurez-vous que la cardinalité correcte est définie dans les options de performance de la relation).
Attribution du niveau de détail
Étant donné que le niveau de détail d’une table contrôle ce que représentent les résultats d’un calcul, il est important d’avoir des calculs dans les tables appropriées. Une expression de niveau de détail FIXED peut être utilisée pour extraire un calcul dans une table spécifique. Le champ sur lequel l’expression est fixée (la déclaration de dimension(Le lien s’ouvre dans une nouvelle fenêtre)) détermine le niveau de détail des résultats.
Exemple : Tournée de promotion d’auteurs
Q : À combien d’événements de tournée de promotion chaque auteur participe-t-il ?
R : Ce nombre doit « appartenir » à chaque auteur, il est donc inclus dans la table Auteur.
- Événements de tournée de promotion d’auteurs =
{FIXED [Author Name] : SUM([Book Tour Events])}
- (En langage clair : « pour chaque auteur, total du nombre d’événements de tournée de promotion qui leur sont associés »)
Q : Combien d’auteurs ne font pas de tournées de promotion ?
R : Il est tentant d’essayer un calcul du type suivant
COUNTD(IF ISNULL([Book Tour Events]) THEN ([Author Name]) END)
.- (En langage clair : « si la valeur Book Tour Events est null, retourner le nom de l’auteur. Totaliser chaque nom d’auteur unique »)
Toutefois, il s’agit d’un calcul de niveau de ligne inter-tables car Book Tour Events provient de la table Series, et Author Name de la table Author. Et les calculs inter-tables de ce type utilisent des jointures internes, ce qui signifie que, lorsqu’il n’y a pas de valeur correspondante dans les deux tables, la ligne est supprimée des résultats de jointure. Cela veut donc dire que l’on demande à Tableau de totaliser quelque chose qui n’existe pas. Notez que, si les deux champs étaient dans la même table, la méthode serait satisfaisante. Le calcul en lui-même ne pose aucun problème, hormis le fait qu’il ne fonctionne pas bien avec la structure de la source de données.
Au lieu de cela, nous devons indiquer la présence ou l’absence d’événements de tournée pour chaque auteur et conserver ces résultats dans la table Author. Une fois que chaque auteur est signalé comme « participant à une tournée de promotion » ou non, nous pouvons totaliser le nombre d’auteurs qui ne font pas de tournées de promotion.
- Participant à une tournée de promotion ? =
IF {FIXED [Author Name]: COUNT([Book Tour Events])} = 0 THEN "No" ELSE "Yes" END
- (En langage clair : « Pour chaque auteur, totaliser le nombre d’événements de tournée de promotion. Si ce nombre est égal à zéro, ajoutez l’étiquette « No » à l’auteur, sinon ajoutez-lui l’étiquette « Yes ». En nommant le champ « Book tour participant? » (Participant à une tournée de promotion ?), les Non et les Oui s’aligneront.)
Maintenant, nous pouvons totaliser le nombre de Non et répondre à la question d’origine.
Si notre calcul est Auteurs sans tournées de promotion = IF [Book tour participant?]= "No" THEN ([Author Name]) END
, nous obtenons la liste des auteurs qui ne font pas des tournées de promotion. (En langage clair : « Pour chaque auteur où Book Tour Participant? est No, référencer le nom de l’auteur. »)
Si notre calcul est COUNTD(IF [Book tour participant?]= "No" THEN ([Author Name]) END)
, nous obtenons une réponse numérique qui s’affichera dans la zone non affectée au bas du volet Données. Pourquoi ? Parce que ce calcul est agrégé.
Question bonus :
Il est également possible d’utiliser la structure du calcul « Book tour participant? » directement pour renvoyer la liste des noms d’auteur. IF {FIXED [Author Name]: COUNT([Book Tour Events])} = 0 THEN ([Author Name]) END
. Où irait ce calcul dans le volet Données ? Pourquoi ? Essayez-le dans votre propre copie de Tableau Desktop, ou téléchargez ce classeur pour voir. (Requiert Tableau Desktop 2020.2 ou ultérieur. Une fois dans les classeurs, faites un clic droit sur le calcul dans le volet Données et sélectionnez Modifier pour ouvrir l’éditeur de calcul et voir une explication dans les commentaires du calcul.)
Ressources associées
Vous vous sentez un peu dépassé et vous voulez revenir en arrière ? Essayez Maîtriser les relations.
Prêt à vous lancer dans des analyses complexes avec des relations ? Consultez Maîtriser les relations en profondeur.
Pour plus d’informations sur les fondements techniques des relations expliqués par l’équipe de gestion des produits, consultez la série consacrée aux relations sur le blog Tableau.
- Relations, 1ère partie : Présentation des nouvelles fonctionnalités de modélisation des données dans Tableau(Le lien s’ouvre dans une nouvelle fenêtre)
- Relations, 2ème partie : Conseils et astuces(Le lien s’ouvre dans une nouvelle fenêtre)
- Relations, 3ème partie : Poser des questions sur plusieurs tables reliées(Le lien s’ouvre dans une nouvelle fenêtre)
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é des 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.