Effectuer une transition de contexte
Que se passe-t-il lorsqu’une expression de mesure ou une mesure est é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.
Dans l’exemple suivant, vous allez ajouter une colonne calculée à la table Customer (Client) pour classer les clients dans un catégorie de fidélité. Le scénario est simple : si le revenu produit par le client est inférieur à 2 500 $, le client est classé dans la catégorie Low (Faible) ; sinon, il est classé dans la catégorie High (Élevé).
Customer Segment =
VAR CustomerRevenue = SUM(Sales[Sales Amount])
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Sur la Page 4 du rapport, ajoutez la colonne Customer Segment (Segment de clientèle) comme légende du graphique à secteurs.
Notez qu’il n’existe qu’une seule valeur Customer Segment. La raison est que la formule de colonne calculée produit un résultat incorrect : à chaque client est attribuée la valeur High car l’expression SUM(Sales[Sales Amount])
n’est pas évaluée dans un contexte de filtre. Par conséquent, chaque client est évalué sur la somme de toutes les valeurs de la colonne Sales Amount (Montant de ventes) de la table Sales (Ventes).
Pour forcer l’évaluation de l’expression SUM(Sales[Sales Amount])
pour chaque client, une transition de contexte est nécessaire pour appliquer les valeurs de la colonne de contexte de la ligne au contexte de filtre. Vous pouvez effectuer cette transition à l’aide de la fonction CALCULATE
sans transmettre d’expressions de filtre.
Modifiez la définition de colonne calculée afin qu’elle produise le résultat correct.
Customer Segment =
VAR CustomerRevenue = CALCULATE(SUM(Sales[Sales Amount]))
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Dans le graphique à secteurs, ajoutez la nouvelle colonne calculée au puits Legend et vérifiez que deux segments à secteurs s’affichent désormais.
Dans ce cas, la fonction CALCULATE
applique les valeurs de contexte de ligne en tant que filtres, appelés transition de contexte. Pour être exact, le processus ne fonctionne pas vraiment de cette façon quand une colonne unique se trouve dans la table. Lorsqu’une colonne unique se trouve dans la table, il vous suffit d’appliquer un filtre à cette colonne pour que la transition se produise. Dans ce cas, Power BI applique un filtre sur la colonne CustomerKey pour la valeur dans le contexte de la ligne.
Si vous référencez des mesures dans une expression qui est évaluée dans le contexte de ligne, la transition de contexte est automatique. Ainsi, vous n’avez pas besoin de transmettre des références de mesure à la fonction CALCULATE
.
Modifiez la définition de colonne calculée, qui fait référence à la mesure Revenue, et notez qu’elle continue à produire le résultat correct.
Customer Segment =
VAR CustomerRevenue = [Revenue]
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
À présent, vous pouvez terminer la formule de la mesure Sales Commission. Pour générer un total, vous devez utiliser une fonction d’itérateur pour effectuer une itération sur toutes les régions dans le contexte de filtre. L’expression de la fonction itérateur doit utiliser la fonction CALCULATE
pour faire la transition du contexte de ligne vers le contexte de filtre. Notez qu’il n’est plus nécessaire de tester si une seule valeur de la colonne Country (Pays) dans la table Sales Territory (Secteur de vente) se trouve dans le contexte de filtre, car on sait qu’elle filtre sur un seul pays (car elle itère au sein des régions dans le contexte de filtre et qu’une région appartient à un seul pays).
Basculez vers la Page 3 du rapport, puis modifiez la définition de mesure Sales Commission (Commission des ventes) pour utiliser la fonction d’itérateur SUMX
:
Sales Commission =
SUMX(
VALUES('Sales Territory'[Region]),
CALCULATE(
[Revenue]
* IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
)
Le visuel de table affiche à présent un total Sales Commission pour toutes les régions.