Fonctions de filtre
En bref
- Objectifs : utiliser CALCULATE avec un filtre booléen ou une table ; supprimer des filtres avec ALL, REMOVEFILTERS, ALLEXCEPT et ALLSELECTED ; combiner des filtres avec KEEPFILTERS et VALUES ; lire une sélection avec SELECTEDVALUE.
- Prérequis : « Contextes de ligne et de filtre », « CALCULATE et transition de contexte ».
- Niveau : intermédiaire.
Pourquoi ?
Les fonctions de filtre sont le cœur de DAX : elles permettent de calculer le montant d'une couleur quelle que soit la couleur affichée, la part d'un produit dans le total, ou d'écrire un titre qui reprend la sélection d'un segment. Cette page passe en revue les neuf fonctions du PBIP de démonstration FonctionsFiltre, chacune sur sa propre page de rapport.
Notions clés
Le PBIP FonctionsFiltre
- Modèle : Ventes (400 lignes, 2024 et 2025), reliée à Produit (Produit, Couleur, Categorie), Geographie (Pays, Continent) et Calendrier (table de dates marquée).
- Mesure de base :
Montant vente, somme de la colonne Ventes[Montant]. - Une page par fonction : à gauche, ce que fait la fonction ; au centre, deux matrices comparent la mesure de base, la mesure filtrée et un pourcentage ; à droite, des segments Pays et Couleur et un tableau des catégories pour tester les filtres externes ; en bas, la formule et son explication.
- Les mesures sont rangées par dossier d'affichage, de
0. Baseà9. SELECTEDVALUE.
Montant vente = SUM ( Ventes[Montant] )[Capture : PBIP FonctionsFiltre, page CALCULATE, avec les deux matrices, les segments Pays et Couleur et la formule en bas de page]
Les neuf fonctions en un tableau
| Fonction | Rôle | Renvoie |
| CALCULATE | Évalue une expression dans un contexte de filtre modifié | Une valeur |
| FILTER | Parcourt une table et garde les lignes qui respectent une condition | Une table |
| ALL | Supprime tous les filtres d'une table ou d'une colonne | Une table (ou un modificateur dans CALCULATE) |
| ALLEXCEPT | Supprime les filtres d'une table, sauf ceux des colonnes nommées | Un modificateur |
| ALLSELECTED | Oublie les filtres du visuel, garde les segments | Une table (ou un modificateur) |
| REMOVEFILTERS | Supprime des filtres, uniquement dans CALCULATE | Un modificateur |
| KEEPFILTERS | Ajoute un filtre au lieu de remplacer l'existant | Un modificateur |
| VALUES | Renvoie les valeurs visibles dans le contexte | Une table |
| SELECTEDVALUE | Renvoie la valeur sélectionnée, s'il n'y en a qu'une | Une valeur |
Exemple
CALCULATE : remplacer un filtre
Montant vente Rouge = CALCULATE ( [Montant vente], Produit[Couleur] = "Rouge" )
% Rouge = DIVIDE ( [Montant vente Rouge], [Montant vente] )- Le filtre Couleur du visuel (lignes Noir, Bleu...) est remplacé par Rouge : chaque ligne de couleur affiche le montant du rouge.
- Le filtre Pays est conservé, car il porte sur une autre colonne :
% Rougedonne la part du rouge dans chaque pays. - À tester : choisissez une couleur dans le segment, la mesure affiche toujours le rouge.
FILTER : une condition ligne par ligne
Montant grosses ventes = CALCULATE ( [Montant vente], FILTER ( Ventes, Ventes[Montant] >= 1000 ) )- FILTER parcourt la table Ventes, déjà filtrée par le contexte, et ne garde que les ventes d'au moins 1 000.
- Ici, le filtre booléen
CALCULATE ( [Montant vente], Ventes[Montant] >= 1000 )donne le même résultat, plus rapidement. Réservez FILTER aux conditions sur une mesure ou sur plusieurs colonnes.
ALL : supprimer tous les filtres d'une table
Montant vente ALL Produit = CALCULATE ( [Montant vente], ALL ( Produit ) )
% ALL Produit = DIVIDE ( [Montant vente], [Montant vente ALL Produit] )ALL ( Produit ) supprime les filtres Couleur et Catégorie, dans le visuel comme dans les segments. Le filtre Pays (table Geographie) n'est pas touché : choisissez une couleur dans le segment, le pourcentage par pays baisse.
ALLEXCEPT : tout supprimer sauf une colonne
Montant vente ALLEXCEPT Couleur = CALCULATE ( [Montant vente], ALLEXCEPT ( Produit, Produit[Couleur] ) )Tous les filtres de Produit sont supprimés (comme le filtre Catégorie), sauf celui sur Couleur s'il est présent dans le visuel ou dans le segment. Si la couleur n'est pas filtrée, on obtient le total général.
ALLSELECTED : le total visible
Montant vente ALLSELECTED = CALCULATE ( [Montant vente], ALLSELECTED ( Produit ) )
% ALLSELECTED = DIVIDE ( [Montant vente], [Montant vente ALLSELECTED] )Les filtres apportés par les lignes de la matrice sont supprimés, la sélection du segment Couleur et du tableau des catégories est conservée : choisissez deux couleurs, le pourcentage porte sur ces deux couleurs.
REMOVEFILTERS : effacer un filtre précis
Montant vente toutes couleurs = CALCULATE ( [Montant vente], REMOVEFILTERS ( Produit[Couleur] ) )
% de la couleur = DIVIDE ( [Montant vente], [Montant vente toutes couleurs] )- REMOVEFILTERS ne renvoie pas de table : elle s'utilise uniquement comme modificateur de CALCULATE, où elle est l'équivalent plus lisible de ALL.
- Seul le filtre Couleur est supprimé ; le filtre Catégorie est conservé, chaque couleur est comparée au total de sa catégorie.
- Sans argument,
REMOVEFILTERS ()supprime tous les filtres du modèle.
KEEPFILTERS : ajouter au lieu de remplacer
Montant Rouge KEEPFILTERS = CALCULATE ( [Montant vente], KEEPFILTERS ( Produit[Couleur] = "Rouge" ) )Montant vente Rouge affiche le montant du rouge sur toutes les lignes de couleur ; Montant Rouge KEEPFILTERS n'affiche une valeur que sur la ligne Rouge. Sur la ligne Noir, le filtre devient « Noir ET Rouge » : aucune vente, la cellule est vide.
[Capture : PBIP FonctionsFiltre, page KEEPFILTERS, matrice par couleur avec Montant vente Rouge et Montant Rouge KEEPFILTERS]
VALUES : les valeurs visibles
Nb couleurs = COUNTROWS ( VALUES ( Produit[Couleur] ) )
Montant catégorie (VALUES) = CALCULATE ( [Montant vente], REMOVEFILTERS ( Produit ), VALUES ( Produit[Categorie] ) )- VALUES renvoie les valeurs distinctes d'une colonne dans le contexte de filtre actuel (y compris la valeur vide ajoutée pour les lignes sans correspondance ; DISTINCT ne l'ajoute pas).
- Dans CALCULATE,
VALUES ( Produit[Categorie] )est évaluée dans le contexte d'origine : elle rétablit la ou les catégories visibles après REMOVEFILTERS. C'est la variante robuste de ALLEXCEPT.
SELECTEDVALUE : lire une sélection
Couleur sélectionnée = SELECTEDVALUE ( Produit[Couleur], "Plusieurs couleurs" )
Couleur filtrée ? = IF ( ISFILTERED ( Produit[Couleur] ), "Oui", "Non" )
Titre dynamique = "Ventes de la couleur : " & [Couleur sélectionnée]- SELECTEDVALUE renvoie la valeur quand une seule est visible, sinon la valeur de remplacement (ou BLANK). C'est un raccourci de
IF ( HASONEVALUE ( col ), VALUES ( col ), remplacement ). - ISFILTERED indique si la colonne est filtrée directement.
Titre dynamiquealimente une carte ou le titre d'un visuel (voir Rendre le rapport dynamique en partie 4).
[Capture : PBIP FonctionsFiltre, page SELECTEDVALUE, carte affichant « Ventes de la couleur : Rouge » après sélection dans le segment]
Pièges et bonnes pratiques
- Préférez le filtre booléen à FILTER sur une table entière :
FILTER ( Ventes, ... )parcourt toutes les lignes et filtre sur toutes les colonnes de la table. Si une condition sur une table est vraiment nécessaire, filtrez une colonne :FILTER ( ALL ( Produit[Couleur] ), ... )ouKEEPFILTERS. - ALLEXCEPT dépend du visuel : si la colonne conservée n'est pas affichée ni filtrée, vous obtenez le total général. Préférez
REMOVEFILTERS ( Table ), VALUES ( Table[Colonne] ); pour plusieurs colonnes d'une même table,SUMMARIZE ( Table, Table[Col1], Table[Col2] ); pour des colonnes de tables différentes,CROSSJOIN ( VALUES (...), VALUES (...) ). - REMOVEFILTERS plutôt que ALL dans CALCULATE : le résultat est le même, l'intention est plus claire.
- SELECTEDVALUE plutôt que VALUES pour lire une sélection : VALUES provoque une erreur si plusieurs valeurs sont visibles et que le résultat est attendu comme une valeur unique.
À retenir
- CALCULATE remplace le filtre de la même colonne et conserve les autres.
- ALL, REMOVEFILTERS, ALLEXCEPT et ALLSELECTED suppriment des filtres, chacun avec sa portée.
- KEEPFILTERS transforme le remplacement en intersection.
- VALUES rétablit les valeurs visibles ; SELECTEDVALUE lit une sélection unique.
- Un filtre booléen sur une colonne est plus rapide qu'un FILTER sur une table.
Pour aller plus loin
- Source (Microsoft Learn, fonctions de filtre)
- Source (Microsoft Learn, CALCULATE)
- Source (Microsoft Learn, REMOVEFILTERS)
- Source (Microsoft Learn, SELECTEDVALUE)
- Source (Microsoft Learn, ISFILTERED)
- Source (Microsoft Learn, éviter FILTER comme argument de filtre)
- Source (SQLBI, ALLEXCEPT ou ALL et VALUES)
- Source (SQLBI, ALLSELECTED)
Exercice
Mise en pratique DAX, thème 3 | Parts et contributions et thème 8 | Textes et titres dynamiques (SELECTEDVALUE, CONCATENATEX).