2.4Introduction au DAX : SUM, AVERAGE, COUNT
L'essentiel en 30 secondes
- DAX = le langage de calcul de Power BI (le même que Power Pivot) : on commence par SUM, AVERAGE, COUNT/COUNTROWS, MIN, MAX.
- DIVIDE remplace « / » systématiquement : la division blindée, plus jamais d'erreur de division par zéro.
- CALCULATE évalue une expression en modifiant le filtre — « le CA, mais pour Paris » ; sa maîtrise complète occupe le niveau 3.
Mini-cas filé — Zineb écrit son socle de mesures
Zineb, contrôleuse de gestion dans une PME agroalimentaire à Alger, veut trois indicateurs : le chiffre d'affaires, le nombre de ventes et le panier moyen. Elle écrit un socle de mesures : Total CA = SUM(Ventes[Montant]), Nb Ventes = COUNTROWS(Ventes), puis Panier moyen = DIVIDE([Total CA], [Nb Ventes]) — remarquant qu'une mesure en référence une autre. Elle formate chacune (€, séparateur de milliers, décimales). Puis elle apprivoise CALCULATE : CA Paris = CALCULATE([Total CA], Ventes[Ville] = "Paris"), et Part Paris = DIVIDE([CA Paris], [Total CA]) formatée en %. Trois mesures qui s'emboîtent : Zineb écrit déjà du vrai DAX.
Cas autonome de cette section : il revient dans le cours, le schéma, le script et le défi 48h de la section 2.4.
1. Les agrégations de base
Le DAX (Data Analysis Expressions) est le langage de calcul de Power BI — le même que Power Pivot dans Excel. On commence par les agrégations simples : SUM, AVERAGE, COUNT/COUNTROWS, MIN, MAX, et DIVIDE — la division blindée qui évite les erreurs de division par zéro. Zineb note la première bonne habitude : les mesures se construisent en briques, une mesure peut (doit) en référencer d'autres.
2. Un aperçu de CALCULATE
Puis la fonction qui change tout : CALCULATE, qui évalue une expression en modifiant le filtre. « Le CA, mais seulement pour Paris » : CA Paris = CALCULATE([Total CA], Ventes[Ville] = "Paris"). Sa maîtrise complète occupe le niveau 3 ; ici on l'apprivoise sur un cas simple. Zineb se répète la phrase : « calcule ceci, avec ce filtre ».
3. Nommer et formater
Bonnes habitudes dès le premier jour : nommer clairement chaque mesure et la formater (€, %, décimales) — un rapport aux nombres bruts n'est pas fini. On utilise DIVIDE plutôt que « / », et on range les mesures dans une table dédiée. Zineb formate chaque mesure à sa création, sans exception.
🔎 Exemple concret — 🔎 Exemple concret — Trois mesures qui s'emboîtent
Le socle DAX de Zineb, du plus simple au plus composé :
Total CA = SUM(Ventes[Montant])
Nb Ventes = COUNTROWS(Ventes)
Panier moyen = DIVIDE([Total CA], [Nb Ventes])
CA Paris = CALCULATE([Total CA], Ventes[Ville] = "Paris")
Part Paris = DIVIDE([CA Paris], [Total CA]) // formatée en %
Lecture : [Panier moyen] référence [Total CA] et [Nb Ventes] : les mesures se construisent en briques.
Leçon : DIVIDE évite la division par zéro ; CALCULATE ajoute un filtre sans retaper la formule.
Vocabulaire de la section
- DAX
- Le langage des mesures et colonnes calculées : des fonctions type Excel, mais évaluées dans un contexte de modèle.
Exemple simple : Zineb écrit ses premières mesures en DAX.
Ce que ce n'est pas : une formule Excel qui ne regarde que des cellules.
Réflexe : DAX = des calculs dans des contextes.
- SUM / AVERAGE / MIN / MAX
- Les agrégations de base sur une colonne : SUM(Ventes[Montant]).
Exemple simple : Zineb calcule Total CA = SUM(Ventes[Montant]).
Ce que ce n'est pas : une somme tapée à la main dans un visuel.
Réflexe : une colonne à agréger → SUM, AVERAGE, MIN, MAX.
- COUNTROWS vs COUNT
- COUNTROWS(Ventes) compte les lignes d'une table ; COUNT compte les valeurs non vides d'une colonne.
Exemple simple : Zineb compte ses ventes avec COUNTROWS(Ventes).
Ce que ce n'est pas : une somme de montants, qui n'est pas un comptage.
Réflexe : compter des événements → COUNTROWS(table).
- DIVIDE
- DIVIDE(numérateur; dénominateur; [si_zéro]) : la division blindée, plus d'erreur par zéro.
Exemple simple : Zineb écrit Panier moyen = DIVIDE([Total CA], [Nb Ventes]).
Ce que ce n'est pas : une division avec « / » qui peut renvoyer une erreur.
Réflexe : toujours DIVIDE plutôt que « / ».
- CALCULATE
- LA fonction du DAX : évalue une expression dans un contexte de filtre modifié.
Exemple simple : Zineb écrit CA Paris = CALCULATE([Total CA], Ventes[Ville] = "Paris").
Ce que ce n'est pas : une mesure qui additionne tout sans filtrer.
Réflexe : « calcule ceci, avec ce filtre ».
En pratique — En pratique — Votre socle de mesures
- Créez les mesures de base : Total CA = SUM(Ventes[Montant]), Nb Ventes = COUNTROWS(Ventes), Panier moyen = DIVIDE([Total CA], [Nb Ventes]) — notez la réutilisation de mesures dans une mesure, comme Zineb.
- Formatez chaque mesure (onglet Outils de mesure) : € pour les montants, séparateur de milliers, 0 ou 1 décimale.
- Première CALCULATE : CA Paris = CALCULATE([Total CA], Ventes[Ville] = "Paris") — posez-la dans une carte à côté du Total CA.
- Encore une : Part Paris = DIVIDE([CA Paris], [Total CA]) formatée en % — trois mesures qui s'emboîtent.
Script pas-à-pas — écrire son socle DAX comme Zineb (8 min)
1) Nouvelle mesure : Total CA = SUM(Ventes[Montant]). 2) Nouvelle mesure : Nb Ventes = COUNTROWS(Ventes). 3) Panier moyen = DIVIDE([Total CA], [Nb Ventes]) — vous réutilisez des mesures dans une mesure. 4) Formatez chaque mesure (€, milliers, décimales). 5) CALCULATE : CA Paris = CALCULATE([Total CA], Ventes[Ville] = "Paris"), puis Part Paris = DIVIDE([CA Paris], [Total CA]) en %. 6) Rangez tout dans une table « _Mesures ».
Si vous hésitez sur une fonction DAX, la référence dax.guide (SQLBI) documente chacune avec exemples.
Modèle copier-coller — mon socle de mesures
Total CA = SUM(Ventes[Montant])
Nb Ventes = COUNTROWS(Ventes)
Panier moyen = DIVIDE([Total CA], [Nb Ventes])
CA Paris = CALCULATE([Total CA], Ventes[Ville] = "Paris")
Part Paris = DIVIDE([CA Paris], [Total CA]) // %
Règles : DIVIDE (jamais « / ») ; formater chaque mesure ; table « _Mesures ».
Chiffre d'affaires
Zineb écrit Total CA = SUM(Ventes[Montant]) : la mesure de base de tout son tableau de bord.
Nombre de ventes
Zineb compte ses transactions avec Nb Ventes = COUNTROWS(Ventes), plus fiable qu'un COUNT de colonne.
Panier moyen
Panier moyen = DIVIDE([Total CA], [Nb Ventes]) : une mesure composée qui s'appuie sur deux autres.
Le CA de Paris
CA Paris = CALCULATE([Total CA], Ventes[Ville] = "Paris") : le même CA, mais filtré sur Paris.
✓ Bonnes pratiques
- Construire les mesures en briques (une mesure en référence d'autres).
- DIVIDE plutôt que « / » systématiquement.
- Formater chaque mesure à la création (€, %, décimales).
✗ Pièges fréquents
- Diviser avec « / » (risque d'erreur de division par zéro).
- Laisser des nombres bruts non formatés (rapport non fini).
- Croire maîtriser CALCULATE d'un coup (sa profondeur est au niveau 3).
Points clés à retenir
- Les mesures se construisent en briques : une mesure peut (doit) en référencer d'autres.
- DIVIDE remplace « / » systématiquement : la division par zéro n'existe plus.
- CALCULATE = « calcule ceci, avec ce filtre » : la phrase à se répéter.
- Formatez chaque mesure à la création : un rapport aux nombres bruts n'est pas fini.
Défi 48h — appliquez demain
Composez le socle de Zineb : écrivez Total CA = SUM(Ventes[Montant]), Nb Ventes = COUNTROWS(Ventes) et Panier moyen = DIVIDE([Total CA], [Nb Ventes]), formatez chaque mesure, puis ajoutez CA Paris = CALCULATE([Total CA], Ventes[Ville] = "Paris"). Rangez le tout dans une table « _Mesures ».
- J'écris des mesures DAX avec SUM, AVERAGE et COUNTROWS.
- J'utilise DIVIDE au lieu de « / » et je formate chaque mesure.
- J'écris une CALCULATE simple qui modifie le filtre.
Questions fréquentes
DAX ressemble aux formules Excel : est-ce le même langage ?
La syntaxe se ressemble (SUM, AVERAGE, IF existent dans les deux), mais la logique diffère : Excel calcule des cellules, DAX calcule dans des contextes (le visuel, les filtres). Une même mesure donne un résultat différent selon la ville de la barre ou le mois de la colonne. Vos acquis Excel aident pour la syntaxe ; la logique de contexte s'apprend — c'est le saut du niveau 3.
Où apprendre les fonctions DAX au-delà de ce guide ?
La référence officielle et gratuite est dax.guide (par SQLBI) : elle documente chaque fonction avec sa syntaxe et des exemples. Au-delà, SQLBI (Marco Russo et Alberto Ferrari) est la référence mondiale du DAX, et Microsoft Learn propose des parcours structurés qui préparent à la PL-300. Notre section ressources les cite.
Que fait la fonction CALCULATE en DAX ?