Modifier le contexte de filtre
Vous pouvez utiliser la fonction DAX CALCULATE
pour modifier le contexte de filtre dans vos formules. La syntaxe de la fonction CALCULATE est la suivante :
CALCULATE(<expression>, [[<filter1>], <filter2>]…)
La fonction requiert la transmission d’une expression qui retourne une valeur scalaire et autant de filtres que nécessaire. L’expression peut être une mesure (qui est une expression nommée) ou toute expression qui peut être évaluée dans le contexte de filtre.
Les filtres peuvent être des expressions booléennes ou des expressions de table. Il est également possible de transmettre des fonctions de modification de filtre qui offrent un contrôle supplémentaire quand vous modifiez le contexte de filtre.
Quand vous avez plusieurs filtres, ceux-ci sont évalués à l’aide de l’opérateur logique AND
, ce qui signifie que toutes les conditions doivent être TRUE
en même temps.
Notes
La fonction DAX CALCULATETABLE
exécute exactement les mêmes fonctionnalités que la fonction CALCULATE
, sauf qu’elle modifie le contexte de filtre appliqué à une expression qui retourne un objet table. Dans ce module, les explications et les exemples utilisent la fonction CALCULATE
, mais gardez à l’esprit que ces scénarios peuvent également s’appliquer à la fonction CALCULATETABLE
.
Appliquer des filtres d’expressions booléennes
Un filtre d’expression booléenne est une expression qui prend la valeur TRUE
ou FALSE
. Les filtres booléens doivent respecter les règles suivantes :
- Ils ne peuvent référencer qu’une seule colonne.
- Ils ne peuvent pas référencer des mesures.
- Ils ne peuvent pas utiliser les fonctions qui analysent ou retournent une table qui comprend des fonctions d’agrégation, comme
SUM
.
Dans cet exemple, vous allez créer une mesure. Tout d’abord, téléchargez et ouvrez le fichier Adventure Works DW 2020 M06.pbix. Ensuite, ajoutez à la table Sales la mesure suivante qui filtre la mesure Revenue en utilisant un filtre d’expression booléenne pour les produits rouges.
Revenue Red = CALCULATE([Revenue], 'Product'[Color] = "Red")
Ajoutez la mesure Revenu Red au visuel de table qui se trouve sur la Page 1 du rapport.
Dans l’exemple suivant, la mesure suivante filtre la mesure Revenue en fonction de plusieurs couleurs. Notez l’utilisation de l’opérateur IN
, suivi d’une liste de valeurs de couleur.
Revenue Red or Blue = CALCULATE([Revenue], 'Product'[Color] IN {"Red", "Blue"})
La mesure suivante filtre la mesure Revenue des produits coûteux. Les produits coûteux sont ceux dont le prix est supérieur à 1000 USD.
Revenue Expensive Products = CALCULATE([Revenue], 'Product'[List Price] > 1000)
Appliquer les filtres d’expression de table
Un filtre d’expression de table applique un objet de table en tant que filtre. Il peut s’agir d’une référence à une table de modèle ; toutefois, il est probable qu’une fonction DAX retourne un objet table.
En règle générale, vous allez utiliser la fonction DAX FILTER
pour appliquer des conditions de filtre complexes, notamment celles qui ne peuvent pas être définies par une expression de filtre booléenne. La fonction FILTER
étant classée comme une fonction d’itérateur, vous devez transmettre une table, ou une expression de table, et une expression à évaluer pour chaque ligne de cette table.
La fonction FILTER
retourne un objet table avec exactement la même structure que celle de la table transmise. Ses lignes sont un sous-ensemble des lignes qui ont été passées, c’est-à-dire les lignes où l’expression a été évaluée comme TRUE
.
L’exemple suivant montre une expression de filtre de table qui utilise la fonction FILTER
:
Revenue High Margin Products =
CALCULATE(
[Revenue],
FILTER(
'Product',
'Product'[List Price] > 'Product'[Standard Cost] * 2
)
)
Dans cet exemple, la fonction FILTER
filtre toutes les lignes de la table Product qui se trouvent dans le contexte de filtre. Chaque ligne d’un produit dont le prix dépasse le double du prix standard est affichée sous la forme d’une ligne de la table filtrée. Ainsi, la mesure Revenue est évaluée pour tous les produits retournés par la fonction FILTER
.
Toutes les expressions de filtre transmises à la fonction CALCULATE
sont des expressions de filtre de table. Une expression de filtre booléenne est une notation abrégée pour améliorer l’expérience d’écriture et de lecture. En interne, Microsoft Power BI convertit les expressions de filtre booléennes en expressions de filtre de table, ce qui est sa façon de traduire votre définition de Revenue Red.
Revenue Red =
CALCULATE(
[Revenue],
FILTER(
'Product',
'Product'[Color] = "Red"
)
)
Comportement de filtre
Deux résultats standard possibles se produisent quand vous ajoutez des expressions de filtre à la fonction CALCULATE
:
- Si les colonnes (ou tables) ne sont pas dans le contexte du filtre, de nouveaux filtres sont ajoutés au contexte de filtre pour évaluer l’expression
CALCULATE
. - Si les colonnes (ou les tables) sont déjà dans le contexte de filtre, les filtres existants seront remplacés par les nouveaux filtres pour évaluer l’expression
CALCULATE
.
Les exemples suivants illustrent le fonctionnement de l’ajout d’expressions de filtre à la fonction CALCULATE
.
Notes
Dans chacun des exemples, aucun filtre n’est appliqué au visuel de table.
Comme dans l’activité précédente, la mesure Revenue Red a été ajoutée à un visuel de table qui regroupe par région et affiche le chiffre d’affaires.
Étant donné qu’aucun filtre n’est appliqué sur la colonne Color de la table Product, l’évaluation de la mesure ajoute un nouveau filtre au contexte de filtre. Sur la première ligne, la valeur 2 681 324,79 $ correspond aux produits rouges vendus dans la région australienne.
Le fait de basculer la première colonne du visuel de la table de Region à Color produira un résultat différent, car la colonne Color de la table Product est maintenant dans le contexte de filtre.
La formule de mesure Revenue Red évalue la mesure Revenue en ajoutant un filtre sur la colonne Color (sur rouge) dans la table Product. Par conséquent, dans ce visuel qui regroupe par couleur, la formule de mesure remplace le contexte de filtre par un nouveau filtre.
Ce résultat peut être différent de ce que vous souhaitez. L’unité suivante introduit la fonction DAX KEEPFILTERS
, qui est une fonction de modification de filtre que vous pouvez utiliser pour préserver des filtres au lieu de les remplacer.