Le poids de chaque poste, et pourquoi un total ne suffit pas
ALL et ALLSELECTED pour répartir un total entre ses postes, puis DIVIDE pour comparer un budget à un réel sans jamais faire planter un rapport quand un compte n'a ni l'un ni l'autre.

Dans le cadre de la rubrique « Je partage mes connaissances », je continue sur le modèle DAX construit dans l'article précédent, avec les questions que pose un contrôleur de gestion une fois les trois agrégats en place : où part l'argent, et le budget a-t-il été tenu ?
Deux mesures suffisent en apparence à y répondre. Le piège est qu'un total juste peut cacher un détail faux, et qu'un dénominateur vide peut faire planter un rapport entier devant un comité de direction.
Télécharger grand_livre_2026_propre.csv Télécharger plan_comptable_2026.csv Télécharger budget_2026.csv
Le poids de chaque poste dans le total des charges
Énoncé
Le contrôleur veut savoir où part l'argent. Il demande un tableau des comptes de charge, du plus lourd au plus léger, avec le montant et le pourcentage que chaque compte représente dans le total des charges. Le pourcentage doit se recalculer sur le total affiché, et la colonne doit totaliser 100 %.
Solution
- Table des comptes de charge :
PlanComptable[Compte],PlanComptable[Libelle], la mesureTotal Charges, filtrée surPlanComptable[Nature] = Charge. - Ajouter la mesure du poids :
Poids Charge % =
DIVIDE(
[Total Charges],
CALCULATE([Total Charges], ALL(PlanComptable)),
0
)
- Trier sur Total Charges, décroissant. Activer le Total général dans la mise en forme du visuel.
Résultat attendu
| Compte | Libellé | Total Charges | Poids Charge % |
|---|---|---|---|
| 641000 | Rémunérations du personnel | 45 000,00 | 68,61 % |
| 645000 | Charges de sécurité sociale | 9 600,00 | 14,64 % |
| 601000 | Achats de matières premières | 3 200,50 | 4,88 % |
| 613000 | Locations | 3 200,00 | 4,88 % |
| 681000 | Dotations aux amortissements | 2 100,00 | 3,20 % |
| 606100 | Fournitures non stockables | 1 450,00 | 2,21 % |
| 661000 | Charges d'intérêts | 850,00 | 1,30 % |
| 627000 | Services bancaires et assimilés | 185,00 | 0,28 % |
| Total | 65 585,50 | 100,00 % |
Huit lignes, pas neuf. Le plan comptable porte un neuvième compte de charge, 621000 Personnel extérieur, qu'aucune écriture ne mouvemente sur ce périmètre : Total Charges y renvoie une valeur vide, et Power BI masque la ligne. Une analyse fondée sur le seul réel ne voit jamais ce qui n'a pas été dépensé — ce compte revient au tableau suivant, où le budget, lui, n'est pas vide.
ALL retire aussi le filtre posé sur Nature à l'étape 1 : le dénominateur redevient l'ensemble du plan comptable, mais la mesure Total Charges réapplique elle-même Classe = 6 par son propre CALCULATE. C'est une double protection délibérée : une mesure financière doit porter sa définition en elle-même. Avec ALL, le dénominateur ignore aussi un segment posé par l'utilisateur ; avec ALLSELECTED, il respecte la sélection et la colonne totalise toujours 100 %. Pour un poids de poste dans un rapport interactif, ALLSELECTED est presque toujours le bon choix — ALL sert quand la référence doit rester le total annuel figé.
Variance budget contre réel, et pourquoi DIVIDE est obligatoire
Énoncé
Le contrôleur remet le budget de charges de janvier à avril 2026. Il demande un tableau par compte : réel, budget, écart en euros, écart en pourcentage, avec un total. Une consigne accompagne la demande : le tableau ne doit afficher aucune erreur, même sur un compte sans budget.
Solution
- Importer
budget_2026.csvavec les trois réglages habituels (UTF-8, virgule, pas de détection automatique), typerMontantBudgeten Nombre décimal avec les paramètres régionaux français. - Relier
Budget[Compte]àPlanComptable[Compte], cardinalité Plusieurs à un, filtre croisé Unique. Le plan comptable filtre maintenant deux tables de faits : un schéma en étoile. - Ajouter les mesures :
Réel Charges = [Total Charges]
Budget Charges = SUM(Budget[MontantBudget])
Variance Charges = [Réel Charges] - [Budget Charges]
Variance Charges % = DIVIDE([Variance Charges], [Budget Charges], 0)
- Mettre en évidence les dépassements : sélectionner le champ
Variance Chargesdans le visuel, Mise en forme conditionnelle → Couleur de police, une règle « supérieure à 0 » en rouge, une règle « inférieure à 0 » en vert.
Résultat attendu
| Compte | Libellé | Réel | Budget | Écart | Écart % |
|---|---|---|---|---|---|
| 601000 | Achats de matières premières | 3 200,50 | 3 000,00 | 200,50 | 6,68 % |
| 606100 | Fournitures non stockables | 1 450,00 | 800,00 | 650,00 | 81,25 % |
| 613000 | Locations | 3 200,00 | 3 000,00 | 200,00 | 6,67 % |
| 621000 | Personnel extérieur | 1 200,00 | −1 200,00 | −100,00 % | |
| 627000 | Services bancaires et assimilés | 185,00 | 185,00 | 0,00 % | |
| 641000 | Rémunérations du personnel | 45 000,00 | 45 000,00 | 0,00 | 0,00 % |
| 645000 | Charges de sécurité sociale | 9 600,00 | 9 600,00 | 0,00 | 0,00 % |
| 661000 | Charges d'intérêts | 850,00 | 900,00 | −50,00 | −5,56 % |
| 681000 | Dotations aux amortissements | 2 100,00 | 2 100,00 | 0,00 | 0,00 % |
| Total | 65 585,50 | 65 600,00 | −14,50 | −0,02 % |
Le total est le chiffre le moins intéressant du tableau. L'écart global vaut −14,50, soit −0,02 % : à ce niveau de lecture, le budget de charges est tenu au centime près. Le détail dit autre chose, et ce sont trois constats de nature différente.
- Un dépassement réel mais petit en valeur absolue. Le compte 606100 dépasse de 650,00, soit +81,25 %. En euros, c'est négligeable devant la masse salariale ; en pourcentage, c'est le seul poste hors de contrôle du périmètre. Un rapport qui ne montre que les euros ne le voit jamais, un rapport qui ne montre que les pourcentages en fait un incident majeur.
- Un budget entièrement non consommé. Le compte 621000 affiche −1 200,00 et −100,00 %. La mesure ne tranche pas entre une prestation qui n'a pas eu lieu et une prestation non encore comptabilisée ; elle pose la question au bon endroit.
- Une dépense hors budget. Le compte 627000 porte 185,00 de réel et aucun budget. Le dénominateur est vide, donc nul. Écrite avec une simple barre oblique, la mesure renverrait une erreur qui contaminerait visuellement tout le tableau. Écrite avec
DIVIDE(…, …, 0), elle renvoie 0,00 %.
Le 0,00 % de la ligne 627000 est un faux zéro : il signifie « non calculable », pas « pas d'écart ». La colonne en euros, elle, affiche bien 185,00. On ne commente jamais une variance sur la seule colonne de pourcentage.
Suite de la série : une table de dates dédiée, marquée comme telle, pour suivre l'exercice mois par mois avec TOTALYTD — et pourquoi aucun cumul ne fonctionne sans elle. Lire Le calendrier qui manque à tout cumul.
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, DIVIDE, ALL) sont disponibles dans les versions actuelles ; les noms de menus peuvent changer au fil des mises à jour mensuelles.