DAX : la mesure qui remplace la formule Excel
Du grand livre nettoyé aux premiers indicateurs financiers : la différence entre une colonne calculée et une mesure, la convention de signe, et le contexte de filtre que CALCULATE vient changer.

Dans le cadre de la rubrique « Je partage mes connaissances », je vous propose de passer du grand livre nettoyé aux premiers indicateurs financiers, avec DAX.
Power Query prépare la matière : des lignes propres, des types fiables, un plan comptable complet. DAX produit le chiffre. Un contrôleur de gestion ne juge pas un rapport sur la propreté des colonnes. Il pose trois questions : le total est-il juste, la comparaison reste-t-elle à périmètre constant, et le pourcentage se recalcule-t-il correctement quand on filtre ?
Pourquoi cette fiche
Ces trois questions du contrôleur sont exactement le contexte de filtre, CALCULATE et DIVIDE. Cette fiche ne présente donc pas DAX comme une liste de fonctions à mémoriser. Elle construit un compte de résultat qui tient debout quand on le filtre, à partir du grand livre nettoyé de la fiche précédente.
Le modèle bâti ici sert de base aux fiches suivantes : la comparaison d'un exercice sur l'autre, puis le modèle sémantique complet. Autant le construire proprement une seule fois.
Télécharger grand_livre_2026_propre.csv Télécharger plan_comptable_2026.csv
27 écritures déjà nettoyées, équilibrées au centime, et 17 comptes. Tous les chiffres de cet article ont été calculés sur ces deux fichiers, jamais estimés.
Colonne calculée ou mesure : la question qui décide tout
Power BI propose deux façons d'ajouter un calcul à un modèle, et la confusion entre les deux coûte cher.
| Colonne calculée | Mesure | |
|---|---|---|
| Moment du calcul | À l'actualisation du modèle | À l'affichage, dans chaque cellule |
| Stockage | Occupe de la mémoire, ligne par ligne | Ne stocke rien |
| Contexte disponible | Contexte de ligne | Contexte de filtre |
| Usage en finance | Classer, étiqueter, préparer un axe | Tout indicateur chiffré agrégé |
Règle de travail : si le résultat doit changer quand l'utilisateur filtre, c'est une mesure. S'il caractérise la ligne elle-même et ne dépend d'aucun filtre, c'est une colonne calculée. En cas d'hésitation, une mesure.
La faute la plus coûteuse est d'écrire une colonne calculée Marge = Ventes − Coûts puis de la sommer dans un visuel. Le total est exact par hasard tant qu'on ne filtre rien, et devient faux dès le premier segment posé.
Le signe se décide une fois, pas à chaque rapport
Le grand livre porte deux colonnes, Debit et Credit. DAX travaille mieux sur une seule colonne signée : Montant = Debit − Credit.
En comptabilité française, une charge (classe 6) augmente le débit : son montant est positif. Un produit (classe 7) augmente le crédit : son montant, avec cette formule, est négatif. On ne corrige pas cela dans les données. Modifier les données pour rendre les produits positifs casserait le seul garde-fou du modèle : le contrôle débit = crédit. Le signe se corrige une seule fois, à la présentation, dans la mesure qui totalise les produits.
Ce que CALCULATE change, et pourquoi une mesure ne voit jamais une ligne
Une mesure ne reçoit jamais de contexte de ligne : c'est pourquoi Montant seul est refusé dans une mesure, il faut l'envelopper dans une agrégation, SUM(GrandLivre[Montant]). Ce qu'une mesure reçoit, c'est un contexte de filtre : les lignes que le visuel, les segments et la ligne du tableau l'autorisent à voir.
CALCULATE est la seule fonction qui modifie ce contexte de filtre. Tout le reste du DAX financier n'est qu'une variation autour de cette phrase.
| Écriture | Ce que fait CALCULATE |
|---|---|
CALCULATE([X], Plan[Classe] = 6) | remplace le filtre existant sur Classe par = 6 |
CALCULATE([X], ALL(Plan)) | retire tous les filtres venant de la table Plan |
CALCULATE([X], KEEPFILTERS(Plan[Classe] = 6)) | ajoute la condition au filtre existant sans le remplacer |
Construire le modèle et les trois agrégats du compte de résultat
Énoncé
Le contrôleur de gestion remet le grand livre nettoyé de janvier à avril 2026 et le plan comptable. Il demande trois chiffres qui doivent rester justes quand il filtrera par mois ou par compte : le total des charges, le total des produits, et le résultat. Il demande aussi un contrôle visible que le grand livre reste équilibré.
Solution
- Importer
grand_livre_2026_propre.csv: Origine du fichier65001 : Unicode (UTF-8), Délimiteur Virgule, Détection du type de donnéesNe pas détecter les types de données. La détection automatique lit 3200,50 comme du texte ou comme 320 050 selon l'humeur des paramètres régionaux.
- Typer
DebitetCreditavec Utiliser les paramètres régionaux : Nombre décimal, Français (France). LaisserCompteen texte : c'est un identifiant, il servira de clé de relation.
- Remplacer les cellules vides de Debit et Credit par 0, sinon une case vide reste nulle : l'arithmétique la traite comme un zéro, mais COUNT et AVERAGE l'ignorent.
- Importer
plan_comptable_2026.csvavec les mêmes trois réglages. TyperClasseen Nombre entier : les mesures ci-dessous comparent Classe = 6, ce qui échoue en silence si la colonne reste du texte. - Créer la relation
GrandLivre[Compte]→PlanComptable[Compte], cardinalité Plusieurs à un, filtre croisé Unique. Le filtre doit descendre du plan comptable vers le grand livre, jamais l'inverse. - Ajouter la colonne calculée
Montant = GrandLivre[Debit] - GrandLivre[Credit], puis les six mesures.
Total Débit = SUM(GrandLivre[Debit])
Total Crédit = SUM(GrandLivre[Credit])
Écart Débit Crédit = [Total Débit] - [Total Crédit]
Total Charges = CALCULATE(SUM(GrandLivre[Montant]), PlanComptable[Classe] = 6)
Total Produits = - CALCULATE(SUM(GrandLivre[Montant]), PlanComptable[Classe] = 7)
Résultat = [Total Produits] - [Total Charges]
Résultat attendu
| Mesure | Valeur |
|---|---|
| Total Débit | 106 285,50 |
| Total Crédit | 106 285,50 |
| Écart Débit Crédit | 0,00 |
| Total Charges | 65 585,50 |
| Total Produits | 23 800,00 |
| Résultat | −41 785,50 |
Trois vérifications avant de montrer ce rapport à quelqu'un. L'Écart Débit Crédit doit afficher 0,00, sinon un typage a échoué plus haut. Le Total Produits doit être positif, sinon le signe moins de la mesure a été oublié. Le Résultat, ici négatif, n'est pas une erreur : sur ces quatre mois, la seule masse salariale (45 000,00 de rémunérations et 9 600,00 de charges sociales) dépasse le total des produits.
Versions : article rédigé d'après Power BI Desktop, mise à jour d'août 2026 (interface en français). Les fonctions DAX utilisées (CALCULATE, SUM, ALL, KEEPFILTERS) sont disponibles dans les versions actuelles ; les noms de menus peuvent changer au fil des mises à jour mensuelles.