Relations et cardinalité
Contrairement à d’autres systèmes de gestion de base de données, Power BI manie le concept de directionnalité dans une relation. Cette directionnalité joue un rôle majeur dans le filtrage des données entre plusieurs tables. Lorsque vous chargez des données, Power BI recherche automatiquement les relations qui existent dans les données en faisant correspondre les noms de colonnes. Vous pouvez également utiliser Gérer les relations pour modifier ces options manuellement.
Par exemple, vous avez récupéré de nombreuses tables de la base de données Sales, et l’image suivante est un exemple de votre modèle sémantique. Power BI a détecté automatiquement plusieurs relations, mais vous ne parvenez pas à comprendre ce qu’elles signifient. Vous souhaitez vérifier que les relations reflètent fidèlement celles qui existent dans vos données.
Relations
Voici les différents types de relations que vous trouverez au sein de Power BI.
Une relation plusieurs-à-une (*:1)
ou une-à-plusieurs(1: *)
Décrit une relation dans laquelle de nombreuses instances d’une valeur dans une colonne sont liées à une seule instance correspondante dans une autre colonne.
Décrit la direction entre les tables de faits et de dimension.
Il s’agit du type de directionnalité le plus courant et constitue la valeur par défaut dans Power BI lorsque vous créez automatiquement des relations.
Il existe par exemple une relation un-à-plusieurs entre les tables CountryName et Territory, où plusieurs territoires peuvent être associés à un seul pays.
Relation un-à-un :
Décrit une relation dans laquelle une seule instance d’une valeur est commune à deux tables.
Nécessite des valeurs uniques dans les deux tables.
Cette relation n’est pas recommandée, car elle stocke des informations redondantes et suggère que le modèle n’est pas correctement conçu. Il est préférable de combiner les tables.
Par exemple, si vous avez des produits et des ID produit dans deux tables différentes, vous avez affaire à une relation un-à-un. La création d’une relation un-à-un est redondante et ces deux tables doivent être combinées.
Relation plusieurs-à-plusieurs (.) :
Décrit une relation dans laquelle de nombreuses valeurs sont communes à deux tables.
Elle ne nécessite pas de valeurs uniques dans l’une ou l’autre table de la relation.
Elle n’est pas recommandée, car le manque de valeurs uniques introduit une certaine ambiguïté. De plus, vos utilisateurs peuvent ne pas savoir à quoi font référence les colonnes de valeurs.
Par exemple, la figure suivante montre une relation plusieurs-à-plusieurs entre les tables Sales et Order de la colonne OrderDate (plusieurs ventes pouvant être associées à plusieurs commandes). Il y a ambiguïté car les deux tables peuvent avoir la même date de commande.
Direction du filtre croisé
Les données peuvent être filtrées d’un côté d’une relation ou des deux côtés.
Avec une direction de filtre croisé unique :
Une seule table dans une relation peut être utilisée pour filtrer les données. Par exemple, la Table 1 peut être filtrée par la Table 2, mais la Table 2 ne peut pas être filtrée par la Table 1.
Conseil
Suivez le sens de la flèche sur la relation entre vos tables pour connaître la direction du filtre. En général, ces flèches doivent pointer vers votre table de faits.
Pour une relation un-à-plusieurs ou plusieurs-à-un, la direction du filtre croisé sera du côté « un », ce qui signifie que le filtrage se fera dans la table qui contient de nombreuses valeurs.
Avec les deux directions du filtre croisé ou le filtrage croisé bidirectionnel :
Une table dans une relation peut être utilisée pour filtrer l’autre. Par exemple, une table de dimension peut être filtrée à l’aide de la table de faits et les tables de faits peuvent être filtrées à l’aide de la table de dimension.
Vous pouvez obtenir des performances inférieures si vous utilisez le filtrage croisé bidirectionnel avec des relations plusieurs-à-plusieurs.
Un mot d’avertissement concernant le filtrage croisé bidirectionnel : vous ne devez pas activer les relations de filtrage croisé bidirectionnel à moins d’en comprendre pleinement les ramifications. L’activation de cette option peut entraîner des ambiguïtés, un suréchantillonnage, des résultats inattendus et une détérioration potentielle des performances.
Cardinalité et direction du filtre croisé
Pour les relations un-à-un, la seule option disponible est le filtrage croisé bidirectionnel. Les données peuvent être filtrées de chaque côté de cette relation et aboutir à une valeur distincte non ambiguë. Par exemple, vous pouvez filtrer sur un ID produit et obtenir un produit unique, et vous pouvez filtrer sur un produit et obtenir un ID produit unique.
Pour les relations plusieurs-à-plusieurs, vous pouvez choisir de filtrer dans une seule direction ou dans les deux à l’aide d’un filtrage croisé bidirectionnel. L’ambiguïté associée au filtrage croisé bidirectionnel est amplifiée dans une relation plusieurs-à-plusieurs en raison de la multitude de chemins entre les différentes tables. Si vous créez une mesure, un calcul ou un filtre, des conséquences inattendues peuvent se produire lorsque vos données sont filtrées et, selon la relation que le moteur de Power BI choisit lors de l’application du filtre, le résultat final peut être différent. Il en va de même pour les relations bidirectionnelles, et c’est donc pourquoi vous devez faire preuve de prudence quand vous les utilisez.
Comme vous pouvez le constater, les relations plusieurs-à-plusieurs et/ou les relations bidirectionnelles sont complexes. Sauf si vous savez précisément à quoi ressemblent vos données quand elles sont agrégées, ces types de relations ouvertes avec plusieurs directions de filtrage peuvent introduire plusieurs chemins dans les données.
Créer des relations plusieurs à plusieurs
Considérez un scénario dans lequel vous êtes chargé de créer un visuel qui examine les budgets des clients et les comptes. Comme vous pouvez avoir plusieurs clients dans le même compte et plusieurs comptes avec le même client, vous savez que vous devez créer une relation plusieurs-à-plusieurs.
Pour créer cette relation, accédez à Gérer les relations>Nouveau. Dans la fenêtre qui apparaît, créez une relation entre la colonne Customer ID dans CustomerTable et AccountTable. La relation est définie sur plusieurs-à-plusieurs et le type de filtre est dans les deux sens. Vous êtes immédiatement averti que vous ne devez utiliser ce type de relation que s’il est prévu qu’aucune des colonnes n’aura de valeurs uniques car vous pourriez obtenir des valeurs inattendues. Étant donné que vous souhaitez filtrer dans les deux directions, choisissez le filtrage croisé bidirectionnel.
Cliquez sur OK. Vous venez de créer une relation plusieurs-à-plusieurs.
Pour en savoir plus, consultez Les relations plusieurs-à-plusieurs dans Power BI.