Partager via


Relations (SSAS Tabulaire)

Dans les modèles tabulaires, une relation est une connexion entre deux tables de données. La relation établit la façon dont les données des deux tables doivent être corrélées. Par exemple, une table Customers et une table Orders peuvent être associées pour afficher le nom du client associé à chaque commande.

Lorsque vous utilisez l’Assistant Importation de table pour importer depuis la même source de données, les relations qui existent déjà dans les tables (à la source de données) que vous choisissez d’importer seront recréées dans le modèle. Vous pouvez afficher les relations détectées et recréées automatiquement à l’aide du concepteur de modèles en mode Diagramme ou à l’aide de la boîte de dialogue Gérer les relations. Vous pouvez également créer des relations entre des tables manuellement à l’aide du concepteur de modèles en mode Diagramme ou à l’aide de la boîte de dialogue Créer une relation ou gérer des relations.

Une fois les relations entre les tables définies, automatiquement pendant l’importation ou créée manuellement, vous pourrez filtrer les données à l’aide de colonnes associées et rechercher des valeurs dans les tables associées.

Conseil / Astuce

Si votre modèle contient de nombreuses relations, la vue diagramme peut mieux vous aider à mieux visualiser et créer de nouvelles relations entre les tables.

Sections de cette rubrique :

Avantages

Une relation est une connexion entre deux tables de données, basées sur une ou plusieurs colonnes de chaque table. Pour voir pourquoi les relations sont utiles, imaginez que vous suivez les données des commandes client dans votre entreprise. Vous pouvez suivre toutes les données d’une table unique qui a une structure comme suit :

CustomerID Nom Messagerie électronique Taux de Réduction Identifiant de commande Date de commande Produit Quantité
1 Ashton chris.ashton@contoso.com .05 256 2010-01-07 Compact numérique 11
1 Ashton chris.ashton@contoso.com ,05 255 2010-01-03 Appareil photo reflex mono-objectif 15
2 Jaworski michal.jaworski@contoso.com .10 254 2010-01-03 Budget Movie-Maker 27

Cette approche peut fonctionner, mais elle implique le stockage de nombreuses données redondantes, telles que l’adresse e-mail du client pour chaque commande. Le stockage est bon marché, mais vous devez vous assurer que vous mettez à jour chaque ligne pour ce client si l’adresse de messagerie change. Une solution à ce problème consiste à fractionner les données en plusieurs tables et à définir des relations entre ces tables. Il s’agit de l’approche utilisée dans les bases de données relationnelles comme SQL Server. Par exemple, une base de données que vous importez dans un modèle peut représenter des données de commande à l’aide de trois tables associées :

Clientèle

[CustomerID] Nom Messagerie électronique
1 Ashton chris.ashton@contoso.com
2 Jaworski michal.jaworski@contoso.com

RéductionsClient

[CustomerID] Taux de Remise
1 ,05
2 .10

Ordres

[CustomerID] Identifiant de commande Date de commande Produit Quantité
1 256 2010-01-07 Appareil numérique compact 11
1 255 2010-01-03 Appareil photo reflex 15
2 254 2010-01-03 Budget Movie-Maker 27

Si vous importez ces tables à partir de la même base de données, l’Assistant Importation de table peut détecter les relations entre les tables basées sur les colonnes qui se trouvent entre [crochets], et peut reproduire ces relations dans le concepteur de modèles. Pour plus d’informations, consultez Détection automatique et inférence des relations dans cette rubrique. Si vous importez des tables à partir de plusieurs sources, vous pouvez créer manuellement des relations comme décrit dans Créer une relation entre deux tables (SSAS Tabulaire) .

Colonnes et clés

Les relations sont basées sur des colonnes de chaque table qui contiennent les mêmes données. Par exemple, les tables Customers et Orders peuvent être liées les unes aux autres, car elles contiennent toutes deux une colonne qui stocke un ID client. Dans l’exemple, les noms de colonnes sont identiques, mais ce n’est pas une exigence. Il peut s’agir de CustomerID et d’un autre CustomerNumber, tant que toutes les lignes de la table Orders contiennent un ID qui est également stocké dans la table Customers.

Dans une base de données relationnelle, il existe plusieurs types de clés, qui sont généralement simplement des colonnes avec des propriétés spéciales. Les quatre types de clés suivants peuvent être utilisés dans les bases de données relationnelles :

  • Clé primaire : identifie de manière unique une ligne dans une table, telle que CustomerID dans la table Customers.

  • Clé alternative (ou clé candidate) : colonne autre que la clé primaire unique. Par exemple, une table Employees peut stocker un ID d’employé et un numéro de sécurité sociale, qui sont tous deux uniques.

  • Clé étrangère : colonne qui fait référence à une colonne unique dans une autre table, telle que CustomerID dans la table Orders, qui fait référence à CustomerID dans la table Customers.

  • Clé composite : clé composée de plusieurs colonnes. Les clés composites ne sont pas prises en charge dans les modèles tabulaires. Pour plus d’informations, consultez « Clés composites et colonnes de recherche » dans cette rubrique.

Dans les modèles tabulaires, la clé primaire ou la clé alternative est appelée colonne de recherche associée, ou simplement colonne de recherche. Si une table possède à la fois une clé primaire et une autre clé, vous pouvez utiliser l’une ou l’autre comme colonne de recherche. La clé étrangère est appelée colonne source ou simplement colonne. Dans notre exemple, une relation serait définie entre CustomerID dans la table Commandes (colonne) et CustomerID (colonne de recherche) dans la table Customers. Si vous importez des données à partir d’une base de données relationnelle, par défaut, le concepteur de modèles choisit la clé étrangère d’une table et la clé primaire correspondante de l’autre table. Toutefois, vous pouvez utiliser n’importe quelle colonne qui a des valeurs uniques pour la colonne de recherche.

Types de relations

La relation entre clients et commandes est une relation un-à-plusieurs. Chaque client peut avoir plusieurs commandes, mais une commande ne peut pas avoir plusieurs clients. Les autres types de relations sont un-à-un et plusieurs-à-plusieurs. La table CustomerDiscounts, qui définit un taux d’escompte unique pour chaque client, est dans une relation un-à-un avec la table Customers. Un exemple de relation plusieurs-à-plusieurs est une relation directe entre produits et clients, dans laquelle un client peut acheter de nombreux produits et le même produit peut être acheté par de nombreux clients. Le concepteur de modèles ne prend pas en charge les relations plusieurs-à-plusieurs dans l’interface utilisateur. Pour plus d’informations, consultez « Relations à plusieurs-à-plusieurs » dans cette rubrique.

Le tableau suivant présente les relations entre les trois tables :

Relation Catégorie colonne de recherche Colonne
Customers-CustomerDiscounts un-à-un Customers.CustomerID CustomerDiscounts.CustomerID
Customers-Orders un-à-plusieurs Customers.CustomerID Orders.CustomerID

Relations et performances

Une fois qu’une relation a été créée, le concepteur de modèles doit généralement recalculer toutes les formules qui utilisent des colonnes à partir de tables dans la relation nouvellement créée. Le traitement peut prendre un certain temps en fonction de la quantité de données et de la complexité des relations.

Conditions requises pour les relations

Le concepteur de modèles a plusieurs exigences qui doivent être suivies lors de la création de relations :

Relation active unique entre les tables

Plusieurs relations peuvent entraîner des dépendances ambiguës entre les tables. Pour créer des calculs précis, vous avez besoin d’un chemin unique d’une table à l’autre. Par conséquent, il ne peut y avoir qu’une seule relation active entre chaque paire de tables. Par exemple, dans AdventureWorks DW 2012, la table, DimDate, contient une colonne, DateKey, qui est liée à trois colonnes différentes dans la table, FactInternetSales : OrderDate, DueDate et ShipDate. Si vous tentez d’importer ces tables, la première relation est créée avec succès, mais vous recevrez l’erreur suivante sur les relations successives qui impliquent la même colonne :

* Relation : table[colonne 1]-> table[colonne 2] - État : erreur - Raison : une relation ne peut pas être créée entre la <table 1> et <la table 2>. Une seule relation directe ou indirecte peut exister entre deux tables.

Si vous avez deux tables et plusieurs relations entre elles, vous devez importer plusieurs copies de la table qui contient la colonne de recherche et créer une relation entre chaque paire de tables.

Il peut y avoir de nombreuses relations inactives entre les tables. Le chemin d’accès à utiliser entre les tables est spécifié par le client de création de rapports au moment de la requête.

Une relation pour chaque colonne source

Une colonne source ne peut pas participer à plusieurs relations. Si vous avez déjà utilisé une colonne comme colonne source dans une relation, mais que vous souhaitez utiliser cette colonne pour vous connecter à une autre colonne de recherche associée dans une autre table, vous pouvez créer une copie de la colonne et utiliser cette colonne pour la nouvelle relation.

Il est facile de créer une copie d’une colonne qui a exactement les mêmes valeurs, à l’aide d’une formule DAX dans une colonne calculée. Pour plus d’informations, consultez Créer une colonne calculée (SSAS Tabulaire).

Identificateur unique pour chaque table

Chaque table doit avoir une seule colonne qui identifie de façon unique chaque ligne de cette table. Cette colonne est souvent appelée clé primaire.

Colonnes de recherche uniques

Les valeurs de données dans la colonne de recherche doivent être uniques. En d’autres termes, la colonne ne peut pas contenir de doublons. Dans les modèles tabulaires, les valeurs Null et les chaînes vides sont équivalentes à un vide, qui est une valeur de données distincte. Cela signifie que vous ne pouvez pas avoir plusieurs valeurs Null dans la colonne de recherche.

Types de données compatibles

Les types de données dans la colonne source et la colonne de recherche doivent être compatibles. Pour plus d’informations sur les types de données, consultez Types de données pris en charge (SSAS Tabulaire)

Clés composites et colonnes de recherche

Vous ne pouvez pas utiliser de clés composites dans un modèle tabulaire ; vous devez toujours avoir une colonne qui identifie de manière unique chaque ligne de la table. Si vous essayez d’importer des tables qui ont une relation existante basée sur une clé composite, l’Assistant Importation de table ignore cette relation, car elle ne peut pas être créée dans le modèle tabulaire.

Si vous souhaitez créer une relation entre deux tables dans le concepteur de modèles et qu’il existe plusieurs colonnes définissant les clés primaires et étrangères, vous devez combiner les valeurs pour créer une colonne clé unique avant de créer la relation. Vous pouvez le faire avant d’importer les données, ou vous pouvez le faire dans le concepteur de modèles en créant une colonne calculée.

Relations plusieurs-à-plusieurs

Les modèles tabulaires ne prennent pas en charge les relations plusieurs-à-plusieurs et vous ne pouvez pas ajouter de tables de jonction dans le concepteur de modèles. Toutefois, vous pouvez utiliser des fonctions DAX pour modéliser des relations plusieurs-à-plusieurs.

Self-Joins et boucles

Les jointures autonomes ne sont pas autorisées dans les tables de modèles tabulaires. Une jointure automatique est une relation récursive entre une table et elle-même. Les jointures autonomes sont souvent utilisées pour définir des hiérarchies parent-enfant. Par exemple, vous pouvez joindre une table Employees à elle-même pour produire une hiérarchie qui montre la chaîne de gestion d’une entreprise.

Le concepteur de modèles n’autorise pas la création de boucles entre les relations d’un modèle. En d’autres termes, l’ensemble de relations suivant est interdit.

Tableau 1, colonne a à tableau 2, colonne f

Tableau 2, colonne f au tableau 3, colonne n

Tableau 3, colonne n à tableau 1, colonne a

Si vous essayez de créer une relation qui entraînerait la création d’une boucle, une erreur est générée.

Déduction des relations

Dans certains cas, les relations entre les tables sont automatiquement chaînées. Par exemple, si vous créez une relation entre les deux premiers ensembles de tables ci-dessous, une relation est déduite d’exister entre les deux autres tables et une relation est automatiquement établie.

Produits et catégorie - créés manuellement

Catégorie et Sous-catégorie -- créés manuellement

Produits et Sous-catégorie -- la relation est déduite

Pour que les relations soient automatiquement chaînées, les relations doivent aller dans une direction, comme indiqué ci-dessus. Si les relations initiales étaient entre, par exemple, Sales and Products et Sales and Customers, une relation n’est pas déduite. Cela est dû au fait que la relation entre produits et clients est une relation plusieurs-à-plusieurs.

Détection des relations lors de l’importation de données

Lorsque vous importez à partir d’une table de source de données relationnelle, l’Assistant Importation de table détecte les relations existantes dans ces tables sources en fonction des données de schéma source. Si des tables associées sont importées, ces relations sont dupliquées dans le modèle.

Créer manuellement des relations

Bien que la plupart des relations entre les tables d’une source de données relationnelle unique soient détectées automatiquement et créées dans le modèle tabulaire, il existe également de nombreuses instances où vous devez créer manuellement des relations entre des tables de modèle.

Si votre modèle contient des données provenant de plusieurs sources, vous devrez probablement créer manuellement des relations. Par exemple, vous pouvez importer des tables Customers, CustomerDiscounts et Orders à partir d’une source de données relationnelle. Les relations existantes entre ces tables à la source sont automatiquement créées dans le modèle. Vous pouvez ensuite ajouter une autre table à partir d’une autre source, par exemple, importer des données de région à partir d’une table Geography dans un classeur Microsoft Excel. Vous pouvez ensuite créer manuellement une relation entre une colonne dans la table Customers et une colonne dans la table Geography.

Pour créer manuellement des relations dans un modèle tabulaire, vous pouvez utiliser le concepteur de modèles en mode Diagramme ou à l’aide de la boîte de dialogue Gérer les relations. La vue diagramme affiche les tableaux, avec des relations entre eux, dans un format graphique. Vous pouvez cliquer sur une colonne dans une table et faire glisser le curseur vers une autre table pour créer facilement une relation, dans l’ordre correct, entre les tables. La boîte de dialogue Gérer les relations affiche les relations entre les tables dans un format de tableau simple. Pour savoir comment créer manuellement des relations, consultez Créer une relation entre deux tables (SSAS Tabulaire).

Valeurs dupliquées et autres erreurs

Si vous choisissez une colonne qui ne peut pas être utilisée dans la relation, un X rouge apparaît en regard de la colonne. Vous pouvez suspendre le curseur sur l’icône d’erreur pour afficher un message qui fournit plus d’informations sur le problème. Les problèmes qui peuvent rendre impossible la création d’une relation entre les colonnes sélectionnées sont les suivants :

Problème ou message Résolution
Impossible de créer la relation, car les deux colonnes sélectionnées contiennent des valeurs en double. Pour créer une relation valide, au moins une colonne de la paire que vous sélectionnez doit contenir uniquement des valeurs uniques.

Vous pouvez modifier les colonnes pour supprimer des doublons, ou inverser l’ordre des colonnes afin que la colonne qui contient les valeurs uniques soit utilisée comme colonne de recherche associée.
La colonne contient une valeur null ou vide. Les colonnes de données ne peuvent pas être jointes les unes aux autres sur une valeur Null. Pour chaque ligne, il doit y avoir une valeur dans les deux colonnes utilisées dans une relation.
Sujet Descriptif
Créer une relation entre deux tables (SSAS Tabulaire) Décrit comment créer manuellement une relation entre deux tables.
Supprimer des relations (SSAS Tabulaire) Décrit comment supprimer une relation et les ramifications de la suppression de relations.

Voir aussi

Tables et colonnes (SSAS Tabulaire)
Importer des données (SSAS Tabulaire)