Évitez d’utiliser FILTER en tant qu’argument de filtre
En tant que modélisateur de données, il est courant d’écrire des expressions DAX qui doivent être évaluées dans un contexte de filtre modifié. Par exemple, vous pouvez écrire une définition de mesure pour calculer les ventes pour les « produits à marge élevée ». Nous allons décrire ce calcul plus loin dans cet article.
Note
Cet article est particulièrement pertinent pour les calculs de modèle qui appliquent des filtres aux tables d’importation.
Les fonctions CALCULATE et CALCULATETABLEDAX sont des fonctions importantes et utiles. Ils vous permettent d’écrire des calculs qui suppriment ou ajoutent des filtres ou modifient des chemins de relation. Pour ce faire, transmettez des arguments de filtre, qui sont des expressions booléennes, des expressions de table ou des fonctions de filtre spéciales. Nous allons discuter uniquement des expressions booléennes et de table dans cet article.
Considérez la définition de mesure suivante, qui calcule les ventes de produits rouges à l’aide d’une expression de table. Il remplace tous les filtres qui peuvent être appliqués à la table Product.
Red Sales =
CALCULATE(
[Sales],
FILTER('Product', 'Product'[Color] = "Red")
)
La fonction
Voici une définition de mesure améliorée, qui utilise une expression booléenne au lieu de l’expression de table. La fonction KEEPFILTERSKEEPFILTERSDAX garantit que tous les filtres existants appliqués à la colonne Couleur sont conservés et ne sont pas remplacés.
Red Sales =
CALCULATE(
[Sales],
KEEPFILTERS('Product'[Color] = "Red")
)
Il est recommandé de passer des arguments de filtre en tant qu’expressions booléennes, dans la mesure du possible. Ceci est recommandé car les tables de modèle d’importation sont des magasins de colonnes en mémoire. Ils sont explicitement optimisés pour filtrer efficacement les colonnes de cette façon.
Toutefois, il existe des restrictions qui s’appliquent aux expressions booléennes lorsqu’elles sont utilisées comme arguments de filtre. Voici ces restrictions :
- Impossible de référencer des colonnes à partir de plusieurs tables
- Impossible de référencer une mesure
- Impossible d’utiliser les fonctions de CALCULATE imbriquées
- Impossible d’utiliser des fonctions qui analysent ou retournent une table
Cela signifie que vous devez utiliser des expressions de table pour des exigences de filtre plus complexes.
Considérez maintenant une définition de mesure différente. L’exigence est de calculer les ventes, mais seulement pour les mois qui ont atteint un bénéfice.
Sales for Profitable Months =
CALCULATE(
[Sales],
FILTER(
VALUES('Date'[Month]),
[Profit] > 0
)
)
Dans cet exemple, la fonction FILTER doit être utilisée. C’est parce qu’elle nécessite l’évaluation de la mesure Profit pour éliminer ces mois qui n’ont pas atteint de profit. Il n’est pas possible d’utiliser une mesure dans une expression booléenne lorsqu’elle est utilisée comme argument de filtre.
Recommandations
Pour de meilleures performances, il est recommandé d’utiliser des expressions booléennes comme arguments de filtre, dans la mesure du possible.
Par conséquent, la fonction FILTER ne doit être utilisée que si nécessaire. Vous pouvez l'utiliser pour effectuer des comparaisons complexes entre colonnes à l'aide de filtres. Ces comparaisons de colonnes peuvent impliquer :
- Dispositions
- Autres colonnes
- Utilisation de la fonction ORDAX ou de l’opérateur logique OR (||)
Contenu connexe
- fonctions de filtre (DAX)
- Parcours d’apprentissage : Utiliser DAX dans Power BI Desktop
- Questions ? Essayez de demander à la communauté Power BI
- Avez-vous des suggestions ? Contribuer aux idées d’amélioration de Power BI