CALCULATE

s’applique à :colonne calculéetable calculéemesurecalcul visuel

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

Note

Il existe également la fonction CALCULATETABLE. Il effectue exactement la même fonctionnalité, sauf qu’il modifie le contexte de filtre appliqué à une expression qui retourne un objet table .

Syntaxe

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

Paramètres

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

L’expression que vous utilisez comme premier paramètre fonctionne comme une mesure.

Les filtres peuvent être les suivants :

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

Lorsque vous utilisez plusieurs filtres, vous pouvez les évaluer à l’aide de l’opérateur AND logique (&&), ce qui signifie que toutes les conditions doivent être TRUE, ou par l’opérateur logique (||), ce qui signifie que l’une ou l’autre OR condition peut être vraie. Pour plus d’informations, consultez DAX opérateurs logiques>.

Expressions de filtre booléennes

Un filtre d’expression booléen est une expression qui prend la valeur TRUE ou FALSE. Il doit suivre plusieurs règles :

  • Il peut référencer des colonnes à partir d’une table unique.

  • Il ne peut pas référencer des mesures.

  • Elle ne peut pas utiliser une fonction imbriquée CALCULATE .

  • Elle ne peut pas utiliser de fonctions qui analysent ou retournent une table, sauf si vous les transmettez en tant qu’arguments aux fonctions d’agrégation.

  • Il peut 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 table en tant que filtre. Il peut s’agir d’une référence à une table de modèles, mais il est plus probable qu’il s’agit d’une fonction qui retourne un objet table. Vous pouvez utiliser la FILTER fonction pour appliquer des conditions de filtre complexes, y compris celles que vous ne pouvez pas définir par une expression de filtre booléenne.

Fonctions de modificateur de filtre

Les fonctions de modificateur de filtre vous permettent d’ajouter plus que simplement des filtres. Ils vous donnent un contrôle supplémentaire lors de la modification du contexte de filtre.

Fonction But
REMOVEFILTERS Supprimez tous les filtres ou filtres d’une ou plusieurs colonnes d’une table ou de toutes les colonnes d’une seule table.
ALL 1, , ALLEXCEPTALLNOBLANKROW Supprimez les filtres d’une ou plusieurs colonnes ou de toutes les colonnes d’une seule table.
KEEPFILTERS Ajoutez un filtre sans supprimer les filtres existants sur les mêmes colonnes.
USERELATIONSHIP Engagez une relation inactive entre les colonnes associées, auquel cas la relation active devient automatiquement inactive.
CROSSFILTER Modifiez la direction du filtre (des deux à un, ou d’un seul à la fois) ou désactivez une relation.

1 La fonction ALL et ses variantes se comportent en tant que modificateurs de filtre et en tant que fonctions qui retournent des objets de table. Si votre outil prend en charge la fonction, utilisez-le REMOVEFILTERS pour supprimer des filtres.

Valeur de retour

Valeur qui résulte de l’expression.

Remarques

  • Lorsque vous fournissez des expressions de filtre, la CALCULATE fonction modifie le contexte de filtre pour évaluer l’expression. Pour chaque expression de filtre, deux résultats standard existent lorsque l’expression de filtre n’est pas encapsulée dans la KEEPFILTERS fonction :

    • 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.
    • Si les colonnes ou tables se trouvent déjà dans le contexte de filtre, les filtres existants sont remplacés par les nouveaux filtres pour évaluer l’expression CALCULATE .
  • L’utilisation de la CALCULATE fonction sans filtres permet d’obtenir une exigence spécifique. Il fait passer le contexte de ligne au contexte de filtre. Cette transition est requise lorsqu’une expression (et non une mesure de modèle) qui résume les données du 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 lorsqu’une expression dans une fonction d’itérateur est évaluée. Lorsque vous utilisez une mesure de modèle dans le contexte de ligne, la transition de contexte est automatique.

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

Exemples

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 DAX exemple de modèle.

La définition de mesure de table sales suivante produit un résultat de chiffre d’affaires, mais uniquement pour les produits qui ont la couleur bleue.

Blue Revenue =
CALCULATE ( SUM ( Sales[Sales Amount] ), 'Product'[Color] = "Blue" )
Catégorie Montant des ventes Blue Revenue
Accessoires 1 272 057,89 $ 165 406,62 $
Vélos 94 620 526,21 $ 8 374 313,88 $
Vêtement 2 117 613,45 $ 259 488,37 $
Composants 11 799 076,66 $ 803 642,10 $
total 109 809 274,20 $ 9 602 850,97 $

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

La définition de mesure de table sales suivante produit un ratio de ventes par rapport aux ventes pour tous les canaux de vente.

Revenue % Total Channel =
DIVIDE (
    SUM ( Sales[Sales Amount] ),
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        REMOVEFILTERS ( 'Sales Order'[Channel] )
    )
)
Canal Montant des ventes Chiffre d’affaires % Canal total
Internet 29 358 677,22 $ 26.74%
Revendeur 80 450 596,98 $ 73.26%
total 109 809 274,20 $ 100.00%

La fonction DIVIDE divise une expression qui additionne la table SalesSales Amount valeur de colonne (dans le contexte de filtre) par la même expression dans un contexte de filtre modifié. Il s’agit de la fonction CALCULATE qui modifie le contexte de filtre à l’aide de la fonction REMOVEFILTERS, qui est une fonction de modificateur de filtre. Il supprime les filtres de la table commande channel colonne.

L'Customer table calculée ci-dessous classe les clients en classe de fidélité. C’est un scénario très simple : lorsque le chiffre d’affaires produit par le client est inférieur à 2500 $, il est classé comme faible; sinon, ils sont High.

Customer Segment =
IF (
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        ALLEXCEPT ( Customer, Customer[CustomerKey] )
    ) < 2500,
    "Low",
    "High"
)
Segment de client Nombre de clients Montant des ventes
Élevé 4,637 102 670 663,09 $
Bas 13,848 7 138 611,11 $
total 18,485 109 809 274,20 $

Dans cet exemple, le contexte de ligne est converti en contexte de filtre. Il est appelé transition de contexte. La fonction supprime les filtres de toutes les colonnes de table customer Customer à l’exception de la colonne CustomerKey .