L'écart qui refuse de répondre
Sous un rôle de sécurité, un écart au budget non ventilé devient faux sans prévenir. Une mesure qui se tait quand le périmètre est restreint, puis un seul rôle dynamique à la place de quatre : chiffres, formules et pièges.

Dans le cadre de la rubrique « Je partage mes connaissances », je vous propose de corriger le défaut laissé ouvert dans Le rôle qui fausse l'écart au budget. Sous un rôle, le réel se restreint au périmètre du responsable ; le budget, qui n'est pas ventilé par centre de coûts, reste entier. L'écart affiché devient faux, sans message. Le modèle et les fichiers sont les mêmes : grand livre 2025-2026, plan comptable hiérarchisé, quatre centres de coûts, budget mensuel 2026, dans Power BI Desktop.
Deux gestes. D'abord une mesure d'écart qui refuse de répondre plutôt que de répondre faux. Ensuite un seul rôle dynamique à la place de quatre rôles statiques, avec le piège qui l'accompagne.
Ce que la sécurité ne retire pas
Pour qu'une mesure sache qu'elle tourne sous un rôle, il faut qu'elle puisse compter ce qu'elle voit. Le réflexe DAX est de sortir du contexte de filtre avec ALL. C'est justement là que se trouve le point à connaître.
Le cas
Écrire une mesure qui compte les centres de coûts visibles, puis la lire sans rôle et sous le rôle Responsable Siege.
La démarche
- Créer la mesure
Centres dans le périmètre := COUNTROWS ( ALL ( 'dim centre couts' ) ). - La poser sur une carte. Relever la valeur.
- Modélisation > Afficher en tant que, cocher
Responsable Siege. Relever à nouveau. - Revenir à Afficher en tant que > Aucun.
Ce que vous devez obtenir
| Rôle actif | Centres dans le périmètre |
|---|---|
| aucun | 4 |
| Responsable Siege | 1 |
ALL retire les filtres du rapport, pas la sécurité. Le rôle s'applique au modèle avant toute mesure : ce qu'il masque n'existe plus pour le calcul, même avec ALL ou REMOVEFILTERS. C'est précisément ce qui rend la détection possible.
La sécurité au niveau des lignes n'est jamais contournée par une formule. Une mesure peut constater le périmètre, elle ne peut pas l'élargir.
Une mesure d'écart qui se tait
Le cas
Sous le rôle Siège, le rapport affichait un écart de -24 283,53 : le réel du Siège comparé au budget de toute l'entreprise. Écrire une mesure d'écart qui ne répond que lorsque le périmètre est complet.
La démarche
- Écrire la mesure :
Écart net protégé := VAR NbCentresVisibles = COUNTROWS ( ALL ( 'dim centre couts' ) ) VAR NbCentresReference = 4 -- nombre de lignes de dim_centre_couts VAR Ecart = [Résultat net réel] - [Résultat net budget] RETURN IF ( NbCentresVisibles = NbCentresReference, Ecart ) - Poser dans un tableau le réel, le budget et l'écart protégé.
- Lire le tableau sans rôle, puis sous
Responsable Siege, puis sousResponsable Tresorerie. - Ajouter sur la page, en texte visible, la raison du vide : « L'écart au budget n'est pas calculable sur un périmètre restreint : le budget n'est pas ventilé par centre de coûts. »
Ce que vous devez obtenir
| Rôle actif | Résultat net réel | Résultat net budget | Écart net protégé |
|---|---|---|---|
| aucun | -41 785,50 | -33 266,47 | -8 519,03 |
| Responsable Siege | -57 550,00 | -33 266,47 | vide |
| Responsable Tresorerie | vide | -33 266,47 | vide |
Un vide sans explication passe pour une panne. D'où la phrase visible sur la page : le lecteur sait pourquoi l'écart manque, et il sait que ce n'est pas un oubli.
La constante 4 est un raccourci assumé. Si le nombre de centres doit bouger, la bonne version lit ce nombre dans une petite table déconnectée, que le rôle ne filtre pas. Écrire le raccourci et son alternative dans le commentaire de la mesure, c'est ce qui rend un modèle reprenable par un autre.
Cette mesure ne corrige pas le modèle, elle l'empêche de mentir. La vraie correction reste de ventiler le budget par centre de coûts.
Un seul rôle pour tous les responsables
Quatre rôles statiques, c'est quatre rôles à maintenir et quatre affectations à ne pas rater. Un rôle dynamique compare le compte de la personne connectée à une colonne du modèle. Un seul rôle suffit, à une condition : que cette colonne soit renseignée.
Le cas
Remplacer les quatre rôles par un rôle unique, où chaque responsable voit son centre selon son compte de connexion. Vérifier d'abord pourquoi, en l'état des fichiers, cela ne peut pas fonctionner.
La démarche
- Ouvrir
dim_centre_couts.csvet lire la colonne Responsable : les quatre lignes portent « A definir ». Un rôle dynamique posé sur cette colonne ne trouverait personne, et le rapport serait vide pour tout le monde. Personne ne se plaint d'un rapport vide : on suppose qu'il n'y a pas de données. - Alimenter la colonne sans toucher au fichier source. Dans Power Query, sur la requête
dim centre couts: Ajouter une colonne > Colonne conditionnelle, nomméeResponsableUPN, qui renvoie une adresse de connexion pour chaque centre. Fermer et appliquer. - Modélisation > Gérer les rôles > Créer, nommer le rôle
Responsable dynamique, sélectionner dim centre couts et écrire[ResponsableUPN] = USERPRINCIPALNAME (). - Afficher en tant que, cocher
Responsable dynamiqueet Autre utilisateur, saisir l'adresse mappée sur Siège. Relever le résultat net. Recommencer avec les autres adresses, puis avec une adresse qui n'est mappée sur rien. - Une fois le rôle validé, supprimer les quatre rôles statiques - dans le modèle uniquement, les fichiers ne changent pas.
Ce que vous devez obtenir
| Compte simulé | Centre vu | Résultat net réel 2026 |
|---|---|---|
| mappé sur Siège | Siège | -57 550,00 |
| mappé sur Commercial | Commercial | +23 800,00 |
| mappé sur Production | Production | -8 035,50 |
| mappé sur Trésorerie | Trésorerie | vide (aucune écriture de résultat en 2026) |
| non mappé | aucun | vide |
Deux vides qui ne disent pas la même chose
La Trésorerie est un périmètre réel sans activité. Le compte non mappé est un défaut d'habilitation. À l'écran, rien ne les sépare. Une mesure de contrôle suffit à les distinguer :
Message habilitation :=
IF (
ISEMPTY ( 'dim centre couts' ),
"Aucun périmètre n'est attribué à votre compte : contactez le contrôle de gestion."
)
Sous le compte de la Trésorerie, la dimension garde une ligne : pas de message, le vide veut dire « pas d'activité ». Sous un compte non mappé, la dimension est vide : le message s'affiche. Un dispositif de sécurité qu'on ne sait pas tester n'en est pas un ; celui-ci se teste en une minute.
Ce qui ne change pas
- Le rôle dynamique restreint le réel exactement comme les rôles statiques. Le budget n'est toujours pas relié aux centres de coûts : la mesure d'écart protégée reste nécessaire.
- Les utilisateurs qui ont des droits d'édition sur l'espace de travail - Administrateur, Membre, Contributeur - voient tout, rôle ou pas. Les responsables se déclarent comme lecteurs.
- Un mécanisme de sécurité plus sophistiqué ne répare jamais un modèle incomplet. Il en montre les trous, ce qui est déjà beaucoup.
Pour revenir au point de départ - pourquoi un rôle fausse l'écart et où poser son filtre -, l'article précédent : Le rôle qui fausse l'écart au budget.
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 (COUNTROWS, ALL, ISEMPTY, USERPRINCIPALNAME) sont disponibles dans les versions actuelles ; les noms de menus peuvent changer au fil des mises à jour mensuelles.