KEEPFILTERS dans Power BI : combiner les filtres sans les remplacer
KEEPFILTERS est un modificateur de filtre du langage DAX. Il permet de modifier le comportement de CALCULATE lorsqu’un filtre existe déjà.
Par défaut, CALCULATE remplace le filtre existant sur la colonne concernée. Avec KEEPFILTERS, les deux filtres sont appliqués simultanément : seules les valeurs qui respectent les deux filtres sont conservées.
Cette différence, simple en apparence, est essentielle pour comprendre certains résultats de calcul dans Power BI.
Télécharger l'exercice sur KEEPFILTERS
Le pack est gratuit et ne demande aucune inscription.
Il contient tout ce qu'il faut pour refaire la démonstration.
Un classeur Excel avec la table source et huit questions corrigées.
Un fichier texte contenant les six mesures DAX de l'article.
Un onglet Exemple qui reprend exactement les cinq lignes ci-dessus.
La validation s'affiche automatiquement dès que vous répondez.
Les données du classeur sont fictives. Elles servent uniquement à l'exercice.
Ce que fait KEEPFILTERS exactement
Syntaxe et paramètre
Syntaxe
KEEPFILTERS ( <expression> )
expression : la condition de filtre à appliquer.
La fonction prend un seul paramètre.
Ce paramètre est une expression de filtre.
Il s'agit d'une condition booléenne ou d'une expression de table.
KEEPFILTERS ne s'utilise que dans CALCULATE ou CALCULATETABLE.
Employée seule, elle n'a aucun usage exploitable.
Remplacer ou croiser : la seule différence à retenir
La documentation Microsoft est explicite sur ce point.
Les filtres de CALCULATE remplacent le contexte, alors que KEEPFILTERS y ajoute ses filtres.
L'intersection des deux jeux de filtres devient le nouveau contexte d'évaluation.
Attention : cette règle ne vaut que pour les colonnes citées dans le filtre.
Les filtres portant sur d'autres colonnes restent actifs dans tous les cas.
Si ce mécanisme ne vous parle pas encore, relisez d'abord notre article sur la fonction CALCULATE.
Exemple 1 :
Voici cinq ventes réparties sur trois canaux.
Client | Canal | CA |
Client A | Web | 1 200 € |
Client B | Magasin | 800 € |
Client C | Web | 500 € |
Client D | Revendeur | 1 500 € |
Client E | Magasin | 900 € |
La mesure suivante calcule le chiffre d’affaires du canal Web.
CA Web =
CALCULATE (
SUM ( Ventes[CA] ),
Ventes[Canal] = "Web"
)Plaçons-la dans une matrice, avec le canal en lignes.
Sur la ligne Magasin, le visuel applique déja un filtre Canal = "Magasin". Mais la mesure demande à CALCULATE d'appliquer Canal = "Web".
Comme les deux filtres portent sur la même colonne, CALCULATE remplace le filtre Magasin par le filtre Web.
Client | Canal | CA | Retenu ? |
Client A | Web | 1 200 € | ✓ |
Client B | Magasin | 800 € | ✗ |
Client C | Web | 500 € | ✓ |
Client D | Revendeur | 1 500 € | ✗ |
Client E | Magasin | 900 € | ✗ |
Total | 1 700 € |
La ligne Magasin affiche 1 700 €.
C'est le chiffre d'affaires du Web, pas celui du Magasin.
Le filtre posé par le visuel a tout simplement été remplacé.

La démonstration : avec KEEPFILTERS
La même mesure, avec KEEPFILTERS
CA Web KF =CALCULATE ( SUM ( Ventes[CA] ), KEEPFILTERS ( Ventes[Canal] = "Web" ) )Reprenons la ligne Magasin de la même matrice.
Client | Canal | CA | Retenu ? |
Client A | Web | 1 200 € | ✗ |
Client B | Magasin | 800 € | ✗ |
Client C | Web | 500 € | ✗ |
Client D | Revendeur | 1 500 € | ✗ |
Client E | Magasin | 900 € | ✗ |
Total | vide |
Aucune vente n'est à la fois Magasin et Web.
Le résultat est vide, donc la ligne disparaît du visuel.
Ce comportement surprend, mais il est juste.
Le symptôme qui se repère en trois secondes
Sans KEEPFILTERS, les trois lignes de la matrice affichent la même valeur.
Leur somme atteint 5 100 €, pour un total affiché de 1 700 €.
Une somme de lignes qui ignore le total signale toujours un filtre écrasé.
Ce contrôle vous évitera des heures de recherche inutiles.

Quand KEEPFILTERS change vraiment quelque chose
KEEPFILTERS n'agit que dans une situation précise.
La colonne filtrée par la mesure doit déjà être filtrée ailleurs.
En lignes ou en colonnes d'un visuel.
Dans un segment, un filtre de page ou un filtre de rapport.
Sans cette condition, les deux écritures donnent le même résultat.
Dans une carte isolée, ajouter KEEPFILTERS ne change strictement rien.
Voilà pourquoi le problème passe souvent inaperçu pendant le développement.
Il apparaît le jour où un utilisateur croise la mesure avec un segment.
Bon à savoir
Une mesure filtrée sur une colonne peut être posée dans n'importe quel visuel. Vous ne maîtrisez pas les croisements que vos lecteurs feront. Écrire KEEPFILTERS par défaut protège vos chiffres.
Les pièges rencontrés en production
Le filtre portant sur plusieurs valeurs
CA Web+Rev KF =CALCULATE ( SUM ( Ventes[CA] ), KEEPFILTERS ( Ventes[Canal] IN { "Web", "Revendeur" } ) )Sur la ligne Revendeur, l'intersection ne garde que Revendeur.
Sur la ligne Web, elle ne garde que Web.
Sur la ligne Magasin, l'intersection est vide.
Beaucoup attendent la somme des deux canaux sur chaque ligne. C'est une erreur.
La ligne masquée, le total et DirectQuery
Un résultat vide masque la ligne concernée dans le visuel.
Le total, lui, continue d'être calculé et reste affiché.
Rien d'anormal : la ligne de total n'est filtrée par aucun canal.
Dernier point : KEEPFILTERS n'est pas pris en charge en mode DirectQuery.
Cette restriction vise les colonnes calculées et les règles de sécurité au niveau des lignes.
KEEPFILTERS, ALL et REMOVEFILTERS : ne pas confondre
Ces trois fonctions agissent sur le contexte de filtre, dans des directions opposées.
Fonction | Effet sur le filtre existant | Usage typique |
KEEPFILTERS | Le conserve et le croise avec le nouveau filtre | Filtrer sans écraser l'axe du visuel |
ALL | Le supprime, et renvoie une table | Calculer un pourcentage du total |
REMOVEFILTERS | Le supprime, sans renvoyer de table | Même usage que ALL, écriture plus lisible |
Retenez la logique : une fonction ajoute, les deux autres enlèvent.
En résumé
CALCULATE remplace. KEEPFILTERS croise. Tout le reste en découle.
Ce qu'il faut retenir
CALCULATE remplace le filtre existant sur la colonne qu'il cite.
KEEPFILTERS croise le nouveau filtre avec celui qui est déjà en place.
Le problème n'apparaît que si la colonne filtrée est aussi filtrée ailleurs.
Une somme de lignes différente du total trahit un filtre écrasé.
Un résultat vide masque la ligne, ce qui est le comportement attendu.
La meilleure façon d'ancrer cette règle reste de la manipuler vous-même.
Le classeur d'exercices vous attend, avec d'autres packs sur notre page exercices Power BI.



