DAX, le langage des calculs
DAX (Data Analysis Expressions) est le langage de formules du modèle Power BI (et de Power Pivot dans Excel, et d’Analysis Services). Ses formules ressemblent à celles d’Excel, mais au lieu de travailler sur des cellules, elles travaillent sur des tables et des colonnes. On écrit du DAX à trois endroits : les mesures, les colonnes calculées et les tables calculées (comme la table de dates).
La colonne calculée
Une colonne calculée ajoute une colonne à une table. Sa formule est évaluée ligne par ligne (on parle de contexte de ligne), au moment de l’actualisation, et le résultat est stocké dans le modèle.
Dans la vue Tableau, sélectionnez DimProduit, puis Nouvelle colonne :
Libellé = DimProduit[Categorie] & " - " & DimProduit[Produit]
Chaque ligne reçoit sa valeur (« Boissons - Eau »). Une colonne calculée sert à filtrer, regrouper ou trier : on peut la mettre dans un segment ou un axe.
La mesure
Une mesure n’est pas stockée : elle est calculée à la demande, pour chaque cellule de visuel, selon les filtres actifs (le contexte de filtre). Sélectionnez la table de faits puis Nouvelle mesure :
Total ventes = SUM ( FaitVentes[Montant] )
Dans une carte sans filtre, elle vaut 415. Dans un histogramme par magasin, elle vaut 148 pour Lyon, 135 pour Lille, 132 pour Nantes : la même formule donne un résultat différent dans chaque cellule, car chaque cellule a son propre contexte de filtre.
Quand utiliser quoi ?
| Besoin | Choix |
|---|---|
| Un nombre agrégé qui doit réagir aux filtres (CA, marge, taux) | Mesure |
| Un attribut pour filtrer, regrouper, trier (tranche, libellé) | Colonne calculée (ou mieux, Power Query) |
| Un ratio (marge %, taux d’atteinte) | Toujours une mesure : un ratio ne s’additionne pas |
En cas de doute, choisissez la mesure : elle ne consomme pas de mémoire et reste juste à tous les niveaux d’agrégation. Et rappelez-vous que les colonnes de préparation se créent de préférence dans Power Query.
Conventions et bonnes pratiques
- Référencer une colonne avec sa table :
FaitVentes[Montant]. - Référencer une mesure sans table :
[Total ventes]. On voit ainsi d’un coup d’œil ce qui est une colonne et ce qui est une mesure. - Réutiliser les mesures :
Total ventes TTC = [Total ventes] * 1.2. - Mettre en forme : retours à la ligne (Maj+Entrée dans la barre de formule) et commentaires.
Total ventes TTC =
-- TVA à 20 % appliquée au chiffre d'affaires HT
[Total ventes] * 1.2
- Formater la mesure une seule fois (Outils de mesure : devise, pourcentage, décimales).
- Ranger les mesures dans une table de mesures ou des dossiers d’affichage.
- Dans les paramètres du modèle, l’option qui décourage les mesures implicites oblige les auteurs à utiliser vos mesures explicites.
Notez que DAX utilise le point comme séparateur décimal et la virgule pour séparer les arguments, quels que soient les paramètres régionaux (comportement par défaut de Power BI Desktop, modifiable dans les options).
Exercices
Les solutions et les tests restent sur le serveur. Dans l'espace étudiant, ton code est exécuté et corrigé, et le tuteur donne des indices avant la solution.
Créer ses premières mesures
Modèle de départ (celui du cours de modélisation) :
FaitVentes(12 lignes : NumVente, Date, DateLivraison, CodeMagasin, CodeProduit, Quantite, PrixUnitaire, Montant),DimMagasin(CodeMagasin, Magasin, Region),DimProduit(CodeProduit, Produit, Categorie) etDates(2026), reliées en étoile. Si vous ne l’avez pas, créezC:\Formation\ventes_plat.csvavec le contenu ci-dessous, puis construisez les trois tables par référence dans Power Query (Montant = Quantite × PrixUnitaire) et les relations plusieurs-à-un.NumVente,Date,DateLivraison,CodeMagasin,Magasin,Region,CodeProduit,Produit,Categorie,Quantite,PrixUnitaire V001,2026-01-03,2026-01-05,M1,Lyon,Auvergne-Rhône-Alpes,P01,Jus d'orange,Boissons,10,3 V002,2026-01-03,2026-01-06,M2,Lille,Hauts-de-France,P02,Pates,Epicerie,20,2 V003,2026-01-10,2026-01-12,M3,Nantes,Pays de la Loire,P03,Yaourt,Frais,30,1 V004,2026-01-17,2026-01-19,M1,Lyon,Auvergne-Rhône-Alpes,P04,Riz,Epicerie,15,2 V005,2026-01-24,2026-01-27,M2,Lille,Hauts-de-France,P05,Eau,Boissons,50,1 V006,2026-02-02,2026-02-04,M3,Nantes,Pays de la Loire,P01,Jus d'orange,Boissons,12,3 V007,2026-02-07,2026-02-09,M1,Lyon,Auvergne-Rhône-Alpes,P06,Fromage,Frais,8,6 V008,2026-02-14,2026-02-16,M2,Lille,Hauts-de-France,P03,Yaourt,Frais,25,1 V009,2026-02-21,2026-02-24,M3,Nantes,Pays de la Loire,P02,Pates,Epicerie,18,2 V010,2026-02-28,2026-03-03,M1,Lyon,Auvergne-Rhône-Alpes,P05,Eau,Boissons,40,1 V011,2026-03-06,2026-03-09,M2,Lille,Hauts-de-France,P04,Riz,Epicerie,10,2 V012,2026-03-13,2026-03-16,M3,Nantes,Pays de la Loire,P06,Fromage,Frais,5,6- Créez une table de mesures _Mesures (Accueil > Entrer des données, puis supprimez la colonne par défaut une fois une mesure ajoutée).
- Créez les mesures
Total ventes,Total quantitésetTotal ventes TTC(TVA 20 %, en réutilisant[Total ventes]). - Formatez
Total ventesetTotal ventes TTCen devise €, 0 décimale. - Affichez les trois mesures dans des cartes, puis dans un tableau par magasin.
- Total ventes = 415 €
- Total quantités = 243
- Total ventes TTC = 498 €
- Par magasin : Lyon 148, Lille 135, Nantes 132 (TTC : 177,60 ; 162 ; 158,40)
Colonne calculée ou mesure ?
Travaillez sur le modèle en étoile utilisé depuis la leçon 1 (FaitVentes, DimMagasin, DimProduit, Dates ; total des ventes 415).
- Ajoutez à
DimProduitla colonne calculéeLibellé= Categorie & ” - ” & Produit. - Utilisez-la dans un segment.
- Ajoutez à
FaitVentesune colonne calculéePrix x Qté= Quantite × PrixUnitaire et comparez sa somme àTotal ventes. - Supprimez cette colonne (redondante avec Montant) et expliquez en une phrase pourquoi une mesure était préférable.
- Le segment affiche 6 libellés, par exemple « Frais - Fromage »
- La somme de la colonne Prix x Qté vaut 415
- La colonne redondante est supprimée
- Ajoutez à
Écrire une mesure
Écrivez la mesure Prix moyen pondéré, qui divise
[Total ventes]par[Total quantités](deux mesures existantes).Prix moyen pondéré = -- à compléterOù écrire un taux ?
Vous devez calculer un taux de marge. Que créez-vous ?
- Une colonne calculée dans la table de faits
- Une mesure
- Une colonne dans Power Query
- Une table calculée
Quiz de fin de leçon
Quand une colonne calculée est-elle évaluée ?
- À chaque clic dans le rapport
- À l'actualisation du modèle, ligne par ligne
- Jamais
Comment référence-t-on une mesure selon les bonnes pratiques ?
- FaitVentes[Total ventes]
- [Total ventes]
- 'Total ventes'
Pourquoi la mesure Total ventes affiche-t-elle 148 pour Lyon ?
- Parce qu'elle est stockée par magasin
- Parce qu'elle est évaluée dans le contexte de filtre de la cellule
- Parce que Lyon est en premier
La suite du cours
- Agrégations et itérateurs (SUM, COUNTROWS, SUMX…)20 min
- Logique conditionnelle, DIVIDE et valeurs vides15 min
- CALCULATE : modifier le contexte de filtre20 min
- Variables, RELATED et fonctions de table20 min