Support formation Rapports Power BI

Relations

En bref

  • Objectifs : expliquer comment une relation propage les filtres ; choisir la cardinalité et la direction du filtre ; créer, modifier et supprimer une relation ; diagnostiquer une relation manquante ou erronée.
  • Prérequis : page Schéma en étoile.
  • Niveau : découverte.

Pourquoi ?

Une relation de modèle propage les filtres appliqués sur la colonne d'une table vers une autre table. C'est grâce à elle qu'un segment sur la catégorie de produit filtre les ventes. Sans relation, ou avec une relation mal paramétrée, les visuels affichent des chiffres faux sans aucun message d'erreur.

Notions clés

Ce que fait une relation

  • Elle propage les filtres d'une table vers une autre, et la propagation se poursuit tant qu'il existe un chemin de relations à suivre, éventuellement sur plusieurs tables.
  • Les chemins sont déterministes : les filtres se propagent toujours de la même façon.
  • Lorsque plusieurs filtres s'appliquent à une table, ils se combinent par un ET : toutes les conditions doivent être remplies.
  • Une relation peut être désactivée, ou son effet modifié, dans une mesure grâce à des fonctions DAX (USERELATIONSHIP, CROSSFILTER), présentées dans la sous-partie Calculer avec DAX.

Une table déconnectée n'a volontairement aucune relation. Ses valeurs servent uniquement dans des calculs DAX, comme la table créée par un paramètre numérique (voir Groupes, hiérarchies et paramètres).

Lire une relation dans la vue Modèle

image.png
  1. Une relation est matérialisée par un trait entre deux tables.
  2. Les champs OrderID servent à la relation : survolez le trait sans cliquer pour voir les colonnes concernées.
  3. Ces deux tables n'ont aucune relation, même cachée.
  4. Le côté « 1 » indique que la colonne (ici ProductID) est sans doublon.
  5. Le côté « plusieurs » (*) indique que la colonne peut contenir des doublons ; ses valeurs doivent correspondre à celles du côté « 1 ».

Cardinalités

CardinalitéQuand l'utiliserRecommandation
Un-à-plusieurs (1:) ou plusieurs-à-un (:1)Relation entre une dimension et une table de faitsLe cas normal d'un schéma en étoile : la grande majorité de vos relations
Un-à-un (1:1)Deux tables qui ont la même clé unique (par exemple Produit et Produit complément)À éviter le plus souvent : fusionnez plutôt les deux tables dans Power Query
Plusieurs-à-plusieurs (:)Faits de granularité plus élevée (objectifs par catégorie), modèles compositesRéservée à des cas précis, en filtrage unidirectionnel, voir Plusieurs tables de faits

En résumé : privilégiez toujours le un-à-plusieurs. Les relations un-à-un et plusieurs-à-plusieurs ne sont pas des erreurs, mais elles doivent répondre à un besoin identifié. Pour relier deux dimensions en plusieurs-à-plusieurs (commerciaux et régions), Microsoft recommande une table pont avec deux relations un-à-plusieurs plutôt qu'une relation *:* directe.

image.png

Direction du filtrage croisé

Par défaut, le filtre va du côté « 1 » vers le côté « plusieurs » : de la dimension vers les faits.

CardinalitéDirections possibles
Un-à-plusieurs (ou plusieurs-à-un)Unique ou Les deux
Un-à-unLes deux
Plusieurs-à-plusieursUnique (Table1 vers Table2), Unique (Table2 vers Table1) ou Les deux

Le filtrage bidirectionnel (Les deux) dégrade les performances et peut rendre le modèle ambigu. Utilisez-le seulement en cas de nécessité, par exemple pour une table pont, et préférez la fonction CROSSFILTER dans la mesure concernée.

Relations actives et inactives

Un seul chemin de propagation peut être actif entre deux tables. Les autres relations sont inactives (trait pointillé) et peuvent être activées dans une mesure avec USERELATIONSHIP.

image.png

Supposer l'intégrité référentielle

Pour une relation entre deux tables en mode DirectQuery de la même source, l'option Supposer l'intégrité référentielle permet à Power BI d'envoyer des jointures internes, plus rapides, à la source. Ne la cochez que si chaque valeur du côté « plusieurs » existe bien du côté « 1 », sinon des lignes disparaissent des résultats.

Pas à pas

Créer une relation

1. Dans la vue Modèle, faites glisser une colonne d'une table sur la colonne correspondante d'une autre table. Les deux colonnes peuvent porter des noms différents, mais doivent avoir le même type (numérique, date ou texte).

2. Vous pouvez aussi passer par Accueil > Gérer les relations > Nouvelle relation, puis choisir les deux tables et leurs colonnes.

Au moins une des deux colonnes doit contenir des valeurs uniques ; sinon, Power BI affiche le message « Une des colonnes doit avoir des valeurs uniques ».

Détection automatique

Power BI crée automatiquement des relations au premier chargement des tables, quand il les identifie avec certitude. Pour relancer la détection : Accueil > Gérer les relations > Détection automatique.

Pour désactiver ce comportement : Fichier > Options et paramètres > Options > Fichier actif > Chargement des données, puis décochez Détecter automatiquement les nouvelles relations une fois les données chargées. Vérifiez toujours les relations détectées.

Modifier une relation

Double-cliquez sur le trait de la relation pour ouvrir l'éditeur de relation. Vous pouvez aussi sélectionner le trait et modifier la relation dans le volet Propriétés.

image.png

Modifiez une relation lorsqu'elle a été créée avec les mauvaises colonnes. Par exemple, une relation entre OrderID de la table Orders et ProductID de la table Order_Details :

image.png

Ces colonnes n'ayant aucune valeur commune, le visuel n'affiche aucune valeur pour CustomerID :

image.png

Supprimer une relation

Sélectionnez le trait de la relation, puis appuyez sur Suppr. Le tableau ci-dessous affiche CustomerID (table Orders) et Quantity (table Order_Details) avec la relation :

image.png

Après suppression de la relation, chaque ligne affiche la même valeur, égale au total :

image.png

Retenez ce symptôme : une valeur identique sur toutes les lignes, égale au total, signale une relation manquante entre la table de l'axe et celle de la mesure.

Exemple

La direction du filtre en pratique

Dans le modèle Northwind, on crée deux mesures :

Qte order details = SUM ( Order_Details[Quantity] )
Nb orders = COUNTROWS ( Orders )

Par CustomerID, le résultat est correct : la colonne CustomerID de la table Orders filtre Order_Details.

image.png

Par ProductName (table Products), la mesure Nb orders affiche la même valeur sur chaque ligne :

image.png

Les filtres vont de Products vers Order_Details et de Orders vers Order_Details, mais jamais de Order_Details vers Orders :

image.png

En passant la relation Orders / Order_Details en Les deux (Direction du filtrage croisé dans l'éditeur de relation), le filtre « remonte » et les chiffres deviennent justes :

image.png
image.png

Cette démonstration montre le mécanisme. En production, préférez une mesure qui utilise CROSSFILTER, plutôt qu'une relation bidirectionnelle permanente.

Afficher les éléments sans données

Un secteur existe dans la dimension, mais aucune vente ne le référence : il n'apparaît pas dans le visuel. Pour l'afficher quand même, dans le volet Visualisations, faites un clic droit sur le champ, puis Afficher les éléments sans données.

Pour afficher 0 au lieu d'une cellule vide, modifiez la mesure :

Montant = COALESCE ( SUM ( Ventes[Montant] ), 0 )

Utilisez cette technique avec modération : afficher 0 pour toutes les combinaisons peut multiplier les lignes d'un tableau.

Pièges et bonnes pratiques

  • Vérifiez les relations créées par la détection automatique, surtout sur des colonnes au nom générique (ID, Code).
  • Évitez les relations bidirectionnelles par défaut : elles créent des chemins ambigus et ralentissent le modèle.
  • Masquez la colonne clé côté « plusieurs » : les utilisateurs doivent filtrer par la dimension.
  • Une relation plusieurs-à-plusieurs ou entre deux sources différentes devient une relation limitée : les lignes sans correspondance ne sont pas regroupées dans une ligne vide, ce qui peut surprendre dans les totaux.

À retenir

  • Une relation propage les filtres du côté « 1 » vers le côté « plusieurs ».
  • Le un-à-plusieurs à sens unique est la norme ; le un-à-un et le plusieurs-à-plusieurs répondent à des cas précis.
  • Une seule relation active entre deux tables ; les autres s'activent en DAX.
  • Une même valeur sur toutes les lignes, égale au total, révèle une relation manquante.

Pour aller plus loin

  • Relations de modèle dans Power BI Desktop. Source (Microsoft Learn)
  • Créer et gérer des relations dans Power BI Desktop. Source (Microsoft Learn)
  • Conseils sur le filtrage bidirectionnel. Source (Microsoft Learn)
  • Conseils sur les relations plusieurs-à-plusieurs. Source (Microsoft Learn)
  • Conseils sur les relations actives et inactives. Source (Microsoft Learn)