Support formation Rapports Power BI

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

FonctionRôleRenvoie
CALCULATEÉvalue une expression dans un contexte de filtre modifiéUne valeur
FILTERParcourt une table et garde les lignes qui respectent une conditionUne table
ALLSupprime tous les filtres d'une table ou d'une colonneUne table (ou un modificateur dans CALCULATE)
ALLEXCEPTSupprime les filtres d'une table, sauf ceux des colonnes nomméesUn modificateur
ALLSELECTEDOublie les filtres du visuel, garde les segmentsUne table (ou un modificateur)
REMOVEFILTERSSupprime des filtres, uniquement dans CALCULATEUn modificateur
KEEPFILTERSAjoute un filtre au lieu de remplacer l'existantUn modificateur
VALUESRenvoie les valeurs visibles dans le contexteUne table
SELECTEDVALUERenvoie la valeur sélectionnée, s'il n'y en a qu'uneUne 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 : % Rouge donne 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 dynamique alimente 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] ), ... ) ou KEEPFILTERS.
  • 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).