Fonction FILTER dans Power BI : filtrer une table en DAX
FILTER parcourt une table ligne par ligne en DAX.
La fonction ne renvoie jamais un nombre : elle renvoie une table. Cette distinction est essentielle pour comprendre son fonctionnement et éviter les erreurs.
Voici comment utiliser FILTER, avec sa syntaxe, des exemples concrets et surtout les situations dans lesquelles il vaut mieux ne pas l’utiliser.
Télécharger notre exercice FILTER en DAX
Le pack contient un classeur de 200 lignes de commandes fictives.
Trois tables sont fournies : Ventes, Produits et Commerciaux.
Cinq mesures sont à construire à l’aide de la fonction FILTER.
La validation s’affiche automatiquement dès que vous saisissez votre résultat.
Les données sont entièrement fictives. Elles servent uniquement de support pédagogique.
FILTER en un exemple : cinq commandes, une condition
Prenons une table de cinq commandes seulement.
La condition est simple : garder les montants supérieurs à 3 000 €.
CMD-1001 : 1 250 € — condition fausse, ligne écartée
CMD-1002 : 4 800 € — condition vraie, ligne conservée
CMD-1003 : 620 € — condition fausse, ligne écartée
CMD-1004 : 3 900 € — condition vraie, ligne conservée
CMD-1005 : 2 100 € — condition fausse, ligne écartée
FILTER teste chaque ligne, l’une après l’autre.
Il conserve deux lignes sur cinq et retourne une table contenant uniquement ces deux lignes.
Cette table ne contient aucun total : elle contient uniquement les lignes qui respectent la condition.
SUMX parcourt ensuite ces deux lignes et additionne leurs montants :
4 800 + 3 900 = 8 700 €
CA grosses lignes =
SUMX (
FILTER ( Ventes, Ventes[Montant] > 3000 ),
Ventes[Montant]
)
Retenez ce point : FILTER prépare la matière, une autre fonction produit le chiffre.
La syntaxe de FILTER
Syntaxe
FILTER ( <table> ; <condition> )
Deux paramètres obligatoires. Une table en sortie, jamais une valeur.
Le premier paramètre : la table parcourue
Ce paramètre accepte une table du modèle de données.
Il accepte aussi toute expression qui renvoie une table.
VALUES ( Ventes[Zone] ) et ALL ( Produits ) sont donc valides.
Le choix de cette table décide du coût de la mesure.
Le second paramètre : la condition testée
La condition est évaluée ligne par ligne, séparément.
Elle renvoie VRAI ou FAUX pour chaque ligne parcourue.
FILTER crée ainsi un contexte de ligne.
C’est ce contexte qui autorise RELATED à l’intérieur de la condition.
La documentation Microsoft le rappelle : FILTER ne s’utilise jamais seul.
Écrite seule dans une mesure, la fonction déclenche une erreur.
Une mesure doit produire une valeur unique, pas une table.
FILTER dans CALCULATE : le piège du filtre écrasé
Ce que CALCULATE fait de votre table
CALCULATE remplace les filtres qui portent sur les mêmes colonnes.
Imaginons un segment de zone posé sur votre page.
L’utilisateur sélectionne la zone Sud. Votre mesure filtre la zone Nord.
Le chiffre affiché sera celui du Nord.
Le segment est ignoré, sans le moindre message d’avertissement.
C’est la première cause de chiffres faux inexpliqués en réunion.
KEEPFILTERS, la version qui ne casse rien
KEEPFILTERS croise les deux filtres au lieu de les remplacer, comme le documente Microsoft.
La sélection de l’utilisateur est alors respectée.
-- Le filtre du segment est écrasé
CA Nord =
CALCULATE ( [CA], FILTER ( Ventes, Ventes[Zone] = "Nord" ) )
-- Le filtre du segment est respecté
CA Nord =
CALCULATE ( [CA], KEEPFILTERS ( Ventes[Zone] = "Nord" ) )Condition simple
Une seule colonne, aucune mesure appelée. Écrivez une expression booléenne : Microsoft la recommande pour les performances.
Condition complexe
Une mesure, deux colonnes ou deux tables. FILTER devient alors la seule écriture possible.
Microsoft publie une page entière sur ce point : éviter FILTER comme argument de filtre.
La raison est technique. Les tables importées sont stockées en colonnes, en mémoire.
Le moteur est optimisé pour filtrer une colonne, pas pour parcourir des lignes.

Les cas où FILTER reste obligatoire
Une expression booléenne connaît des limites précises.
Elle ne peut ni appeler une mesure, ni référencer deux tables.
Dans ces situations, FILTER n’est plus un choix de style.
La condition appelle une mesure
Objectif : le chiffre d’affaires des commerciaux au-dessus de leur objectif.
La condition compare une mesure à une colonne.
Aucune expression booléenne n’accepte cette écriture.
CA au-dessus objectif =
CALCULATE (
[CA],
FILTER ( Commerciaux, [CA] > Commerciaux[Objectif annuel] )
)L’itération porte ici sur cinq lignes de commerciaux.
La condition compare deux colonnes
Objectif : le chiffre d’affaires des lignes vendues sous le prix catalogue.
Le prix de vente est dans Ventes. Le prix catalogue est dans Produits.
RELATED va chercher la valeur dans la table liée.
CA lignes remisées =
CALCULATE (
[CA],
FILTER (
Ventes,
Ventes[Prix unitaire] < RELATED ( Produits[Prix catalogue] )
)
)Un troisième cas existe : un OU logique entre deux tables différentes.
Là encore, seule la version table fonctionne.
Performances : sur quelle table itérer
Filtrer la dimension plutôt que la table de faits
Un itérateur coûte le nombre de lignes qu’il parcourt.
Filtrer la table Produits revient à tester huit lignes.
Filtrer la table Ventes peut revenir à en tester deux millions.
Le résultat est identique. Le temps de réponse ne l’est pas.
-- Lourd : itération sur la table de faits
CALCULATE ( [CA], FILTER ( Ventes, RELATED ( Produits[Prix catalogue] ) > 300 ) )
-- Léger : itération sur la dimension
CALCULATE ( [CA], KEEPFILTERS ( Produits[Prix catalogue] > 300 ) )Une seule itération plutôt que deux FILTER imbriqués
Deux conditions n’exigent pas deux FILTER.
L’opérateur && les combine dans un seul parcours.
-- Deux parcours de table
CALCULATE ( [CA], FILTER ( FILTER ( Ventes, Ventes[Zone] = "Nord" ), Ventes[Montant] > 3000 ) )
-- Un seul parcours
CALCULATE ( [CA], FILTER ( Ventes, Ventes[Zone] = "Nord" && Ventes[Montant] > 3000 ) )Bon à savoir
Avant d’optimiser, mesurez. L’analyseur de performances de Power BI Desktop indique le temps réel de chaque visuel.
Questions fréquentes sur FILTER
Quelle différence entre FILTER et CALCULATE ?
FILTER produit une table filtrée. CALCULATE modifie le contexte d’un calcul.
L’une prépare, l’autre applique. Elles se complètent, elles ne se remplacent pas.
Pourquoi ma mesure renvoie-t-elle une erreur ?
Parce que la mesure se termine sur une table.
Encadrez FILTER par SUMX, COUNTROWS ou CALCULATE.
FILTER peut-il créer une table calculée ?
Oui. La fonction est acceptée dans une table calculée et dans une colonne calculée.
La table obtenue est alors stockée dans le modèle, avec son coût mémoire.
FILTER remplace-t-il un segment ?
Non. Un segment filtre le rapport pour l’utilisateur.
FILTER fige une règle métier dans la mesure elle-même.
Pour aller plus loin, lisez notre fiche sur la fonction DISTINCTCOUNT, qui pose un autre piège classique du DAX.
Un projet Power BI en cours ?
Nos formateurs sont aussi développeurs Power BI. Profitez d’un rendez-vous téléphonique offert pour cadrer votre besoin.



