Découvrez le schéma en étoile et son importance pour Power BIUnderstand star schema and the importance for Power BI

Cet article s’adresse aux modélisateurs de données Power BI Desktop.This article targets Power BI Desktop data modelers. Il décrit la conception d’un schéma en étoile et sa pertinence pour le développement de modèles de données Power BI qui sont optimisés du point de vue des performances et de la convivialité.It describes star schema design and its relevance to developing Power BI data models optimized for performance and usability.

Cet article n’a pas pour but d’aborder par le menu la conception de schémas en étoile.This article isn't intended to provide a complete discussion on star schema design. Pour plus d’informations, reportez-vous directement à du contenu publié, tel que The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling (3e édition, 2013) de Ralph Kimball et al.For more details, refer directly to published content, like The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling (3rd edition, 2013) by Ralph Kimball et al.

Vue d’ensemble du schéma en étoileStar schema overview

Le schéma en étoile est une approche de modélisation mature largement adoptée par les entrepôts de données relationnels.Star schema is a mature modeling approach widely adopted by relational data warehouses. Les modélisateurs doivent classer leurs tables de modèle en tant que table de dimension ou table de faits.It requires modelers to classify their model tables as either dimension or fact.

Les tables de dimension décrivent les entités d’entreprise : les choses que vous modélisez.Dimension tables describe business entities—the things you model. Les entités peuvent inclure des produits, des personnes, des lieux et des concepts, y compris le temps lui-même.Entities can include products, people, places, and concepts including time itself. La table la plus cohérente que vous trouverez dans un schéma en étoile est une table de dimension de date.The most consistent table you'll find in a star schema is a date dimension table. Une table de dimension contient une ou plusieurs colonnes clés qui jouent le rôle d’identificateur unique et de colonnes descriptives.A dimension table contains a key column (or columns) that acts as a unique identifier, and descriptive columns.

Les tables de faits stockent des observations ou des événements et peuvent être des commandes client, des soldes de stock, des taux de change, des températures, etc. Une table de faits contient des colonnes clés de dimension qui se rapportent aux tables de dimension et des colonnes de mesures numériques.Fact tables store observations or events, and can be sales orders, stock balances, exchange rates, temperatures, etc. A fact table contains dimension key columns that relate to dimension tables, and numeric measure columns. Les colonnes clés de dimension déterminent la dimensionnalité d’une table de faits, tandis que les valeurs clés de dimension déterminent sa granularité.The dimension key columns determine the dimensionality of a fact table, while the dimension key values determine the granularity of a fact table. Par exemple, imaginez une table de faits conçue pour stocker des cibles de ventes qui a deux colonnes clés de dimension : Date et ProductKey.For example, consider a fact table designed to store sale targets that has two dimension key columns Date and ProductKey. Il est facile de comprendre que la table a deux dimensions.It's easy to understand that the table has two dimensions. Toutefois, vous ne pouvez pas déterminer la granularité sans tenir compte des valeurs clés de dimension.The granularity, however, can't be determined without considering the dimension key values. Dans cet exemple, supposez que les valeurs stockées dans la colonne Date sont le premier jour de chaque mois.In this example, consider that the values stored in the Date column are the first day of each month. Dans ce cas, la granularité se situe au niveau produit/mois.In this case, the granularity is at month-product level.

En règle générale, les tables de dimension contiennent un nombre relativement petit de lignes.Generally, dimension tables contain a relatively small number of rows. En revanche, les tables de faits peuvent contenir un très grand nombre de lignes et croître au fil du temps.Fact tables, on the other hand, can contain a very large number of rows and continue to grow over time.

Illustration d’un schéma en étoile

Pertinence du schéma en étoile pour les modèles Power BIStar schema relevance to Power BI models

La conception de schémas en étoile et de nombreux concepts associés présentés dans cet article sont très importants pour le développement de modèles Power BI qui sont optimisés du point de vue des performances et de la convivialité.Star schema design and many related concepts introduced in this article are highly relevant to developing Power BI models that are optimized for performance and usability.

Tenez compte du fait que chaque visuel de rapport Power BI génère une requête envoyée au modèle Power BI (que le service Power BI appelle jeu de données).Consider that each Power BI report visual generates a query that is sent to the Power BI model (which the Power BI service calls a dataset). Ces requêtes sont utilisées pour filtrer, regrouper et totaliser les données du modèle.These queries are used to filter, group, and summarize model data. Un modèle bien conçu fournit des tables pour le filtrage et le regroupement et des tables pour la totalisation.A well-designed model, then, is one that provides tables for filtering and grouping, and tables for summarizing. Cette conception répond bien aux principes des schémas en étoile :This design fits well with star schema principles:

  • Les tables de dimension prennent en charge le filtrage et le regroupement.Dimension tables support filtering and grouping
  • Les tables de faits prennent en charge la totalisation.Fact tables support summarization

Aucune propriété de table n’est définie par les modeleurs pour configurer le type de table en tant que dimension ou que fait.There's no table property that modelers set to configure the table type as dimension or fact. En fait, c’est déterminé par les relations de modèle.It's in fact determined by the model relationships. Une relation de modèle établit un chemin de propagation de filtre entre deux tables, et c’est la propriété de cardinalité de la relation qui détermine le type de table.A model relationship establishes a filter propagation path between two tables, and it's the Cardinality property of the relationship that determines the table type. Une cardinalité de relation courante est un-à-plusieurs ou son opposé, plusieurs-à-un.A common relationship cardinality is one-to-many or its inverse many-to-one. Le côté « un » est toujours une table de type dimension, tandis que le côté « plusieurs » est toujours une table de type fait.The "one" side is always a dimension-type table while the "many" side is always a fact-type table. Pour plus d’informations sur les relations, consultez Relations de modèle dans Power BI Desktop.For more information about relationships, see Model relationships in Power BI Desktop.

Schéma en étoile conceptuel

Une conception de modèle bien structurée doit inclure des tables de type dimension ou de type fait.A well-structured model design should include tables that are either dimension-type tables or fact-type tables. Évitez de combiner les deux types pour une même table.Avoid mixing the two types together for a single table. Nous vous recommandons également de faire votre possible pour fournir le bon nombre de tables avec les bonnes relations en place.We also recommend that you should strive to deliver the right number of tables with the right relationships in place. Il est également important que les tables de type fait chargent toujours les données avec une granularité cohérente.It's also important that fact-type tables always load data at a consistent grain.

Enfin, il est important de comprendre que la conception optimale du modèle relève pour partie de la science et pour partie de l’art.Lastly, it's important to understand that optimal model design is part science and part art. N’hésitez pas à vous écarter des recommandations habituelles si cela est judicieux.Sometimes you can break with good guidance when it makes sense to do so.

De nombreux concepts supplémentaires liés à la conception de schémas en étoile peuvent être appliqués à un modèle Power BI.There are many additional concepts related to star schema design that can be applied to a Power BI model. Ces concepts sont les suivants :These concepts include:

MesuresMeasures

Dans la conception d’un schéma en étoile, une mesure est une colonne de table de faits qui stocke les valeurs à totaliser.In star schema design, a measure is a fact table column that stores values to be summarized.

Dans un modèle Power BI, une mesure a une définition différente (mais similaire).In a Power BI model, a measure has a different—but similar—definition. Il s’agit d’une formule écrite en Dax (Data Analysis Expressions) qui réalise une totalisation.It's a formula written in Data Analysis Expressions (DAX) that achieves summarization. Les expressions de mesure exploitent souvent les fonctions d’agrégation DAX comme SUM, MIN, MAX ou AVERAGE pour produire un résultat de valeur scalaire au moment de la requête (les valeurs ne sont jamais stockées dans le modèle).Measure expressions often leverage DAX aggregation functions like SUM, MIN, MAX, AVERAGE, etc. to produce a scalar value result at query time (values are never stored in the model). Une expression de mesure peut aller de simples agrégations de colonnes à des formules plus sophistiquées qui remplacent la propagation de relation et/ou de contexte de filtre.Measure expression can range from simple column aggregations to more sophisticated formulas that override filter context and/or relationship propagation. Pour plus d’informations, consultez l’article Principes fondamentaux de DAX dans Power BI Desktop.For more information, read the DAX Basics in Power BI Desktop article.

Il est important de comprendre que les modèles Power BI prennent en charge une deuxième méthode pour effectuer une totalisation.It's important to understand that Power BI models support a second method for achieving summarization. Toute colonne (généralement les colonnes numériques) peut être totalisée par un visuel de rapport ou Questions et réponses.Any column—and typically numeric columns—can be summarized by a report visual or Q&A. Ces colonnes sont appelées mesures implicites.These columns are referred to as implicit measures. En tant que développeur de modèles, elles vous sont pratiques parce que, dans de nombreux cas, vous n’avez pas besoin de créer de mesures.They offer a convenience for you as a model developer, as in many instances you do not need to create measures. Par exemple, la colonne Sales Amount de la table Reseller Sales d’Adventure Works peut être totalisée de nombreuses façons (somme, nombre, moyenne, valeur médiane, valeur minimale, valeur maximale, etc.), sans qu’il soit nécessaire de créer une mesure pour chaque type d’agrégation possible.For example, the Adventure Works reseller sales Sales Amount column could be summarized in numerous ways (sum, count, average, median, min, max, etc.), without the need to create a measure for each possible aggregation type.

Exemple d’icône dans la liste de champs

Toutefois, il existe trois raisons impérieuses de créer des mesures, même pour des totalisations simples au niveau des colonnes :However, there are three compelling reasons for you to create measures, even for simple column-level summarizations:

  • Quand vous savez que vos auteurs de rapports sont susceptibles d’interroger le modèle en utilisant MDX (expressions multidimensionnelles), le modèle doit inclure des mesures explicites.When you know your report authors will query the model by using Multidimensional Expressions (MDX), the model must include explicit measures. Les mesures explicites sont définies en utilisant DAX.Explicit measures are defined by using DAX. Cette approche de conception est très appropriée quand un jeu de données Power BI est interrogé avec MDX, car MDX ne peut pas totaliser les valeurs de colonne.This design approach is highly relevant when a Power BI dataset is queried by using MDX, because MDX can't achieve summarization of column values. MDX est notamment utilisé avec Analyser dans Excel, car PivotTables émet des requêtes MDX.Notably, MDX will be used when performing Analyze in Excel, because PivotTables issue MDX queries.
  • Quand vous savez que vos auteurs de rapports sont susceptibles de créer des rapports paginés Power BI à l’aide du concepteur de requêtes MDX, le modèle doit inclure des mesures explicites.When you know your report authors will create Power BI paginated reports using the MDX query designer, the model must include explicit measures. Seul le concepteur de requêtes MDX prend en charge les agrégats de serveur.Only the MDX query designer supports server aggregates. Par conséquent, si les auteurs de rapports doivent faire évaluer les mesures par Power BI (et non par le moteur de rapport paginé), ils doivent utiliser le concepteur de requêtes MDX.So, if report authors need to have measures evaluated by Power BI (instead of by the paginated report engine), they must use the MDX query designer.
  • Si vous devez vous assurer que vos auteurs de rapports peuvent uniquement totaliser des colonnes de manière spécifique.When you need to ensure that your report authors can only summarize columns in specific ways. Par exemple, la colonne Unit Price de la table Reseller Sales (qui représente un tarif par unité) peut être totalisée, mais uniquement à l’aide de fonctions d’agrégation spécifiques.For example, the reseller sales Unit Price column (which represents a per unit rate) can be summarized, but only by using specific aggregation functions. Elle ne doit jamais être cumulée, mais il est approprié de la totaliser à l’aide d’autres fonctions d’agrégation (valeur minimale, valeur minimale, moyenne, etc.). Dans ce cas, le modélisateur peut masquer la colonne Unit Price et créer des mesures pour toutes les fonctions d’agrégation appropriées.It should never be summed, but it's appropriate to summarize by using other aggregation functions like min, max, average, etc. In this instance, the modeler can hide the Unit Price column, and create measures for all appropriate aggregation functions.

Cette approche de conception fonctionne bien pour les rapports créés dans le service Power BI et pour Questions et réponses.This design approach works well for reports authored in the Power BI service and for Q&A. Toutefois, les connexions actives Power BI Desktop permettent aux auteurs de rapports d’afficher les champs masqués dans le volet Champs, ce qui peut entraîner le contournement de cette approche de conception.However, Power BI Desktop live connections allow report authors to show hidden fields in the Fields pane, which can result in circumventing this design approach.

Clés de substitutionSurrogate keys

Une clé de substitution est un identificateur unique que vous ajoutez à une table pour prendre en charge la modélisation de schémas en étoile.A surrogate key is a unique identifier that you add to a table to support star schema modeling. Par définition, elle n’est ni définie ni stockée dans les données sources.By definition, it's not defined or stored in the source data. En règle générale, les clés de substitution sont ajoutées aux tables de dimension des entrepôts de données relationnels afin de fournir un identificateur unique pour chaque ligne de la table de dimension.Commonly, surrogate keys are added to relational data warehouse dimension tables to provide a unique identifier for each dimension table row.

Les relations des modèles Power BI sont basées sur une seule colonne unique dans une table, qui propage les filtres à une colonne unique dans une autre table.Power BI model relationships are based on a single unique column in one table, which propagates filters to a single column in a different table. Quand une table de type dimension dans votre modèle n’inclut pas de colonne unique, vous devez ajouter un identificateur unique en guise de côté « un » d’une relation.When a dimension-type table in your model doesn't include a single unique column, you must add a unique identifier to become the "one" side of a relationship. Dans Power BI Desktop, vous pouvez facilement remplir cette exigence en créant une colonne d’index Power Query.In Power BI Desktop, you can easily achieve this requirement by creating a Power Query index column.

Créer une colonne d’index dans la barre d’outils Power Query

Vous devez fusionner cette requête avec la requête côté « plusieurs » afin de pouvoir y ajouter également la colonne d’index.You must merge this query with the "many"-side query so that you can add the index column to it also. Quand vous chargez ces requêtes dans le modèle, vous pouvez créer une relation un-à-plusieurs entre les tables du modèle.When you load these queries to the model, you can then create a one-to-many relationship between the model tables.

Dimensions en floconSnowflake dimensions

Une dimension en flocon est un ensemble de tables normalisées pour une entité métier unique.A snowflake dimension is a set of normalized tables for a single business entity. Par exemple, Adventure Works classe les produits par catégorie et sous-catégorie.For example, Adventure Works classifies products by category and subcategory. Les catégories sont affectées à des sous-catégories, et les produits sont à leur tour affectés à des sous-catégories.Categories are assigned to subcategories, and products are in turn assigned to subcategories. Dans l’entrepôt de données relationnel Adventure Works, la dimension des produits est normalisée et stockée dans trois tables associées : DimProductCategory, DimProductSubcategory et DimProduct.In the Adventure Works relational data warehouse, the product dimension is normalized and stored in three related tables: DimProductCategory, DimProductSubcategory, and DimProduct.

En faisant appel à votre imagination, vous pouvez vous figurer les tables normalisées positionnées à l’extérieur de la table de faits, formant une conception en flocon.If you use your imagination, you can picture the normalized tables positioned outwards from the fact table, forming a snowflake design.

Exemple de diagramme en flocon

Dans Power BI Desktop, vous pouvez choisir de simuler une conception de dimension en flocon (peut-être parce que vos données sources le font) ou d’intégrer (dénormaliser) les tables sources en une table de modèle unique.In Power BI Desktop, you can choose to mimic a snowflake dimension design (perhaps because your source data does) or integrate (denormalize) the source tables into a single model table. En règle générale, une table de modèle unique présente plus d’avantages que plusieurs tables de modèle.Generally, the benefits of a single model table outweigh the benefits of multiple model tables. La décision la plus optimale peut dépendre des volumes de données et des exigences de facilité d’utilisation du modèle.The most optimal decision can depend on the volumes of data and the usability requirements for the model.

Quand vous choisissez de simuler une conception de dimension en flocon :When you choose to mimic a snowflake dimension design:

  • Power BI charge davantage de tables, ce qui est moins efficace du point de vue du stockage et des performances.Power BI loads more tables, which is less efficient from storage and performance perspectives. Ces tables doivent inclure des colonnes pour prendre en charge les relations du modèle, ce qui peut agrandir la taille de ce dernier.These tables must include columns to support model relationships, and it can result in a larger model size.
  • Des chaînes de propagation de filtres de relation plus longues doivent être parcourues, ce qui est probablement moins efficace que l’application de filtres à une table unique.Longer relationship filter propagation chains will need to be traversed, which will likely be less efficient than filters applied to a single table.
  • Le volet Champs présente davantage de tables de modèle aux auteurs de rapports, ce qui peut se traduire par une expérience moins intuitive, en particulier quand les tables de dimension en flocon contiennent seulement une ou deux colonnes.The Fields pane presents more model tables to report authors, which can result in a less intuitive experience, especially when snowflake dimension tables contain just one or two columns.
  • Il n’est pas possible de créer une hiérarchie qui englobe les tables.It's not possible to create a hierarchy that spans the tables.

Quand vous choisissez d’effectuer une intégration à une table de modèle unique, vous pouvez également définir une hiérarchie qui englobe les niveaux de granularité les plus bas et élevé de la dimension.When you choose to integrate into a single model table, you can also define a hierarchy that encompasses the highest and lowest grain of the dimension. Éventuellement, le stockage de données dénormalisées redondantes peut entraîner une augmentation de la taille de stockage du modèle, en particulier pour les tables de dimension très grandes.Possibly, the storage of redundant denormalized data can result in increased model storage size, particularly for very large dimension tables.

Hiérarchie dans la dimension

Dimension à variation lenteSlowly changing dimensions

Une dimension à variation lente (SCD) est une dimension qui gère correctement les modifications des membres de la dimension au fil du temps.A slowly changing dimension (SCD) is one that appropriately manages change of dimension members over time. Elle s’applique quand les valeurs des entités d’entreprise changent au fil du temps et de manière ad hoc.It applies when business entity values change over time, and in an ad hoc manner. Un bon exemple de dimension à variation lente est une dimension de clients, en particulier ses colonnes de détails de contact telles que l’adresse e-mail et le numéro de téléphone.A good example of a slowly changing dimension is a customer dimension, specifically its contact detail columns like email address and phone number. En revanche, certaines dimensions sont considérées comme évoluant rapidement quand un attribut de dimension change souvent, comme le prix du marché d’une action.In contrast, some dimensions are considered to be rapidly changing when a dimension attribute changes often, like a stock's market price. L’approche de conception courante dans ces cas consiste à stocker les valeurs d’attribut à variation rapide dans une mesure de table de faits.The common design approach in these instances is to store rapidly changing attribute values in a fact table measure.

La théorie de la conception de schémas en étoile fait référence à deux types de SCD courants : type 1 et type 2.Star schema design theory refers to two common SCD types: Type 1 and Type 2. Une table de type dimension peut être de type 1 ou 2, ou prendre en charge les deux types simultanément pour des colonnes différentes.A dimension-type table could be Type 1 or Type 2, or support both types simultaneously for different columns.

SCD de type 1Type 1 SCD

Une SCD de Type 1 reflète toujours les valeurs les plus récentes ; ainsi, quand des modifications sont détectées dans les données sources, les données de la table de dimension sont remplacées.A Type 1 SCD always reflects the latest values, and when changes in source data are detected, the dimension table data is overwritten. Cette approche de conception est courante pour les colonnes qui stockent des valeurs complémentaires, telles que l’adresse e-mail ou le numéro de téléphone d’un client.This design approach is common for columns that store supplementary values, like the email address or phone number of a customer. Quand l’adresse e-mail ou le numéro de téléphone d’un client change, la table de dimension met à jour la ligne du client avec les nouvelles valeurs.When a customer email address or phone number changes, the dimension table updates the customer row with the new values. C’est comme si le client avait toujours eu ces informations de contact.It's as if the customer always had this contact information.

Une actualisation non incrémentielle d’une table de type dimension du modèle Power BI atteint le résultat d’une SCD de type 1.A non-incremental refresh of a Power BI model dimension-type table achieves the result of a Type 1 SCD. Elle actualise les données de la table afin que les valeurs les plus récentes soient chargées.It refreshes the table data to ensure the latest values are loaded.

SCD de type 2Type 2 SCD

Une SCD de Type 2 prend en charge la gestion de version des membres de dimension.A Type 2 SCD supports versioning of dimension members. Si le système source ne stocke pas de versions, c’est généralement le processus de chargement de l’entrepôt de données qui détecte les modifications et gère de manière appropriée la modification dans une table de dimension.If the source system doesn't store versions, then it's usually the data warehouse load process that detects changes, and appropriately manages the change in a dimension table. Dans ce cas, la table de dimension doit utiliser une clé de substitution pour fournir une référence unique à une version du membre de dimension.In this case, the dimension table must use a surrogate key to provide a unique reference to a version of the dimension member. Elle comprend également des colonnes qui définissent la validité de la plage de dates de la version (par exemple, StartDate et EndDate) et éventuellement une colonne d’indicateur (par exemple, IsCurrent) pour filtrer facilement en fonction des membres de dimension actuels.It also includes columns that define the date range validity of the version (for example, StartDate and EndDate) and possibly a flag column (for example, IsCurrent) to easily filter by current dimension members.

Par exemple, Adventure Works affecte des vendeurs à une région de ventes.For example, Adventure Works assigns salespeople to a sales region. Quand un vendeur change de région, une version du vendeur doit être créée pour que les faits historiques restent associés à l’ancienne région.When a salesperson relocates region, a new version of the salesperson must be created to ensure that historical facts remain associated with the former region. Pour prendre en charge une analyse historique précise des ventes par vendeur, la table de dimension doit stocker les versions des vendeurs et leur(s) région(s) associée(s).To support accurate historic analysis of sales by salesperson, the dimension table must store versions of salespeople and their associated region(s). La table doit également inclure des valeurs de date de début et de fin pour définir la durée de validité.The table should also include start and end date values to define the time validity. Les versions actuelles peuvent définir une date de fin vide (ou 12/31/9999), qui indique que la version de la ligne est la version actuelle.Current versions may define an empty end date (or 12/31/9999), which indicates that the row is the current version. La table doit également définir une clé de substitution, car la clé d’entreprise (en l’occurrence, l’ID d’employé) n’est pas unique.The table must also define a surrogate key because the business key (in this instance, employee ID) won't be unique.

Il est important de comprendre que quand les données sources ne stockent pas de versions, vous devez utiliser un système intermédiaire (comme un entrepôt de données) pour détecter et stocker les modifications.It's important to understand that when the source data doesn't store versions, you must use an intermediate system (like a data warehouse) to detect and store changes. Le processus de chargement de table doit conserver les données existantes et détecter les modifications.The table load process must preserve existing data and detect changes. Quand une modification est détectée, le processus de chargement de table doit faire expirer la version actuelle.When a change is detected, the table load process must expire the current version. Il enregistre ces modifications en mettant à jour la valeur EndDate et insère une nouvelle version dont la valeur StartDate commence par la valeur EndDate précédente.It records these changes by updating the EndDate value and inserting a new version with the StartDate value commencing from the previous EndDate value. En outre, les faits connexes doivent utiliser une recherche basée sur le temps pour récupérer la valeur de clé de dimension correspondant à la date de fait.Also, related facts must use a time-based lookup to retrieve the dimension key value relevant to the fact date. Un modèle Power BI utilisant Power Query ne peut pas produire ce résultat.A Power BI model using Power Query can't produce this result. Toutefois, il peut charger des données à partir d’une table de dimension SCD de type 2 préchargée.It can, however, load data from a pre-loaded SCD Type 2 dimension table.

Le modèle Power BI doit prendre en charge l’interrogation des données d’historique pour un membre, quelle que soit la modification, et pour une version du membre, qui représente un état particulier du membre dans le temps.The Power BI model should support querying historical data for a member, regardless of change, and for a version of the member, which represents a particular state of the member in time. Dans le contexte d’Adventure Works, cette conception vous permet d’interroger les données du vendeur, quelle que soit la région de vente affectée, ou pour une version particulière du vendeur.In the context of Adventure Works, this design enables you to query the salesperson regardless of assigned sales region, or for a particular version of the salesperson.

Pour y parvenir, la table de type dimension du modèle Power BI doit inclure une colonne pour filtrer le vendeur et une autre colonne pour filtrer une version spécifique du vendeur.To achieve this requirement, the Power BI model dimension-type table must include a column for filtering the salesperson, and a different column for filtering a specific version of the salesperson. Il est important que la colonne de la version fournisse une description non ambiguë, telle que « Michael Blythe (12/15/2008-06/26/2019) » ou « Michael Blythe (Current) ».It's important that the version column provides a non-ambiguous description, like "Michael Blythe (12/15/2008-06/26/2019)" or "Michael Blythe (current)". Il est également important de former les consommateurs et les auteurs de rapports aux principes de base de la dimension SCD de type 2 et de leur montrer comment obtenir des conceptions de rapport appropriées en appliquant des filtres corrects.It's also important to educate report authors and consumers about the basics of SCD Type 2, and how to achieve appropriate report designs by applying correct filters.

Une bonne pratique de conception consiste également à inclure une hiérarchie qui permet aux visuels d’accéder au niveau de version.It's also a good design practice to include a hierarchy that allows visuals to drill down to the version level.

Exemple de hiérarchie dans la liste de champs

Résultat de l’exemple de hiérarchie

Dimensions de rôle actifRole-playing dimensions

Une dimension de rôle actif est une dimension qui peut filtrer des faits liés différemment.A role-playing dimension is a dimension that can filter related facts differently. Par exemple, dans Adventure Works, la table de dimension de date a trois relations avec les faits de ventes des revendeurs.For example, at Adventure Works, the date dimension table has three relationships to the reseller sales facts. La même table de dimension peut être utilisée pour filtrer les faits par date de commande, date d’expédition ou date de livraison.The same dimension table can be used to filter the facts by order date, ship date, or delivery date.

Dans un entrepôt de données, l’approche de conception acceptée consiste à définir une table de dimension de date unique.In a data warehouse, the accepted design approach is to define a single date dimension table. Au moment de la requête, le « rôle » de la dimension de date est établi par la colonne de faits que vous utilisez pour joindre les tables.At query time, the "role" of the date dimension is established by which fact column you use to join the tables. Par exemple, quand vous analysez les ventes par date de commande, la jointure de la table est associée à la colonne des dates de commandes client des revendeurs.For example, when you analyze sales by order date, the table join relates to the reseller sales order date column.

Dans un modèle Power BI, vous pouvez imiter cette conception en créant plusieurs relations entre deux tables.In a Power BI model, this design can be imitated by creating multiple relationships between two tables. Dans l’exemple Adventure Works, les tables Date et Reseller Sales auraient trois relations.In the Adventure Works example, the date and reseller sales tables would have three relationships. Même si cette conception est possible, il est important de comprendre qu’il ne peut y avoir qu’une seule relation active entre deux tables de modèle Power BI.While this design is possible, it's important to understand that there can only be one active relationship between two Power BI model tables. Toutes les autres relations doivent être définies comme étant inactives.All remaining relationships must be set to inactive. Le fait d’avoir une relation active unique signifie qu’il existe une propagation de filtre par défaut depuis les données de date vers les données des ventes des revendeurs.Having a single active relationship means there is a default filter propagation from date to reseller sales. Dans ce cas, la relation active est définie sur le filtre le plus courant utilisé par les rapports, ce qui, dans Adventure Works, correspond à la relation de la date de commande.In this instance, the active relationship is set to the most common filter that is used by reports, which at Adventure Works is the order date relationship.

Exemple de relations et d’une dimension de rôle actif unique

La seule façon d’utiliser une relation inactive consiste à définir une expression Dax qui utilise la fonction USERELATIONSHIP.The only way to use an inactive relationship is to define a DAX expression that uses the USERELATIONSHIP function. Dans notre exemple, le développeur de modèle doit créer des mesures pour permettre l’analyse des ventes des revendeurs par date d’expédition et date de livraison.In our example, the model developer must create measures to enable analysis of reseller sales by ship date and delivery date. Ce travail peut être fastidieux, en particulier quand la table des revendeurs définit de nombreuses mesures.This work can be tedious, especially when the reseller table defines many measures. En outre, elle encombre le volet Champs d’une surabondance de mesures.It also creates Fields pane clutter, with an overabundance of measures. Il existe également d’autres limitations :There are other limitations, too:

  • Quand les auteurs de rapports s’appuient sur des colonnes de totalisation, au lieu de définir des mesures, ils ne peuvent pas obtenir de totalisation pour les relations inactives sans écrire de mesure au niveau du rapport.When report authors rely on summarizing columns, rather than defining measures, they can't achieve summarization for the inactive relationships without writing a report-level measure. Les mesures au niveau du rapport peuvent être définies uniquement lors de la création de rapports dans Power BI Desktop.Report-level measures can only be defined when authoring reports in Power BI Desktop.
  • Avec un seul chemin de relation actif entre les données des ventes des revendeurs et les données des dates, il n’est pas possible de filtrer simultanément les ventes des revendeurs par différents types de dates.With only one active relationship path between date and reseller sales, it's not possible to simultaneously filter reseller sales by different types of dates. Par exemple, vous ne pouvez pas produire un visuel qui trace les ventes par date de commande par ventes livrées.For example, you can't produce a visual that plots order date sales by shipped sales.

Pour surmonter ces limitations, une technique de modélisation Power BI courante consiste à créer une table de type dimension pour chaque instance de rôle actif.To overcome these limitations, a common Power BI modeling technique is to create a dimension-type table for each role-playing instance. En général, vous créez les tables de dimension supplémentaires en tant que tables calculées, à l’aide de Dax.You typically create the additional dimension tables as calculated tables, using DAX. À l’aide de tables calculées, le modèle peut contenir une table Date, une table Ship Date et une table Delivery Date, chacune avec une relation unique et active avec les colonnes respectives de la table Reseller Sales.Using calculated tables, the model can contain a Date table, a Ship Date table and a Delivery Date table, each with a single and active relationship to their respective reseller sales table columns.

Exemple de relations et de dimensions de rôle actif

Cette approche de conception ne nécessite pas que vous définissiez plusieurs mesures pour différents rôles de date et autorise un filtrage simultané par différents rôles de date.This design approach doesn't require you to define multiple measures for different date roles, and it allows simultaneous filtering by different date roles. Toutefois, cette approche de conception présente un inconvénient mineur : la table de dimension de date subit une duplication, qui se traduit par une augmentation de la taille de stockage du modèle.A minor price to pay, however, with this design approach is that there will be duplication of the date dimension table resulting in an increased model storage size. Comme les tables de type dimension stockent généralement moins de lignes que les tables de type fait, c’est rarement un problème.As dimension-type tables typically store fewer rows relative to fact-type tables, it is rarely a concern.

Observez les bonnes pratiques de conception suivantes quand vous créez des tables de type dimension de modèle pour chaque rôle :Observe the following good design practices when you create model dimension-type tables for each role:

  • Assurez-vous que les noms de colonne sont explicites.Ensure that the column names are self-describing. Bien qu’il soit possible d’avoir une colonne Year dans toutes les tables de dates (les noms de colonnes sont uniques dans la table concernée), ce n’est pas explicite à l’échelle des titres de visuels par défaut.While it's possible to have a Year column in all date tables (column names are unique within their table), it's not self-describing by default visual titles. Envisagez de renommer les colonnes dans chaque table de rôle de dimension, afin que la table Ship Date ait une colonne d’années nommée Ship Year, et ainsi de suite.Consider renaming columns in each dimension role table, so that the Ship Date table has a year column named Ship Year, etc.
  • Le cas échéant, vérifiez que les descriptions de table fournissent des commentaires aux auteurs de rapports (par le biais des info-bulles du volet Champs) sur la façon dont la propagation de filtre est configurée.When relevant, ensure that table descriptions provide feedback to report authors (through Fields pane tooltips) about how filter propagation is configured. Cette clarté est importante quand le modèle contient une table nommée de façon générique, comme Date, qui est utilisée pour filtrer de nombreuses tables de type fait.This clarity is important when the model contains a generically named table, like Date, which is used to filter many fact-type tables. Dans le cas où cette table a, par exemple, une relation active avec la colonne des dates de commandes client des revendeurs, envisagez de fournir une description de table telle que « Filtre les ventes des revendeurs par date de commande ».In the case that this table has, for example, an active relationship to the reseller sales order date column, consider providing a table description like "Filters reseller sales by order date".

Pour plus d’informations, consultez Guide des relations actives et inactives.For more information, see Active vs inactive relationship guidance.

Dimensions fourre-toutJunk dimensions

Une dimension fourre-tout est utile quand il existe de nombreuses dimensions, en particulier composées de quelques attributs (peut-être un seul) ayant peu de valeurs.A junk dimension is useful when there are many dimensions, especially consisting of few attributes (perhaps one), and when these attributes have few values. Les colonnes d’état des commandes ou les colonnes de données démographiques sur les clients (sexe, tranche d’âge, etc.) sont de bons candidats.Good candidates include order status columns, or customer demographic columns (gender, age group, etc.).

L’objectif de conception d’une dimension fourre-tout consiste à consolider de nombreuses « petites » dimensions en une seule dimension afin de réduire la taille de stockage du modèle et l’encombrement du volet Champs en présentant moins de tables de modèle.The design objective of a junk dimension is to consolidate many "small" dimensions into a single dimension to both reduce the model storage size and also reduce Fields pane clutter by surfacing fewer model tables.

Une table de dimension fourre-tout est généralement le produit cartésien de tous les membres d’attribut de dimension, avec une colonne de clé de substitution.A junk dimension table is typically the Cartesian product of all dimension attribute members, with a surrogate key column. La clé de substitution fournit une référence unique à chaque ligne de la table.The surrogate key provides a unique reference to each row in the table. Vous pouvez générer la dimension dans un entrepôt de données, ou en utilisant Power Query pour créer une requête qui effectue des jointures de requêtes externes entières, puis ajoute une clé de substitution (colonne d’index).You can build the dimension in a data warehouse, or by using Power Query to create a query that performs full outer query joins, then adds a surrogate key (index column).

Exemple de dimension fourre-tout

Vous chargez cette requête dans le modèle en tant que table de type dimension.You load this query to the model as a dimension-type table. Vous devez également fusionner cette requête avec la requête de faits, afin que la colonne d’index soit chargée dans le modèle pour prendre en charge la création d’une relation de modèle « un-à-plusieurs ».You also need to merge this query with the fact query, so the index column is loaded to the model to support the creation of a "one-to-many" model relationship.

Dimensions de faitDegenerate dimensions

Une dimension de fait désigne un attribut de la table de faits requis pour le filtrage.A degenerate dimension refers to an attribute of the fact table that is required for filtering. Dans Adventure Works, le numéro de commande client des revendeurs est un bon exemple.At Adventure Works, the reseller sales order number is a good example. Dans ce cas, cela n’a pas de sens pour la conception du modèle de créer une table indépendante composée uniquement de cette colonne, car il en résulterait une augmentation de la taille de stockage du modèle et un encombrement du volet Champs.In this case, it doesn't make good model design sense to create an independent table consisting of just this one column, because it would increase the model storage size and result in Fields pane clutter.

Dans le modèle Power BI, il peut être approprié d’ajouter la colonne des numéros de commande client à la table de type fait pour autoriser le filtrage ou le regroupement par numéro de commande client.In the Power BI model, it can be appropriate to add the sales order number column to the fact-type table to allow filtering or grouping by sales order number. Il s’agit d’une exception à la règle introduite précédemment, selon laquelle vous ne devez pas combiner des types de tables (en général, les tables de modèle doivent être de type dimension ou fait).It is an exception to the formerly introduced rule that you should not mix table types (generally, model tables should be either dimension-type or fact-type).

Exemple de dimension de fait

Toutefois, si la table des ventes des revendeurs Adventure Works contient des colonnes de numéro de commande et de numéro de ligne de commande qui sont requises pour le filtrage, une table de dimension de fait constitue un bon choix.However, if the Adventure Works resellers sales table has order number and order line number columns, and they're required for filtering, a degenerate dimension table would be a good design. Pour plus d’informations, consultez l’Aide sur les relations un-à-un (dégénérer les dimensions).For more information, see One-to-one relationship guidance (Degenerate dimensions).

Tables de faits sans faitsFactless fact tables

Une table de faits sans faits n’inclut aucune colonne de mesure.A factless fact table doesn't include any measure columns. Elle contient uniquement des clés de dimension.It contains only dimension keys.

Une table de faits sans faits peut stocker les observations définies par les clés de dimension.A factless fact table could store observations defined by dimension keys. Par exemple, à une date et une heure particulières, un client particulier s’est connecté à votre site web.For example, at a particular date and time, a particular customer logged into your web site. Vous pouvez définir une mesure pour compter les lignes de la table de faits sans faits afin d’analyser à quel moment les clients se sont connectés et leur nombre.You could define a measure to count the rows of the factless fact table to perform analysis of when and how many customers have logged in.

Une utilisation plus attrayante d’une table de faits sans faits consiste à stocker les relations entre les dimensions, approche de conception de modèle Power BI que nous vous recommandons pour définir les relations plusieurs-à-plusieurs.A more compelling use of a factless fact table is to store relationships between dimensions, and it's the Power BI model design approach we recommend defining many-to-many dimension relationships. Dans une conception de relation de dimension plusieurs-à-plusieurs, la table de faits sans faits est appelée table de pontage.In a many-to-many dimension relationship design, the factless fact table is referred to as a bridging table.

Par exemple, considérez que les vendeurs peuvent être attribués à une ou plusieurs régions de vente.For example, consider that salespeople can be assigned to one or more sales regions. La table de pontage est conçue comme une table de faits sans faits composée de deux colonnes : clé de vendeur et clé de région.The bridging table would be designed as a factless fact table consisting of two columns: salesperson key and region key. Les valeurs dupliquées peuvent être stockées dans les deux colonnes.Duplicate values can be stored in both columns.

Exemple de table de faits sans faits

Cette approche de conception plusieurs-à-plusieurs est bien documentée et peut être obtenue sans table de pontage.This many-to-many design approach is well documented, and it can be achieved without a bridging table. Toutefois, l’approche de table de pontage est considérée comme la meilleure pratique lors de la liaison de deux dimensions.However, the bridging table approach is considered the best practice when relating two dimensions. Pour plus d’informations, consultez l’aide sur les relations plusieurs-à-plusieurs (associer deux tables de type dimension).For more information, see Many-to-many relationship guidance (Relate two dimension-type tables).

Étapes suivantesNext steps

Pour plus d’informations sur la conception du schéma en étoile ou sur la conception de modèles Power BI, consultez les articles suivants :For more information about star schema design or Power BI model design, see the following articles: