Support formation Rapports Power BI

Contextes de ligne et de filtre

En bref

  • Objectifs : distinguer contexte de ligne et contexte de filtre ; identifier les filtres implicites (venus du rapport) et explicites (écrits dans la formule) ; prévoir lequel l'emporte ; choisir entre ALL, ALLSELECTED et ALLEXCEPT pour un pourcentage.
  • Prérequis : « Découvrir DAX ».
  • Niveau : intermédiaire.

Pourquoi ?

La même mesure affiche 1 000 dans une carte, 300 sur la ligne Ouest d'un tableau et 700 sur la ligne Est : son résultat dépend de l'endroit où elle est posée. Pour comprendre un chiffre surprenant, il faut savoir quels filtres arrivent du rapport et lesquels la formule remplace. C'est la question à se poser devant chaque mesure : qui a le dernier mot, le rapport ou la formule ?

Notions clés

Deux contextes d'évaluation

  • Contexte de ligne : DAX sait sur quelle ligne il se trouve. Il existe dans une colonne calculée et dans les fonctions itératives (SUMX, FILTER, ADDCOLUMNS...). Il permet de lire la valeur d'une colonne de la ligne courante, mais il ne filtre aucune donnée.
  • Contexte de filtre : l'ensemble des filtres appliqués au modèle (segments, lignes et colonnes d'un visuel, volet Filtres, filtres de CALCULATE). C'est lui qui restreint les lignes prises en compte par SUM, COUNTROWS, AVERAGE. Il se propage par les relations, du côté « un » vers le côté « plusieurs ».

Le passage de l'un à l'autre, la transition de contexte, fait l'objet de la page « CALCULATE et transition de contexte ».

Filtres implicites et filtres explicites

Une mesure est toujours évaluée dans un contexte de filtre qui combine deux origines.

Filtres implicitesFiltres explicites
Viennent du rapport, sans être écrits dans la formuleSont écrits dans la formule, comme arguments de CALCULATE ou CALCULATETABLE
Segments ; volet Filtres (ce visuel, cette page, toutes les pages) ; lignes, colonnes et axes du visuel (chaque cellule d'un tableau est un filtre) ; filtrage croisé entre visuels, extraction, explorationPrédicat : Ventes[Région] = "Ouest" ; table : FILTER (...), VALUES (...) ; modificateur : ALL, REMOVEFILTERS, ALLSELECTED, ALLEXCEPT, KEEPFILTERS, USERELATIONSHIP
Changent à chaque clic de l'utilisateurFixes : ne dépendent pas des clics

Le jeu de données d'exemple

Table Ventes : Ouest totalise 300, Est 700, le total général vaut 1 000.

RégionClientMontant
OuestAlice100
OuestBruno200
EstChloé300
EstDavid400
Total Ventes = SUM ( Ventes[Montant] )

Ordre de résolution : explicites > implicites

Ventes Ouest = CALCULATE ( [Total Ventes], Ventes[Région] = "Ouest" )

Ventes Ouest (KEEPFILTERS) = CALCULATE ( [Total Ventes], KEEPFILTERS ( Ventes[Région] = "Ouest" ) )
Visuel par RégionTotal VentesVentes OuestVentes Ouest (KEEPFILTERS)
Ouest300300300
Est700300(vide)
Total1 000300300
Visuel par ClientTotal VentesVentes Ouest
Alice100100
Bruno200200
Chloé300(vide)
David400(vide)
  • Même colonne (Région dans le visuel, Région dans la formule) : le filtre explicite remplace le filtre implicite. La ligne Est affiche 300, les ventes de l'Ouest.
  • Colonnes différentes (Client dans le visuel, Région dans la formule) : les deux filtres s'additionnent (intersection). Chloé et David sont dans l'Est, leurs lignes sont vides.
  • KEEPFILTERS : le filtre explicite s'ajoute au filtre existant au lieu de le remplacer. La ligne Est devient vide.
  • Même effet avec un segment : si l'utilisateur choisit Région = Est, une carte [Ventes Ouest] affiche toujours 300.

[Capture : Power BI Desktop, tableau par Région avec Total Ventes et Ventes Ouest, la ligne Est affiche 300]

ALLSELECTED, ALLEXCEPT et ALL

Ces trois modificateurs de CALCULATE choisissent quels filtres du rapport garder.

  • ALLSELECTED supprime les filtres « internes » (lignes, colonnes et axes du visuel) et conserve les filtres « externes » (segments, volet Filtres, filtrage croisé). Il donne le total visible, celui que l'utilisateur lit en bas du tableau. Sans argument, ALLSELECTED () agit sur tout le modèle.
  • ALLEXCEPT supprime tous les filtres appliqués à une table, quelle que soit leur origine, sauf ceux posés sur les colonnes nommées. Si ces colonnes ne sont pas filtrées, il n'y a rien à conserver : on obtient le total général.
  • ALL supprime tous les filtres de la table ou de la colonne, segments compris.

Syntaxes :

ALLSELECTED ( [<tableName> | <columnName> [, <columnName> [, <columnName> [, … ] ] ] ] )

ALLEXCEPT ( <table>, <column> [, <column> [, … ] ] )
FonctionFiltres du visuelSegments et volet FiltresUsage type
ALL ( Table )SupprimésSupprimés% du total général
ALLSELECTED ( Table )SupprimésConservés% du total visible
ALLEXCEPT ( Table, Colonne )Supprimés, sauf la colonneSupprimés, sauf la colonne% dans un groupe (région, catégorie)

Exemple

Pourcentage du total général et du total visible

Un segment Client sélectionne Alice, Bruno et Chloé (David est exclu).

% du total général = DIVIDE ( [Total Ventes], CALCULATE ( [Total Ventes], ALL ( Ventes ) ) )

% du total visible = DIVIDE ( [Total Ventes], CALCULATE ( [Total Ventes], ALLSELECTED ( Ventes ) ) )
ClientTotal Ventes% du total général (ALL)% du total visible (ALLSELECTED)
Alice10010,0 %16,7 %
Bruno20020,0 %33,3 %
Chloé30030,0 %50,0 %
Total60060,0 %100,0 %
  • ALL ignore aussi le segment : le dénominateur vaut 1 000.
  • ALLSELECTED respecte le segment : le dénominateur vaut 600, le total affiché.

[Capture : page de rapport avec le segment Client (David décoché) et le tableau des deux pourcentages]

Part de chaque client dans sa région

Total Région = CALCULATE ( [Total Ventes], ALLEXCEPT ( Ventes, Ventes[Région] ) )

% dans la région = DIVIDE ( [Total Ventes], [Total Région] )
RégionClientTotal VentesTotal Région% dans la région
OuestAlice10030033,3 %
OuestBruno20030066,7 %
EstChloé30070042,9 %
EstDavid40070057,1 %
Total1 0001 000100,0 %

Le filtre Client du visuel est supprimé, le filtre Région est conservé : chaque client est comparé au total de sa région.

[Capture : matrice Région puis Client avec Total Ventes, Total Région et % dans la région]

Les mêmes fonctions sont démontrées une par une, sur un modèle plus riche, dans le PBIP FonctionsFiltre (page « Fonctions de filtre »).

Le diaporama reprend l'ensemble de ces exemples :

Filtres_explicites_implicites_DAX

Pièges et bonnes pratiques

  • ALLEXCEPT sans la colonne dans le visuel : si le visuel n'affiche que le Client (sans la Région), Total Région vaut 1 000 sur chaque ligne, car aucun filtre Région n'est présent. La variante ci-dessous retrouve la région même quand elle n'est pas dans le visuel :
Total Région (robuste) =
CALCULATE ( [Total Ventes], REMOVEFILTERS ( Ventes ), VALUES ( Ventes[Région] ) )
  • ALLSELECTED dans un itérateur : évitez-le à l'intérieur de SUMX, FILTER, etc., son résultat y devient difficile à prévoir. Calculez d'abord le total dans une variable (voir « Itérateurs et variables »).
  • Méthode de débogage : devant un chiffre inattendu, listez les filtres qui arrivent du rapport, puis ceux que la formule remplace, ajoute ou supprime.

À retenir

  • Le contexte de ligne lit une valeur, le contexte de filtre restreint les données.
  • Le rapport filtre (implicite), la formule filtre aussi (explicite). Sur une même colonne, la formule a le dernier mot ; sur des colonnes différentes, les filtres s'additionnent.
  • KEEPFILTERS force l'intersection au lieu du remplacement.
  • ALLSELECTED : j'oublie le visuel, je garde les segments. ALLEXCEPT : j'oublie tout sur la table, sauf la colonne que je nomme.
  • Avant d'écrire un pourcentage, demandez-vous : le pourcentage de quoi ? Du total général, du total visible ou d'un groupe ?

Pour aller plus loin

  • Source (Microsoft Learn, vue d'ensemble de DAX et contextes)
  • Source (Microsoft Learn, types de filtres dans un rapport)
  • Source (Microsoft Learn, CALCULATE)
  • Source (Microsoft Learn, KEEPFILTERS)
  • Source (Microsoft Learn, ALLSELECTED)
  • Source (Microsoft Learn, ALLEXCEPT)
  • Source (SQLBI, arguments de filtre de CALCULATE)
  • Source (SQLBI, ALLSELECTED)
  • Source (SQLBI, ALLEXCEPT ou ALL et VALUES)

Exercice

Mise en pratique DAX, thème 3 | Parts et contributions : part du total général, du total affiché, part dans la catégorie, contribution à la croissance et Pareto.