Finalité des relations
Une relation de modèle propage les filtres appliqués sur la colonne d’une table de modèle à une autre table de modèle.
Cardinalités
Un-à-plusieurs (1:*) ou Plusieurs à un (*:1) Plusieurs à plusieurs (*:*) Privilégier la première.
Une relation est matérialisée par un trait entre 2 tables. Les champs OrderID sont utilisés pour créer la relation (placer sa souris sur le trait sans cliquer pour voir les champs impliqués dans la relation). Il n’y a pas de relation (même cachée) entre ces 2 tables Le côté “1” de la relation indique (suppose) que le champ (ici ProductID) est sans doublons Le côté “plusieurs” indique qu’il peut y avoir des doublons dans le champ (ici ProductID). Les valeurs de ce champ doivent correspondre avec celles du côté “1” de la relation.
Les relations sont créées automatiquement lors du premier chargement de chaque table. Pour forcer la détection automatique : Accueil > Gérer les relations > Détection automatique
Pour que Power BI ne détecte pas la relation : Fichier > Options et paramètres > Options > Fichier actif > Chargement des données > Décocher Détecter automatiquement les nouvelles relations une fois les données chargées.
Supprimer une relation
Sélectionner une relation puis touche SUPPR.
On passe alors de :
(Champ CustomerID de la table Order et Quantity de la table Order_details)
à :
Quand les valeurs d’un champ est identique et égal au total, c’est qu’il manque une relation entre les 2 tables.
Créer une relation
Faite glisser un champ d’une table sur le champ d’une autre table.
Les champs peuvent ne pas avoir le même nom mais avoir le même type : numérique, date ou texte.
Modifier une relation
Double-clic sur une relation, ce qui affiche.
On doit modifier une relation quand on a créé une relation avec les mauvais champs. Par exemple, on crée une relation entre le champ OrderID de la table Orders et le champ ProductID de la table Order_Details :
Ces champs n’ayant aucune valeur commune, on obtient :
Le champ CustomerID de la table Orders ne peut afficher aucune valeur car les champs OrderID et ProductID n’ont pas de valeur commune.
Direction du filtre
On crée 2 mesures :
Qte order details = SUM(Order_Details[Quantity])
Nb orders = COUNTROWS(Orders)
Quand on affiche la mesure par CustomerID, on obtient le résultat souhaité :
Le champs CustomerID de la table Orders filtre Quantity de la table Order_details utilisé dans la mesure.
Quand on affiche la mesure par ProductName de la table Product et la mesure Nb orders, on obtient :
Donc comme si il n’y avait pas de relation entre les tables. Ce qui est le cas en effet :
Le nombre de Orders ne peut pas être filtré par ProductName car il n’y a pas de relation directe entre les 2 tables. Pour contourner le problème, on aura recours aux filtres dans à double sens.
Pour chacune des relations entre les 3 tables : double-clic puis sélectionner A double sens dans Direction du filtre croisé.
On obtient alors les bons chiffres :
Car les filtres se propagent en “remontant” :
Afficher les éléments sans données
Un élément est présent dans une table de dimension (par exemple un secteur), mais aucune ligne de la table de fait ne référence cet élément (aucune vente sur ce secteur). On souhaite quand même afficher ce secteur dans un visuel.
Dans le volet Build, clic droit sur le champ > Afficher les éléments sans données.
Dans la mesure qui calcule la somme, modifier =SUM(Ventes[Montant]) en :
=IF(ISBLANK(SUM(Ventes[Montant])),0,SUM(Ventes[Montant]))