2.3 · Colonnes calculées vs mesures

Niveau 2 · Modèle & DAX

2.3Colonnes calculées vs mesures

Objectif : Distinguer colonne calculée et mesure, et installer le réflexe : mesure d'abord, colonne si besoin ligne à ligne.
Temps estimé : 15 min · lecture autonome · Si vous n'avez que 5 min : lisez « L'essentiel en 30s » + le schéma.

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.

Erreur d'interprétation fréquente : « Je fais tout en colonnes calculées, une colonne réagit aux segments comme une mesure, et je glisse des colonnes en valeurs sans y penser ». Non, triple erreur. Ce qui doit réagir aux filtres du rapport est une mesure, pas une colonne : une colonne calculée est figée à l'actualisation. Réflexe : mesure d'abord — une colonne qu'on ne fait qu'additionner aurait dû être une mesure. Et les mesures implicites (glisser une colonne) dépannent mais s'imposent vite d'être remplacées par de vraies mesures explicites.
Colonne vs mesure La mesure se recalcule selon le contexte ; la colonne reste figée ligne à ligne. Colonne calculéeStockée ligne à ligne (filtrer, relier)+MesureCalcul à la volée selon le contexte (agréger)+TestRéagit aux filtres ? → mesure Ranger les mesures dans une table dédiée « _Mesures ».
La mesure se recalcule selon le contexte ; la colonne reste figée ligne à ligne.
Version texte du schéma (SEO / lecteurs d'écran / traduction) : 1) Zineb, contrôleuse de gestion à Alger, distingue les deux façons de calculer : la colonne calculée ajoute une valeur stockée à chaque ligne (Marge = Ventes[Montant] * 0,3), la mesure calcule à la volée selon le contexte du visuel (Total CA = SUM(Ventes[Montant])). 2) Elle applique l'arbre de décision : contexte de ligne pour la colonne, contexte de filtre pour la mesure — et le test décisif, ce qui doit réagir aux filtres est une mesure. 3) Elle installe le réflexe mesure d'abord, réserve la colonne au besoin ligne à ligne (filtrer, relier) et range ses mesures dans une table dédiée « _Mesures ». Leçon : une colonne qu'on ne fait qu'additionner aurait dû être une mesure.

🔎 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

  1. Colonne calculée : vue Table, table Ventes → Nouvelle colonne → Marge = Ventes[Montant] * 0.3 — observez la valeur sur chaque ligne, comme Zineb.
  2. Mesure : Nouvelle mesure → Total CA = SUM(Ventes[Montant]) — rien ne s'affiche dans la table : elle vit dans les visuels.
  3. Créez une matrice Ville × [Total CA] : la mesure se recalcule par ville, par total — le contexte en action.
  4. 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.
Les deux outils en main et le réflexe installé : mesure d'abord, colonne si besoin ligne à ligne.

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.

Checklist sortie de section
  • 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).
Auto-évaluation 1-5 : est-ce que je choisis sans hésiter entre colonne et mesure ?Auto-évaluation 1-5 : ai-je prouvé qu'une mesure se recalcule selon le visuel ?

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 ».

Vérifiez votre compréhension

Qu'est-ce qui doit réagir aux filtres du rapport (segments, clics) ?

Ressources supplémentaires (optionnel, pour aller plus loin)

Examen du niveau 2Questions inédites et durcies pour valider vos acquis