Relations et modélisation des données Power BI
Objectif pédagogique : Maîtriser la structuration des données et les relations entre tables pour des analyses fiables dans Power BI.
À la fin de ce chapitre, tu seras capable de…
- Identifier les clés primaires et étrangères dans un modèle de données
- Configurer les relations entre tables selon leur cardinalité
- Utiliser Power Query pour analyser la distribution des colonnes
- Optimiser la structure des données pour les visualisations
- Implémenter la logique métier via des relations cohérentes
💡 Prérequis : Maîtrise de l’importation de données et de l’interface Power BI Desktop
Mise en contexte
Vous avez importé vos données dans Power BI, mais sans relations correctes entre vos tables Client et Commandes, vos analyses risquent d’être faussées. Tu vas apprendre à identifier les clés primaires comme l’ID_Client, à configurer des relations un-à-plusieurs fiables, et à utiliser les outils de profilage Power Query pour garantir l’intégrité de ton modèle de données.
INTRODUCTION
En pratique, cela implique :
- Configurer et optimiser les relations entre les tables afin que les filtres et agrégations fonctionnent correctement à travers les visuels.
- Créer des calculs analytiques via le langage DAX (Data Analysis Expressions), que ce soit sous forme de mesures, colonnes calculées ou tables calculées, pour traduire la logique métier.
- Organiser les tables selon des schémas de modélisation efficaces (par exemple en étoile), afin de garantir performance, cohérence et évolutivité des rapports.
1. Relations dans la modélisation des données
Dans un modèle de données Power BI, les relations entre tables sont essentielles pour garantir que les calculs et les visualisations reflètent fidèlement les résultats métier. Une relation crée un lien logique entre des colonnes de deux tables afin que Power BI sache comment lier et filtrer les données lors de l’analyse ou de la création de rapports.
1.1 Types de relations
Quand on relie deux tables, la cardinalité de la relation dépend de la manière dont les enregistrements correspondent :
- Un-à-un (1:1) : chaque ligne de la Table X correspond à une seule ligne de la Table Y, et vice-versa. Ce type de relation est rare mais utile lorsque les entités sont fortement couplées.
- Un-à-plusieurs (1:*) : une ligne de la Table X peut correspondre à plusieurs lignes de la Table Y. C’est le type de relation le plus fréquent, par exemple lorsqu’un client possède plusieurs commandes.
- Plusieurs-à-plusieurs (:) : les lignes de chaque table peuvent se relier à plusieurs lignes de l’autre table. Power BI prend en charge ce type de relation pour des scénarios avancés à l’aide de tables de pont ou de cardinalité spéciale.
1.2 Identifier les colonnes clés pour les relations
Avant de créer une relation, il faut identifier les colonnes clés dans chaque table :
1.2.1 Clé primaire (Primary Key)
1.2.2 Procédure pour repérer une clé primaire candidate avec Power Query
|
1
|
Si l’Éditeur Power Query est fermé, dans Power BI Desktop, allez dans Accueil > Transformer les données pour l’ouvrir. |
|
2
|
Ouvrez l’onglet Affichage et activez Distribution des colonnes (outils de profilage). Un encart apparaît au-dessus de chaque colonne. |
|
3
|
Survolez les encarts de distribution pour consulter les % de valeurs distinctes et % de valeurs uniques ; ciblez la colonne avec le plus haut taux d’unicité comme candidate à la clé primaire (ex. id_client pour DimClient). |
La figure ci-dessous montre comment identifier une clé primaire candidate dans Power Query à l’aide de la fonctionnalité Distribution des colonnes (profilage des données).

Figure 1: Identification d’une clé primaire à l’aide de la fonctionnalité Distribution des colonnes dans Power Query
1.2.3 Notes importantes
- Une table n’est pas obligée d’avoir une clé primaire formelle, mais pour des relations fiables et des agrégations correctes, il est fortement recommandé de disposer d’une colonne unique identifiée comme telle.
- Les relations permettent à Power BI de propager des filtres d’une table à l’autre, ce qui est crucial pour des calculs analytiques précis dans vos visuels.
- En l’absence de clé unique valide, Power BI peut créer une relation avec une cardinalité inattendue, ou vous demander d’ajuster vos données avant de la définir.
- Pour rendre les informations de Distribution des colonnes plus précises, il faut modifier le profilage des colonnes pour qu’il soit calculé sur l’ensemble du jeu de données, comme illustré à la figure 2. Sélectionnez cette option en cliquant sur le pied de page (barre d’état).

Figure 2: Profilage de colonne sur l’ensemble du jeu de données (via le pied de page)
1.2.4 Clé étrangère (Foreign Key)

Figure 3: Vue du modèle pour créer les relations
2. Les relations dans Power BI

Figure 4: Relation un-plusieurs (1:*) entre la table clients et la table factures
À partir de nos tables, nous pouvons créer d’autres relations :
- DimClients (clé : id_client) → factures (FK : id_client) (1:*)
- DimClients → reservations (FK : id_client) (1:*)
- agences (clé : id_agence) → vehicules (FK : id_agence_proprietaire) (1:*)
- comptes (clé : id_compte) → ecriture_comptables (FK : id_compte) (1:*)
- Etc…
Configurez les relations dans Modélisation > Gérer les relations et vérifiez la cardinalité et la direction (sens unique vs sens double). La figure ci-dessous illustre la création de relations entre les différentes tables.

Figure 5: Création de relations entre les tables
3. DAX pour analyses
3.1 Tables calculées
Dans certains cas, vous devez ajouter de nouvelles tables basées sur des données déjà chargées dans le modèle. Ces tables peuvent être créées à l’aide de DAX.
Vous pouvez également utiliser un constructeur de table en DAX pour créer une table calculée. Le constructeur de table n’est pas une fonction ; il s’agit d’un ensemble de caractères permettant de créer une table en DAX. Par exemple, l’expression DAX suivante crée une table avec une seule colonne comme le montre la Figure 6 ci-dessous.
Calculated Table 1 = {"A", "B", "C"}
Figure 6: Création d’une table calculée à une seule colonne à partir du constructeur de table
Vous pouvez utiliser des accolades {} pour construire une table. Il s’agit d’une forme simple d’utilisation du constructeur de table en DAX. Voici comment cela fonctionne :
- Début du constructeur de table : ouvrez une accolade {
- « A », « B » et « C » sont les valeurs d’une seule colonne
- Fin du constructeur de table : fermez l’accolade } »
En DAX, cette syntaxe génère une table calculée contenant une colonne unique appelée Valeur (Value) si une seule expression est indiquée.
Vous pouvez utiliser n’importe quelle expression DAX scalaire comme valeur. L’exemple ci-dessous crée une autre table calculée en utilisant le constructeur de table ainsi que la fonction DATE().
Une expression scalaire en DAX correspond à une expression qui retourne une valeur unique (texte, nombre, date, booléen, etc.), ce qui est requis pour alimenter les valeurs d’un constructeur de table.
Calculated Table 2 =
{DATE(2020, 7, 22), DATE(2020, 7, 23), DATE(2020, 8, 2)}
La figure 7 montre les résultats de l’exécution de l’expression DAX ci-dessus :

Figure 7: Création d’une table calculée à l’aide du constructeur de table DAX en utilisant la fonction DATE()
L’expression DAX suivante constitue une autre forme du constructeur de table : lorsque vous définissez des lignes d’enregistrements à l’aide de parenthèses (), les valeurs étant séparées par des virgules. Comme illustré dans la figure 8, vous pouvez utiliser des valeurs constantes ou des expressions scalaires pour définir les lignes.
CalculatedTable3 =
{
( « A », 1.5, DATE(2017, 1, 1), CURRENCY(199.99) ),
( « B », 2.5, DATE(2017, 1, 2), CURRENCY(249.99) ),
( « C », 3.5, DATE(2017, 1, 3), CURRENCY(299.99) )
}

Figure 8: Création d’une table calculée via les constructeurs DAX utilisant des valeurs constantes ou des expressions scalaires.
Comme indiqué précédemment, lors de la définition des lignes au sein du constructeur de table, les noms de colonnes par défaut sont attribués sous la forme Value1, Value2, Value3, etc… Nous avons également précisé qu’il est possible d’utiliser toute fonction DAX retournant une table comme les fonctions itératives. Les cas d’usage sont nombreux. Par exemple, si vous souhaitez créer une table calculée affichant :
- Le nom complet des clients, obtenu par la concaténation de leur prénom et de leur nom.
- Leur montant total de ventes.
- Le tout, filtré sur la région Australie.
Australian Customers Sales =
SUMMARIZECOLUMNS (
DimCustomer[CustomerKey]
, FILTER(
VALUES(DimGeography[EnglishCountryRegionName])
, DimGeography[EnglishCountryRegionName] = « Australia »)
, « Customer Full Name », CONCATENATEX(DimCustomer, DimCustomer[FirstName] & » » & DimCustomer[LastName])
, « Sales Amount », SUM(FactInternetSales[SalesAmount])
)

Figure 9: Création d’une table calculée DAX via l’onglet modélisation.
3.2 Colonnes calculées (Calculated Columns)
3.2.1 Caractéristiques principales
- Les colonnes calculées étendent une table existante en ajoutant des valeurs dérivées de données existantes.
- Elles sont statiques à l’exécution: leurs valeurs ne changent pas en fonction des interactions de l’utilisateur dans le rapport.
- Elles sont calculées à l’actualisation des données et stockées dans le modèle, ce qui peut augmenter la taille du modèle et impacter les performances si elles sont utilisées sans nécessité.
- Elles peuvent être utilisées dans des segments, des filtres, des lignes ou des colonnes d’un visuel, car elles produisent un champ réel du modèle à chaque ligne.
3.2.2 Quand créer une colonne calculée ?
- Vous avez besoin d’une colonne dérivée qui doit être présente au niveau des lignes, par exemple pour segmentation, tri ou regroupement dans un visuel.
- Vous souhaitez exploiter les relations du modèle pour obtenir des valeurs qui ne sont pas disponibles directement dans la source.
3.2.3 Créer une colonne calculée dans Power BI Desktop
|
1
|
Cliquez avec le bouton droit (clic droit) sur une table dans le volet Champs, puis sélectionnez Nouvelle colonne. |
|
2
|
Sélectionnez une table, puis cliquez sur Nouvelle colonne dans l’onglet Outils de table, cliquez sur Nouvelle colonne. |
|
3
|
Sélectionnez une table dans le volet Champs, puis, dans l’onglet Modélisation, cliquez sur Nouvelle colonne. |

Figure 10: Création de colonnes calculées
Exercice : Ajout d’une colonne calculée année-mois
AnneeMois = FORMAT ( factures[DateFacture], "YYYY-MM" )3.3 Mesures
Les mesures sont généralement des calculs analytiques : sommes, moyennes, minima, maxima, décomptes, etc. Vous pouvez utiliser ces mesures au sein des visuels Power BI. Le résultat d’une mesure est dynamique : il varie selon les interactions et le contexte de chaque visuel. Tout comme pour les colonnes calculées, vous disposez de plusieurs méthodes pour créer une mesure, que ce soit depuis l’affichage du rapport ou l’affichage table(la vue Données). Voici la procédure pour créer une mesure.
|
A
|
Faites un clic droit sur une table dans le volet Données et sélectionnez Nouvelle mesure. |
|
B
|
Sélectionnez une table dans le volet Données et choisissez « Nouvelle mesure » sous l’onglet Outils de table. |
|
C
|
Sélectionnez une table dans le volet Données et choisissez Nouvelle mesure sous l’onglet Modélisation. |

Figure 11: Création de mesures dans Power BI
Dans certains cas, la création de calculs analytiques ne se limite pas à une simple somme. Il est souvent nécessaire de définir d’autres mesures pour répondre aux exigences métier, certaines pouvant être plus complexes. Power BI facilite grandement la mise en œuvre de ces calculs grâce aux Mesures rapides (Quick Measures), que vous découvrirez plus en détail dans la partie suivante :
3.4 Mesures rapides
La procédure est la même que celle de calcul de mesure :
|
A
|
Faites un clic droit sur une table dans le volet Données et sélectionnez Nouvelle mesure rapide. |
|
B
|
Sélectionnez une table dans le volet Données et choisissez Nouvelle mesure rapide sous l’onglet Outils de table. |
|
C
|
Sélectionnez une table dans le volet Données et choisissez Nouvelle mesure rapide sous l’onglet Modélisation. |
3.5 Time Intelligence dans Power BI
Pourquoi l’intelligence temporelle est-elle indispensable ?
Imaginez la situation suivante :
Votre tableau de bord affiche un chiffre d’affaires de 50 000 € ce mois-ci.
Est-ce une bonne performance ?
Impossible à dire sans contexte temporel :
- Par rapport au mois précédent ?
- Par rapport à la même période l’an dernier ?
- Par rapport à un objectif ou à une tendance ?
Un chiffre seul n’a pas de sens métier sans le facteur temps.
3.5.1 Définition
La Time Intelligence (intelligence temporelle) désigne un ensemble de fonctions DAX permettant d’analyser les données dans le temps, notamment pour :
- des calculs de cumul (Month-To-Date, Year-To-Date),
- des comparaisons temporelles (même période l’année précédente),
- des analyses d’évolution (mois sur mois, année sur année).
3.5.2 Objectif métier
La Time Intelligence permet de répondre à des questions essentielles pour le pilotage :
- Sommes-nous en croissance ?
- Quelle est la tendance globale de notre activité ?
- La performance s’améliore-t-elle ou se dégrade-t-elle ?
- Avons-nous atteint nos objectifs dans le temps ?
Les fonctions de Time Intelligence ne fonctionnent correctement que si une table de dates valide est utilisée dans le modèle.
Sans table de dates conforme :
- les résultats peuvent être incorrects,
- les comparaisons temporelles deviennent peu fiables,
- certaines fonctions DAX peuvent mal se comporter sans erreur visible.
3.6 La Table de Dates
Une table de dates est une table de dimension qui contient :
- une ligne par jour, sans interruption,
- des attributs calendaires tels que :
- Année
- Trimestre
- Mois
- Jour
- Numéro de semaine
Elle constitue la référence temporelle centrale du modèle Power BI.
Pourquoi est-elle indispensable ?
Les fonctions de Time Intelligence nécessitent une table de dates valide pour fonctionner correctement.
Rôle de la table de dates dans le modèle
La table de dates permet :
- d’assurer une continuité temporelle parfaite (aucun jour manquant),
- de partager une chronologie unique entre plusieurs tables de faits,
- d’activer correctement et de fiabiliser les calculs DAX temporels.
Utilisation directe de colonnes de dates présentes dans les tables de faits n’est pas recommandée comme bonne pratique car:
Ces colonnes :
- contiennent souvent des dates manquantes,
- ne couvrent pas toutes les périodes,
- ne sont pas adaptées aux fonctions de Time Intelligence.
Bonne pratique recommandée
👉
Créer et utiliser une table de dates dédiée, unique, continue et reliée au modèle.
💡 À retenir :
La table de dates est le socle de toute analyse temporelle fiable dans Power BI.
3.7 La fonctionnalité Auto Date/Time dans Power BI
La fonctionnalité Date/heure automatique (Auto Date/Time) est activée par défaut dans Power BI Desktop.
Lorsqu’elle est active, Power BI :
- crée automatiquement une table de dates cachée pour chaque colonne de type Date,
- génère une hiérarchie temporelle : Année → Trimestre → Mois → Jour.
Avantages
- Très simple à utiliser
- Aucune configuration nécessaire
- Idéal pour découvrir Power BI ou faire des analyses rapides
Limites (point très important)
- Une table cachée par colonne de date impacte négativement le modèle: modèle plus lourd
- Peu ou pas de personnalisation possible :
- calendrier fiscal
- jours fériés
- règles métier spécifiques
- Non adapté aux modèles professionnels ou industriels
💡 À retenir :
Auto Date/Time est pratique pour apprendre, mais insuffisant pour piloter un business.
Procédure : Activer / Désactiver Auto Date/Time
|
1
|
Fichier → Options et paramètres → Options |
|
2
|
Section Chargement des données |
|
3
|
Activer ou désactiver Date/heure automatique |
3.8 Générer une table de dates dans Power BI Desktop
Microsoft recommande explicitement de créer une table de dates dédiée.
Deux méthodes principales sont recommandées :
3.8.1 Créer une table de dates avec Power Query (langage M)
Pourquoi utiliser Power Query ?
- Transformation en amont du modèle
- Excellentes performances
- Table réutilisable et standardisable
Procédure simplifiée
|
1
|
Accueil → Transformer les données |
|
2
|
Accueil → Nouvelle source → Requête vide |
|
3
|
Ouvrir l’Éditeur avancé |
|
4
|
Générer une liste de dates avec List.Dates |
|
5
|
Convertir la liste en table |
|
6
|
Ajouter les colonnes calendaires (Année, Mois, Trimestre…) |
|
7
|
Fermer et appliquer |
💡 Exercice :
L’objectif de cet exercice est de comprendre la logique de construction d’une table de dates, étape par étape, à partir d’un script existant. Vous disposez d’un script Power Query (langage M) complet, prêt pour une exploitation métier. En analysant le code, identifiez clairement :
- la définition du périmètre temporel,
- la génération de la liste de dates,
- la transformation de la liste en table,
- l’application du type de données approprié,
- l’ajout des principales colonnes calendaires.
Pour chaque bloc, expliquez ce qu’il fait et pourquoi il est nécessaire dans un modèle Power BI professionnel.
Voici le script M :
let DateDebut = #date(2020, 1, 1), DateFin = #date(2025, 12, 31), ListeDates = List.Dates( DateDebut, Duration.Days(DateFin - DateDebut) + 1, #duration(1, 0, 0, 0) ), TableDates = Table.FromList( ListeDates, Splitter.SplitByNothing