top of page
Rechercher

KEEPFILTERS dans Power BI : combiner les filtres sans les remplacer

Groupe Kronoscope
8 sept.
4 min de lecture

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é.

Schéma comparant le comportement de CALCULATE avec et sans KEEPFILTERS : à gauche le filtre du visuel Magasin est écrasé par le filtre Web de la mesure, à droite les deux filtres sont croisés et le résultat est vide.




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.


Tableau comparant les deux mesures dans une matrice par canal : sans KEEPFILTERS les trois lignes affichent 1 700 € et leur somme de 5 100 € ne correspond pas au total, avec KEEPFILTERS seule la ligne Web est renseignée et la somme retombe sur le total.



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.


 
 
bottom of page