CALCULATE — TOTALYTD — DATEADD — VAR/RETURN — DIVIDE
Power BI est livré sans mode d’emploi financier.
Les formules DAX génériques ne produisent pas les KPI dont un DAF a besoin.
Cette page documente les patterns DAX utilisés en mission : marge filtrée, comparatif N/N-1, DSO dynamique, cumul annuel recalculé. Chaque formule est accompagnée de son contexte d’usage et du résultat attendu dans le dashboard.
Formules validees en conditions reelles sur missions 2024-2026
La documentation Microsoft couvre la syntaxe. Elle ne couvre pas les pieges specifiques aux donnees comptables.
Un exercice qui commence en juillet casse TOTALYTD par defaut. Sans table de dates dediee, les cumuls sont faux.
Calculer la marge globale est trivial. La recalculer correctement quand l'utilisateur filtre par famille produit ou par commercial, c'est CALCULATE.
Comparer mars 2025 a mars 2024 ne suffit pas si le perimetre a change. DATEADD seul ne gere pas les retraitements de perimetre.
DSO = Creances / CA * 30 est une simplification. La version rigoureuse necessite une VAR intermediaire pour eviter les divisions par zero et les incoherences de clature.
Ce que cette page documente : les cinq patterns DAX les plus utiles en contexte finance d’entreprise, avec la logique metier derriere chaque choix de syntaxe.
La formule la plus importante de Power BI finance. Elle permet de recalculer n’importe quel KPI dans un contexte de filtre modifie.
Votre tableau de bord affiche la marge brute totale. Un directeur commercial filtre sur sa region : la marge affichee doit etre recalculee sur son perimetre, pas ramenee a une valeur globale divisee. CALCULATE reecrit le contexte de filtre avant d’evaluer la mesure.
Marge Brute Filtrée =
CALCULATE(
[Marge Brute], -- mesure a recalculer
REMOVEFILTERS('Produits'[Famille]), -- supprime le filtre famille
KEEPFILTERS('Region'[Code]) -- conserve le filtre region
)Une carte KPI “Marge Brute” qui affiche la bonne valeur quel que soit le filtre appliqué sur d’autres visuels. Fini les chiffres qui ne collent pas avec le rapport comptable quand on segmente par business unit.
Le cumul depuis le debut de l’exercice, pas depuis le 1er janvier. Le parametre year_end_date est la cle que la plupart des tutoriels omettent.
Une PME dont l’exercice court du 1er juillet au 30 juin. En mars, le cumul annuel doit afficher 9 mois (juillet a mars), pas 3 mois (janvier a mars). Sans le parametre year_end_date, TOTALYTD repart systematiquement du 1er janvier. Resultat : les graphiques ne correspondent jamais aux etats financiers.
CA Cumulé YTD =
TOTALYTD(
SUM('Ventes'[Montant HT]), -- mesure a cumuler
'Calendrier'[Date], -- colonne date de la table calendrier
"30/06" -- fin d'exercice si hors 31/12
)
-- Variante explicite (recommandée en production) :
CA Cumulé YTD v2 =
CALCULATE(
SUM('Ventes'[Montant HT]),
DATESYTD('Calendrier'[Date], "30/06")
)Un indicateur “CA YTD : 2,4 M€” qui affiche exactement le meme chiffre que le grand livre comptable, quel que soit le mois selectionné dans le filtre de date. Zero ecart avec la balance.
L’indicateur de glissement annuel que tout DAF demande en premiere slide. Avec la gestion correcte des periodes incompletes.
Le reporting de fevrier 2025 doit comparer fevrier 2025 a fevrier 2024, pas a la totalite de 2024. DATEADD decale le contexte de filtre de 12 mois en arriere, en conservant exactement le meme grain temporel (mois, semaine, jour) que la selection active. Le calcul d’ecart et du taux de croissance s’appuie ensuite sur cette valeur N-1.
-- CA de la meme periode l'annee precedente
CA N-1 =
CALCULATE(
SUM('Ventes'[Montant HT]),
DATEADD('Calendrier'[Date], -1, YEAR)
)
-- Ecart en valeur absolue
Ecart CA N vs N-1 =
[CA] - [CA N-1]
-- Taux de croissance (avec protection division par zero)
Croissance CA % =
DIVIDE(
[CA] - [CA N-1],
[CA N-1],
BLANK() -- retourne vide plutot qu'une erreur si N-1 = 0
)Chaque carte KPI affiche : valeur periode, valeur N-1, ecart en euros, fleche de tendance. Quand le DAF change la periode dans le filtre, tout se recalcule automatiquement. Aucune formule a modifier.
La division securisee. En finance, les denominateurs a zero ne sont pas des cas rares : nouveaux produits sans CA, periodes hors exercice, filtres agressifs.
Un ratio CA / Charges affiche une erreur quand un segment n’a aucun chiffre sur la periode selectionnee. Avec un operateur `/` natif, Power BI retourne ERROR ou INFINITY, ce qui casse visuellement le tableau de bord et inquiete le DAF. DIVIDE renvoie BLANK() ou une valeur par defaut, selon ce que vous choisissez.
-- Taux de marge brute securise
Taux Marge Brute % =
DIVIDE(
[Marge Brute], -- numerateur
[CA HT], -- denominateur
0 -- valeur si denominateur = 0 (ici : 0 %)
)
-- Taux d'evolution securise (preferer BLANK() pour ne pas fausser les moyennes)
Taux Evolution % =
DIVIDE(
[CA] - [CA N-1],
[CA N-1],
BLANK()
)
-- Cout par unite vendue (avec seuil minimum pour eviter les aberrations)
Cout Unitaire =
VAR _qte = SUM('Ventes'[Quantite])
RETURN
DIVIDE(
SUM('Achats'[Montant]),
IF(_qte > 0, _qte, BLANK())
)Un tableau de bord qui ne s’affiche jamais en erreur, meme sur des segments ou des periodes sans donnees. Les cellules vides restent vides, sans perturber les moyennes et les visualisations.
Le pattern de lisibilite. En finance, les formules DAX deviennent rapidement illisibles. VAR/RETURN permet de les decomposer en etapes nommees, auditables, et reutilisables.
Le DSO (Delai de Paiement Clients) est un KPI critique pour le BFR. Sa formule rigoureuse implique plusieurs etapes : calcul du CA sur 90 jours glissants, encours clients a date, puis division securisee. Une formule DAX imbriquee sur une ligne est inauditable. VAR decompose le calcul en etapes explicites.
DSO Dynamique (jours) =
VAR _dateMax = MAX('Calendrier'[Date]) -- date de fin de periode
VAR _date90 = _dateMax - 89 -- fenetre glissante 90 jours
VAR _ca90 =
CALCULATE(
SUM('Ventes'[Montant HT]),
DATESBETWEEN('Calendrier'[Date], _date90, _dateMax)
)
VAR _encours =
CALCULATE(
SUM('Creances'[Solde]),
'Calendrier'[Date] <= _dateMax
)
VAR _caJour = DIVIDE(_ca90, 90, BLANK()) -- CA moyen journalier
RETURN
DIVIDE(_encours, _caJour, BLANK()) -- DSO en joursUne carte KPI “DSO : 47 jours” qui se recalcule dynamiquement quand l’utilisateur change la periode ou filtre par client. La formule reste lisible par n’importe quel analyste qui reprend le fichier six mois plus tard.
Quand utiliser chaque pattern selon le KPI finance a produire.
| Pattern | KPI finance concerne | Difficulte |
|---|---|---|
| CALCULATE | Marge filtrée, part de marché, contribution segmentée | Intermediaire |
| TOTALYTD | CA YTD, charges cumulées, EBITDA depuis debut exercice | Debutant |
| DATEADD | Glissement N/N-1, taux de croissance, ecart budgetaire | Debutant |
| DIVIDE | Taux de marge, ROE, ratios, pourcentages de contribution | Debutant |
| VAR / RETURN | DSO, DPO, BFR jours CA, formules multi-etapes | Intermediaire |
Les formules DAX sont fiables seulement si le modele de donnees sous-jacent l’est aussi. Trois elements non-negociables.
Une table 'Calendrier' marquee comme table de dates dans Power BI, avec une ligne par jour, des colonnes Annee / Mois / SemaineExercice. Sans elle, TOTALYTD et DATEADD sont instables.
Toutes les mesures dans une table '_Mesures' vide, jamais directement sur les tables de faits. Facilite la maintenance, evite les duplications, rend le modele auditable.
Un schema en etoile avec une table de faits centrale (Ventes, Ecritures) et des dimensions (Clients, Produits, Calendrier) en relation 1-to-many. Les relations many-to-many cassent CALCULATE.
La regle de base : avant d’ecrire la premiere formule DAX, 30 minutes de verification du modele de donnees evitent 3 heures de debogage sur des resultats incoherents.
Les patterns DAX documentés ici sont implementes dans chaque mission de reporting financier. Si vous partez de zero ou reprenez un modele Power BI existant, voici les deux prochaines etapes.
Sage, Cegid, EBP ou FEC : chaque source a sa methode d’import dans Power BI. La page connecteurs documente les etapes pour chaque logiciel.
Voir les connecteursMission de 3 semaines : connexion des sources, modelisation, formules DAX, dashboard livre avec formation. Autonomie totale a l’issue.
Planifier un echange