2.3Colonnes calculées vs mesures
L'essentiel en 30 secondes
- La mesure calcule un agrégat à la volée selon le contexte du visuel (rien n'est stocké) : c'est le cœur de Power BI.
- La colonne calculée ajoute une valeur à chaque ligne, calculée à l'actualisation et stockée : elle grossit le modèle.
- Réflexe : mesure d'abord ; la colonne calculée se réserve au besoin ligne à ligne (filtrer, catégoriser, relier) — ce qui doit réagir aux filtres est une mesure.
Mini-cas filé — Zineb tranche stockage ou à-la-volée
Zineb, contrôleuse de gestion dans une PME agroalimentaire à Alger, veut une marge par ligne de vente et un total qui se recalcule par ville. Elle croit devoir tout mettre dans une colonne calculée. Elle applique la section : la marge par ligne = Ventes[Montant] * 0,3 est une colonne calculée (valeur stockée, ligne à ligne), tandis que Total CA = SUM(Ventes[Montant]) est une mesure (à la volée). Elle pose une matrice Ville × [Total CA] : la mesure se recalcule par ville, par total, alors qu'une colonne resterait figée. Elle retient le test décisif : ce qui doit réagir aux segments est une mesure. Réflexe installé : mesure d'abord, colonne si besoin ligne à ligne.
Cas autonome de cette section : il revient dans le cours, le schéma, le script et le défi 48h de la section 2.3.
1. Deux façons de calculer
La colonne calculée ajoute une valeur à CHAQUE LIGNE de la table, calculée à l'actualisation et stockée en mémoire — par exemple Marge = Ventes[Montant] * 0,3. La mesure calcule un agrégat À LA VOLÉE selon le contexte du visuel et ne stocke rien — par exemple Total CA = SUM(Ventes[Montant]). Zineb comprend vite laquelle des deux elle regarde.
2. L'arbre de décision
Une colonne calculée vit dans un contexte de ligne (« la ligne courante ») ; une mesure vit dans un contexte de filtre (« ce que le visuel filtre » — la ville de la barre, le mois de la colonne). Le test décisif : ce qui doit réagir aux filtres du rapport est une mesure. Une colonne qu'on ne fait qu'additionner aurait dû être une mesure. Zineb se pose la question à chaque calcul.
3. Ranger ses mesures
Bonne habitude dès maintenant : regrouper les mesures dans une table dédiée « _Mesures » pour un modèle propre. On garde les colonnes calculées rares, car elles grossissent le fichier. Zineb range ses mesures et limite les colonnes au strict nécessaire ligne à ligne.
🔎 Exemple concret — 🔎 Exemple concret — Le duel colonne vs mesure
Zineb crée les deux et compare :
Colonne calculée : Marge = Ventes[Montant] * 0.3 (une valeur par ligne)
Mesure : Total CA = SUM(Ventes[Montant]) (vit dans les visuels)
→ matrice Ville × [Total CA] : la mesure se recalcule par ville, par total.
Lecture : la mesure est recalculée dans chaque cellule du visuel (par ville, par total).
Leçon : la colonne affiche une valeur figée ; la mesure s'adapte au contexte.
Vocabulaire de la section
- Colonne calculée
- Nouvelle colonne DAX évaluée ligne à ligne et STOCKÉE : Marge = Ventes[Montant] - Ventes[Cout].
Exemple simple : Zineb calcule une marge par ligne de vente.
Ce que ce n'est pas : un agrégat qui se recalcule selon le visuel.
Réflexe : besoin ligne à ligne (filtrer, relier) → colonne.
- Mesure
- Calcul DAX évalué à la demande dans le contexte du visuel : Total CA = SUM(Ventes[Montant]).
Exemple simple : Zineb pose [Total CA] dans une matrice Ville × Mois.
Ce que ce n'est pas : une valeur stockée figée à l'actualisation.
Réflexe : ce qui doit réagir aux filtres → mesure.
- Contexte de ligne
- L'environnement d'une colonne calculée : « la ligne courante ».
Exemple simple : Zineb lit la marge de chaque vente, ligne par ligne.
Ce que ce n'est pas : le filtrage dynamique d'un visuel.
Réflexe : colonne calculée → penser « ligne courante ».
- Contexte de filtre
- L'environnement d'une mesure : « ce que le visuel filtre » (la ville de la barre, le mois de la colonne).
Exemple simple : Zineb recalcule [Total CA] par ville automatiquement.
Ce que ce n'est pas : une valeur figée identique partout.
Réflexe : mesure → penser « ce que le visuel filtre ».
- Mesure implicite
- L'agrégation automatique d'une colonne glissée en valeurs : pratique au début, à remplacer par de vraies mesures explicites.
Exemple simple : Zineb remplace ses agrégations automatiques par [Total CA].
Ce que ce n'est pas : une mesure explicite nommée et formatée.
Réflexe : dès qu'on dépasse la somme, créer une mesure explicite.
En pratique — En pratique — Le duel colonne vs mesure
- Colonne calculée : vue Table, table Ventes → Nouvelle colonne → Marge = Ventes[Montant] * 0.3 — observez la valeur sur chaque ligne, comme Zineb.
- Mesure : Nouvelle mesure → Total CA = SUM(Ventes[Montant]) — rien ne s'affiche dans la table : elle vit dans les visuels.
- Créez une matrice Ville × [Total CA] : la mesure se recalcule par ville, par total — le contexte en action.
- Créez la mesure Panier moyen = AVERAGE(Ventes[Montant]) et comparez-la à la moyenne de la colonne Marge : la différence stockage/à-la-volée.
Script pas-à-pas — trancher comme Zineb (6 min)
1) Créez une colonne calculée : Marge = Ventes[Montant] * 0.3, et regardez la valeur apparaître sur chaque ligne. 2) Créez une mesure : Total CA = SUM(Ventes[Montant]) — elle ne s'affiche pas dans la table. 3) Posez [Total CA] dans une matrice Ville × [Total CA] : elle se recalcule par ville. 4) Ajoutez Panier moyen = AVERAGE(Ventes[Montant]) et comparez. 5) Rangez vos mesures dans une table dédiée « _Mesures », comme Zineb.
Si un calcul doit réagir aux segments, ne prenez pas de colonne : créez une mesure.
Modèle copier-coller — mesure ou colonne ?
Ce qui doit RÉAGIR aux filtres (segments, clics) → MESURE (à la volée)
Besoin d'une valeur LIGNE À LIGNE (filtrer, catégoriser, relier) → COLONNE
Colonne : Marge = Ventes[Montant] * 0.3
Mesure : Total CA = SUM(Ventes[Montant])
Règle : mesure d'abord ; ranger les mesures dans une table « _Mesures ».
Marge par ligne
Zineb calcule Marge = Ventes[Montant] * 0.3 dans une colonne : la valeur existe sur chaque ligne (utile pour filtrer).
Total qui réagit
Zineb pose [Total CA] en mesure : le total se recalcule par ville, par mois, selon les segments.
Panier moyen
Panier moyen = AVERAGE(Ventes[Montant]) : une mesure qui s'adapte au contexte du visuel.
Table _Mesures
Zineb regroupe toutes ses mesures dans une table dédiée « _Mesures » : le modèle reste propre.
✓ Bonnes pratiques
- Mesure d'abord : elle réagit aux filtres et ne stocke rien.
- Colonne calculée seulement pour un besoin ligne à ligne (filtrer, relier).
- Ranger les mesures dans une table dédiée « _Mesures ».
✗ Pièges fréquents
- Créer une colonne calculée qu'on ne fait qu'additionner.
- Multiplier les colonnes calculées (elles grossissent le modèle).
- Attendre d'une colonne qu'elle réagisse aux segments (elle est figée).
Points clés à retenir
- Mesure = calcul à la volée selon le contexte du visuel : le cœur de Power BI.
- Colonne calculée = valeur stockée ligne à ligne : pour filtrer, catégoriser, relier — pas pour agréger.
- Réflexe : mesure d'abord. Une colonne qu'on ne fait qu'additionner aurait dû être une mesure.
- Rangez vos mesures : une table dédiée « _Mesures » les regroupe proprement.
Défi 48h — appliquez demain
Rejouez le duel de Zineb : créez une colonne calculée (Marge = Ventes[Montant] * 0.3) et une mesure (Total CA = SUM(Ventes[Montant])), posez la mesure dans une matrice et vérifiez qu'elle se recalcule par ville. Écrivez en une phrase pourquoi ce qui réagit aux filtres est une mesure.
- Je distingue une colonne calculée d'une mesure.
- Je choisis mesure d'abord et colonne si besoin ligne à ligne.
- Je range mes mesures et j'explique le contexte (ligne vs filtre).
Questions fréquentes
Pourquoi ma colonne calculée ne réagit-elle pas aux segments ?
Par nature : une colonne calculée est évaluée à l'actualisation, ligne à ligne, et sa valeur est stockée une fois pour toutes. Elle est donc figée et ne voit pas les filtres du rapport. Ce qui doit réagir aux segments doit être une mesure, car une mesure se recalcule à la volée dans le contexte du visuel.
Les mesures implicites (glisser une colonne) suffisent-elles ?
Pour débuter, oui : glisser une colonne numérique crée une agrégation automatique. Mais les mesures explicites s'imposent vite : réutilisables, formatables, documentables, et obligatoires pour tout calcul non trivial (ratios, time intelligence) et pour la PL-300. Rangez-les dans une table « _Mesures ».
Qu'est-ce qui doit réagir aux filtres du rapport (segments, clics) ?