Eseguire la transizione del contesto
Che cosa succede quando una misura o un'espressione di misura viene valutata entro un contesto di riga? Questo scenario può verificarsi in una formula di colonna calcolata o quando viene valutata un'espressione in una funzione iteratore.
Nell'esempio seguente verrà aggiunta una colonna calcolata nella tabella Customer per classificare i clienti in una classe relativa alla fedeltà. Lo scenario è semplice: quando i ricavi prodotti dal cliente sono inferiori a $2500, il cliente viene classificato come Low. In caso contrario, viene classificato come High.
Customer Segment =
VAR CustomerRevenue = SUM(Sales[Sales Amount])
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Nella Pagina 4 del report aggiungere la colonna Customer Segment come legenda del grafico a torta.
Si noti che è presente solo un valore Customer Segment. La formula di colonna calcolata produce infatti un risultato non corretto: a ogni cliente viene assegnato il valore High perché l'espressione SUM(Sales[Sales Amount])
non viene valutata in un contesto di filtro. Di conseguenza, ogni cliente viene valutato sulla somma di ogni valore di colonna Sales Amount nella tabella Sales.
Per imporre la valutazione dell'espressione SUM(Sales[Sales Amount])
per ogni cliente, è necessario che avvenga una transizione del contesto che applica i valori di colonna del contesto di riga al contesto di filtro. È possibile completare questa transizione usando la funzione CALCULATE
senza passare espressioni filtro.
Modificare la definizione di colonna calcolata in modo che produca il risultato corretto.
Customer Segment =
VAR CustomerRevenue = CALCULATE(SUM(Sales[Sales Amount]))
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Nell'oggetto visivo grafico a torta aggiungere la nuova colonna calcolata all'area Legenda, verificare che due segmenti a torta siano ora visualizzati.
In questo caso la funzione CALCULATE
applica i valori del contesto di riga come filtri e questa operazione è definita transizione del contesto. Per la precisione, il processo non funziona esattamente in questo modo quando la tabella include una colonna univoca. Quando nella tabella è presente una colonna univoca, è necessario solo applicare un filtro a tale colonna per completare la transizione. In questo caso Power BI applica un filtro alla colonna CustomerKey per il valore nel contesto di riga.
Se si fa riferimento a misure in un'espressione valutata in un contesto di riga, la transizione del contesto sarà automatica. Non è quindi necessario passare riferimenti a misure nella funzione CALCULATE
.
Modificare la definizione di colonna calcolata, che fa riferimento alla misura Revenue. Si noti che continua a produrre il risultato corretto.
Customer Segment =
VAR CustomerRevenue = [Revenue]
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
È ora possibile completare la formula della misura Sales Commission. Per produrre un totale, è necessario usare una funzione iteratore per eseguire l'iterazione in tutte le aree nel contesto di filtro. L'espressione della funzione iteratore deve usare la funzione CALCULATE
per eseguire la transizione del contesto di riga al contesto di filtro. Si noti che non è più necessario verificare se nel contesto di filtro è presente un singolo valore di colonna Country nella tabella Sales Territory. È infatti noto che il filtro viene applicato in base a un singolo paese, poiché viene eseguita l'iterazione sulle aree nel contesto di filtro e un'area appartiene a un solo paese.
Passare alla Pagina 3 del report e quindi modificare la definizione della misura Sales Commission in modo da usare la funzione iteratore SUMX
:
Sales Commission =
SUMX(
VALUES('Sales Territory'[Region]),
CALCULATE(
[Revenue]
* IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
)
L'oggetto visivo tabella mostra ora un totale di provvigioni vendite per tutte le aree.