Modifier le contexte de filtre
Vous pouvez modifier le contexte de filtre dans vos formules à l’aide de la fonction CALCULATE. La syntaxe de la fonction CALCULATE est la suivante :
CALCULATE(<expression>, [[<filter1>], <filter2>]…)
La fonction requiert la transmission d’une expression qui renvoie 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 plus de contrôle lorsque vous modifiez le contexte de filtre.
Lorsque vous disposez de plusieurs filtres, ils sont évalués à l’aide de l’opérateur logique AND. Autrement dit, toutes les conditions doivent être TRUE en même temps.
Remarque
La fonction CALCULATETABLE exécute exactement la même fonctionnalité que la fonction CALCULATE, sauf qu’elle modifie le contexte de filtre appliqué à une expression qui renvoie un objet de 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’expression booléenne
Un filtre d’expression booléenne est une expression renvoyant la valeur est 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 analysant ou renvoyant une table qui comprend des fonctions d’agrégation, comme
SUM.
Pour effectuer les tâches de cet exemple, téléchargez et ouvrez le fichier Adventure Works DW 2020 M06.pbix. Ajoutez ensuite la mesure suivante à la table Sales qui filtre la mesure Revenue à l’aide d’un filtre d’expression booléenne pour les produits rouges :
Revenue Red =
CALCULATE(
[Revenue],
'Product'[Color] = "Red"
)
Ajoutez la mesure Revenue Red au visuel Table qui se trouve sur la Page 1 de l’état.
Dans l’exemple suivant, la mesure suivante filtre la mesure Revenue selon 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 selon les produits coûteux. Les produits coûteux sont ceux dont le prix catalogue est supérieur à 1 000 USD.
Revenue Expensive Products =
CALCULATE(
[Revenue],
'Product'[List Price] > 1000
)
Appliquer des 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 renvoie un objet de table.
En général, la fonction FILTER permet d’appliquer des conditions de filtre complexes, y compris celles qui ne peuvent pas être définies par une expression de filtre booléenne. La fonction FILTER est classée comme une fonction d’itérateur, donc vous transmettez une table, ou une expression de table, et une expression à évaluer pour chaque ligne de cette table.
La fonction FILTER renvoie un objet de table avec exactement la même structure que celle de la table transmise. Ses lignes sont un sous-ensemble des lignes transmises, c’est-à-dire les lignes où l’expression a renvoyé la valeur TRUE.
L’exemple suivant illustre 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 catalogue dépasse le double de son coût standard s’affiche sous la forme d’une ligne de la table filtrée. Par conséquent, la mesure Revenue est évaluée pour tous les produits renvoyé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 permettant d’améliorer l’expérience d’écriture et de lecture. En interne, Microsoft Power BI traduit les expressions de filtre booléennes en expressions de filtre de table, et c’est ainsi qu’il traduit la définition de votre mesure Revenue Red.
Revenue Red =
CALCULATE(
[Revenue],
FILTER(
'Product',
'Product'[Color] = "Red"
)
)
Comportement de filtre
Deux résultats standard possibles se produisent lorsque vous ajoutez des expressions de filtre à la fonction CALCULATE :
- Si les colonnes (ou tables) ne se trouvent pas dans le contexte de filtre, de nouveaux filtres sont ajoutés au contexte de filtre pour évaluer l’expression
CALCULATE. - Si les colonnes (ou tables) ne trouvent déjà dans le contexte de filtre, les filtres existants sont remplacés par les nouveaux pour évaluer l’expression
CALCULATE.
Les exemples suivants montrent comment fonctionne l’ajout d’expressions de filtre à la fonction CALCULATE.
Remarque
Dans chacun des exemples, aucun filtre n’est appliqué au visuel Table.
Comme pour l’activité précédente, la mesure Revenue Red a été ajoutée à un visuel Table qui effectue un regroupement par région et affiche le chiffre d’affaires.
Comme 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 basculement de la première colonne du visuel Table de Region à Color produit un résultat différent, car la colonne Color de la table Product se trouve désormais dans le contexte de filtre.
La formule de la mesure Revenue Red évalue la mesure Revenue en ajoutant un filtre sur la colonne Color (selon la couleur rouge) de la table Product. Dans ce visuel regroupant les données 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 présente la fonction KEEPFILTERS, à savoir une fonction de modification de filtre vous permettant de conserver des filtres au lieu de les remplacer.