CALCULATE

S’applique à :Colonne calculéeTable calculéeMesureCalcul visuel

Évalue une expression dans un contexte de filtre modifié.

Notes

Vous avez également la fonction CALCULATETABLE. Elle opère exactement de la même façon, sauf qu’elle modifie le contexte de filtre appliqué à une expression qui retourne un objet de table.

Syntaxe

CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])

Paramètres

Terme Définition
expression Expression à évaluer.
filter1, filter2, etc. (Facultatif) Expressions booléennes ou de table qui définissent des filtres ou des fonctions de modification de filtre.

L’expression utilisée comme premier paramètre équivaut essentiellement à une mesure.

Exemples de filtres :

  • Expressions de filtre booléennes
  • Expressions de filtre de table
  • Fonctions de modification de filtre

Lorsqu’il existe plusieurs filtres, ils peuvent être évalués avec l’opérateur logique AND (&&), ce qui signifie que toutes les conditions doivent être TRUE, ou avec l’opérateur logique OR (||), ce qui signifie que l’une des conditions peut être TRUE.

Expressions de filtre booléennes

Un filtre d’expression booléenne est une expression qui prend la valeur TRUE ou FALSE. Ces filtres doivent respecter plusieurs règles :

  • Ils peuvent faire référence aux colonnes d’une seule table.
  • Ils ne peuvent pas référencer des mesures.
  • Ils ne peuvent pas utiliser une fonction CALCULATE imbriquée.

Depuis la version de septembre 2021 de Power BI Desktop, les conditions suivantes s’appliquent également :

  • Ils ne peuvent pas utiliser les fonctions qui analysent ou retournent une table, sauf s’ils sont passés en tant qu’arguments aux fonctions d’agrégation.
  • Ils peuvent contenir une fonction d’agrégation qui retourne une valeur scalaire. Par exemple,
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Expression de filtre de table

Un filtre d’expression de table applique un objet de table en tant que filtre. Vous pouvez avoir une référence à une table de modèle, mais il s’agit plus vraisemblablement d’une fonction qui retourne un objet de table. Vous pouvez utiliser la fonction FILTER pour appliquer des conditions de filtre complexes, comme celles qui ne peuvent pas être définies par une expression de filtre booléenne.

Fonctions de modification de filtre

Les fonctions de modification de filtre vous permettent d’effectuer des actions qui vont au-delà du simple ajout de filtres. Elles vous offrent davantage de contrôle lors de la modification du contexte de filtre.

Fonction Objectif
REMOVEFILTERS Supprimer tous les filtres ou ceux d’une ou plusieurs colonnes d’une table ou de toutes les colonnes d’une seule table.
ALL1, ALLEXCEPT, ALLNOBLANKROW Supprimer les filtres d’une ou plusieurs colonnes ou de toutes les colonnes d’une seule table.
KEEPFILTERS Ajouter un filtre sans supprimer les filtres existants sur les mêmes colonnes.
USERELATIONSHIP Engager une relation inactive entre des colonnes associées, auquel cas la relation active devient automatiquement inactive.
CROSSFILTER Modifier la direction du filtre (des deux directions à une direction ou vice-versa) ou désactiver une relation.

1 La fonction ALL et ses variantes se comportent à la fois comme des modificateurs de filtre et comme des fonctions qui retournent des objets de table. Si la fonction REMOVEFILTERS est prise en charge par votre outil, il est préférable de l’utiliser pour supprimer des filtres.

Valeur renvoyée

Valeur résultant de l’expression.

Notes

  • Quand des expressions de filtre sont fournies, la fonction CALCULATE modifie le contexte de filtre pour évaluer l’expression. Pour chaque expression de filtre, il existe deux résultats standard possibles quand l’expression de filtre n’est pas wrappée dans la fonction KEEPFILTERS :

    • 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.
    • Si les colonnes (ou tables) sont déjà dans le contexte du filtre, les filtres existants sont remplacés par les nouveaux filtres pour évaluer l’expression CALCULATE.
  • La fonction CALCULATE utilisée sans filtres répond à une exigence spécifique. Elle effectue la transition du contexte de ligne au contexte de filtre. Elle est obligatoire quand une expression (autre qu’une mesure de modèle) qui synthétise des données de modèle doit être évaluée dans le contexte de ligne. Ce scénario peut se produire dans une formule de colonne calculée ou lors de l’évaluation d’une expression dans une fonction d’itérateur. Notez que lorsqu’une mesure de modèle est utilisée dans le contexte de ligne, la transition du contexte est automatique.

  • Cette fonction n’est pas prise en charge pour une utilisation en mode DirectQuery quand elle est utilisée dans des colonnes calculées ou des règles de sécurité au niveau des lignes (RLS).

Exemples

La définition de mesure pour la table Sales suivante produit un résultat sous forme de chiffre d’affaires, mais uniquement pour les produits bleus.

Les exemples de cet article peuvent être utilisés avec l'exemple de modèle Adventure Works DW 2020 Power BI Desktop. Pour obtenir le modèle, consultez Exemple de modèle DAX.

Blue Revenue =
CALCULATE(
    SUM(Sales[Sales Amount]),
    'Product'[Color] = "Blue"
)
Category Sales Amount Chiffre d’affaires des produits bleus
Accessories 1 272 057,89 US$ 165 406,62 US$
Bikes 94 620 526,21 US$ 8 374 313,88 US$
Clothing 2 117 613,45 US$ 259 488,37 US$
Composants 11 799 076,66 $ 803 642,10 US$
Total 109 809 274,20 US$ 9 602 850,97 US$

La fonction CALCULATE évalue la somme de la colonne Sales Amount de la table Sales dans un contexte de filtre modifié. Un nouveau filtre est ajouté à la colonne Color de la table Product, ou le filtre remplace tout filtre déjà appliqué à la colonne.

La définition de mesure pour la table Sales suivante produit le pourcentage des ventes par rapport au total de tous les canaux de vente.

Canal Sales Amount % des ventes par rapport au total
Internet 29 358 677,22 $ 26,74 %
Reseller 80 450 596,98 $ 73,26 %
Total 109 809 274,20 US$ 100,00 %
Revenue % Total Channel =
DIVIDE(
    SUM(Sales[Sales Amount]),
    CALCULATE(
        SUM(Sales[Sales Amount]),
        REMOVEFILTERS('Sales Order'[Channel])
    )
)

La fonction DIVIDE divise une expression qui calcule la somme des valeurs de la colonne Sales Amount de la table Sales (dans le contexte de filtre) par la même expression dans un contexte de filtre modifié. C’est la fonction CALCULATE qui modifie le contexte de filtre en utilisant la fonction REMOVEFILTERS, qui est une fonction de modification de filtre. Elle supprime les filtres de la colonne Channel de la table Sales Order.

La définition de colonne calculée de la table Customer suivante classifie les clients dans une classe de fidélité. Ce scénario est très simple : Quand le chiffre d’affaires produit par le client est inférieur à 2 500 US$, il est classifié dans la classe Low ; sinon, il est classifié dans la classe High.

Customer Segment =
IF(
    CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
    "Low",
    "High"
)

Dans cet exemple, le contexte de ligne est converti en contexte de filtre. On parle dans ce cas de transition de contexte. La fonction ALLEXCEPT supprime les filtres de toutes les colonnes de la table Customer, à l’exception de la colonne CustomerKey.

Contexte de filtre
Contexte de ligne
CALCULATETABLE, fonction
Fonctions de filtrage