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

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.

Trois cartes comparées : sans rôle, quatre centres visibles et un écart net protégé de -8 519,03 ; sous les rôles Responsable Siege et Responsable Tresorerie, un seul centre visible et un écart net protégé vide
Le même budget de -33 266,47 dans les trois cas. La mesure protégée ne calcule l'écart que lorsque le périmètre est complet ; ailleurs, elle se tait.

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

  1. Créer la mesure Centres dans le périmètre := COUNTROWS ( ALL ( 'dim centre couts' ) ).
  2. La poser sur une carte. Relever la valeur.
  3. Modélisation > Afficher en tant que, cocher Responsable Siege. Relever à nouveau.
  4. Revenir à Afficher en tant que > Aucun.

Ce que vous devez obtenir

Rôle actifCentres dans le périmètre
aucun4
Responsable Siege1

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

  1. É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 )
  2. Poser dans un tableau le réel, le budget et l'écart protégé.
  3. Lire le tableau sans rôle, puis sous Responsable Siege, puis sous Responsable Tresorerie.
  4. 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 actifRésultat net réelRésultat net budgetÉcart net protégé
aucun-41 785,50-33 266,47-8 519,03
Responsable Siege-57 550,00-33 266,47vide
Responsable Tresorerievide-33 266,47vide

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

  1. Ouvrir dim_centre_couts.csv et 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.
  2. Alimenter la colonne sans toucher au fichier source. Dans Power Query, sur la requête dim centre couts : Ajouter une colonne > Colonne conditionnelle, nommée ResponsableUPN, qui renvoie une adresse de connexion pour chaque centre. Fermer et appliquer.
  3. Modélisation > Gérer les rôles > Créer, nommer le rôle Responsable dynamique, sélectionner dim centre couts et écrire [ResponsableUPN] = USERPRINCIPALNAME ().
  4. Afficher en tant que, cocher Responsable dynamique et 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.
  5. 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

Tableau des comptes simulés : mappé sur Siège -57 550,00, sur Commercial +23 800,00, sur Production -8 035,50, sur Trésorerie vide (pas d'activité), compte non mappé vide (pas de droit)
Deux vides identiques à l'écran. L'un est un centre sans écriture en 2026, l'autre un compte sans habilitation : le rapport doit les distinguer.
Compte simuléCentre vuRésultat net réel 2026
mappé sur SiègeSiège-57 550,00
mappé sur CommercialCommercial+23 800,00
mappé sur ProductionProduction-8 035,50
mappé sur TrésorerieTrésorerievide (aucune écriture de résultat en 2026)
non mappéaucunvide

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.