Modifier le contexte de filtre

Effectué

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.

Une image montre une table avec trois colonnes : Region, Revenue et Revenue Red. La table affiche 10 lignes et un total.

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.

Une image montre une table avec trois colonnes : Region, Revenue et Revenue Red. La table affiche 10 lignes et un total.

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

Une image montre une table avec trois colonnes : Color, Revenue et Revenue Red. La table affiche 10 lignes et un total. La valeur de Revenue Red est la même pour chaque ligne.

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.