ES
ERVIS SEFERI
Finance · Business · Technologie
← Retour · Je partage mes connaissances
IA & Automatisation · Power BI

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 ?

Une colonne calculee qui fige un total et une mesure qui le recalcule
Le même classeur peut donner deux résultats différents. La différence ne se voit pas avant qu'on pose un 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éeMesure
Moment du calculÀ l'actualisation du modèleÀ l'affichage, dans chaque cellule
StockageOccupe de la mémoire, ligne par ligneNe stocke rien
Contexte disponibleContexte de ligneContexte de filtre
Usage en financeClasser, étiqueter, préparer un axeTout 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.

ÉcritureCe 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

  1. Importer grand_livre_2026_propre.csv : Origine du fichier 65001 : Unicode (UTF-8), Délimiteur Virgule, Détection du type de données Ne 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.
Fenetre d'import CSV avec l'origine UTF-8 et la detection des types desactivee encadrees en rouge
Trois réglages à l'import, dans cet ordre, à chaque fichier comptable : origine, délimiteur, puis pas de détection automatique.
  1. Typer Debit et Credit avec Utiliser les paramètres régionaux : Nombre décimal, Français (France). Laisser Compte en texte : c'est un identifiant, il servira de clé de relation.
Boite Modifier le type avec les parametres regionaux, Nombre decimal et Francais France encadres en rouge
Un montant français mal typé ne plante pas : il se tait, et fausse silencieusement chaque somme qui suit.
  1. 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.
  2. Importer plan_comptable_2026.csv avec les mêmes trois réglages. Typer Classe en Nombre entier : les mesures ci-dessous comparent Classe = 6, ce qui échoue en silence si la colonne reste du texte.
  3. 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.
  4. 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

MesureValeur
Total Débit106 285,50
Total Crédit106 285,50
Écart Débit Crédit0,00
Total Charges65 585,50
Total Produits23 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.

Suite : le poids de chaque poste de charge dans le total, ALL contre ALLSELECTED, et pourquoi DIVIDE remplace la barre oblique.

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.