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 parSUM,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 implicites | Filtres explicites |
| Viennent du rapport, sans être écrits dans la formule | Sont é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, exploration | Prédicat : Ventes[Région] = "Ouest" ; table : FILTER (...), VALUES (...) ; modificateur : ALL, REMOVEFILTERS, ALLSELECTED, ALLEXCEPT, KEEPFILTERS, USERELATIONSHIP |
| Changent à chaque clic de l'utilisateur | Fixes : 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égion | Client | Montant |
| Ouest | Alice | 100 |
| Ouest | Bruno | 200 |
| Est | Chloé | 300 |
| Est | David | 400 |
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égion | Total Ventes | Ventes Ouest | Ventes Ouest (KEEPFILTERS) |
| Ouest | 300 | 300 | 300 |
| Est | 700 | 300 | (vide) |
| Total | 1 000 | 300 | 300 |
| Visuel par Client | Total Ventes | Ventes Ouest |
| Alice | 100 | 100 |
| Bruno | 200 | 200 |
| Chloé | 300 | (vide) |
| David | 400 | (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> [, … ] ] )| Fonction | Filtres du visuel | Segments et volet Filtres | Usage type |
ALL ( Table ) | Supprimés | Supprimés | % du total général |
ALLSELECTED ( Table ) | Supprimés | Conservés | % du total visible |
ALLEXCEPT ( Table, Colonne ) | Supprimés, sauf la colonne | Supprimé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 ) ) )| Client | Total Ventes | % du total général (ALL) | % du total visible (ALLSELECTED) |
| Alice | 100 | 10,0 % | 16,7 % |
| Bruno | 200 | 20,0 % | 33,3 % |
| Chloé | 300 | 30,0 % | 50,0 % |
| Total | 600 | 60,0 % | 100,0 % |
ALLignore aussi le segment : le dénominateur vaut 1 000.ALLSELECTEDrespecte 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égion | Client | Total Ventes | Total Région | % dans la région |
| Ouest | Alice | 100 | 300 | 33,3 % |
| Ouest | Bruno | 200 | 300 | 66,7 % |
| Est | Chloé | 300 | 700 | 42,9 % |
| Est | David | 400 | 700 | 57,1 % |
| Total | 1 000 | 1 000 | 100,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 :
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.










