Esecuzione di una transizione di contesto
Cosa succede quando una misura o un'espressione di misura viene valutata in un contesto di riga? Questo scenario può verificarsi nella formula di una colonna calcolata o quando viene valutata un'espressione in una funzione di iterazione.
Nell'esempio seguente si aggiungerà una colonna calcolata alla tabella Customer per categorizzare i clienti in una classe di fedeltà. Lo scenario è semplice: quando i ricavi prodotti dal cliente sono inferiori a 2.500 USD, 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")
A pagina 4 del report aggiungere la colonna Customer Segment come legenda del grafico a torta.
Notare che è presente un solo valore Customer Segment. Ciò accade perché la formula della colonna calcolata produce un risultato errato: a ciascun cliente viene assegnato il valore High poiché l'espressione SUM(Sales[Sales Amount])
non viene valutata in un contesto di filtro. Di conseguenza, ogni cliente viene valutato in base alla somma di ogni valore della colonna Sales Amount nella tabella Sales.
Per forzare la valutazione dell'espressione SUM(Sales[Sales Amount])
per ciascun cliente, è necessario che avvenga una transizione di contesto che applichi i valori della colonna del contesto di riga al contesto di filtro. È possibile eseguire questa transizione usando la funzione CALCULATE
senza passare espressioni filtro.
Modificare la definizione della 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 della legenda e verificare che ora vengano visualizzati due segmenti di torta.
In questo caso, la funzione CALCULATE
applica i valori del contesto di riga come filtri e ciò è noto come transizione di contesto. Per essere precisi, il processo non funziona esattamente in questo modo quando nella tabella è presente una colonna univoca. Quando nella tabella è presente una colonna univoca, è sufficiente applicare un filtro alla colonna per effettuare 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 nel contesto di riga, la transizione di contesto è automatica. Pertanto, non è necessario passare riferimenti di misura alla funzione CALCULATE
.
Modificare la definizione della colonna calcolata, che fa riferimento alla misura Revenue, e notare 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 di iterazione per scorrere tutte le aree nel contesto di filtro. L'espressione della funzione di iterazione deve usare la funzione CALCULATE
per passare dal contesto di riga al contesto di filtro. Notare che non è più necessario verificare se un singolo valore della colonna Country nella tabella Sales Territory si trova nel contesto di filtro, perché l'espressione sta notoriamente filtrando in base a un singolo paese/area geografica (perché sta scorrendo le aree nel contesto di filtro e un'area appartiene a un solo paese/area geografica).
Passare a pagina 3 del report, quindi modificare la definizione della misura Sales Commission in modo da usare la funzione di iterazione 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 ora mostra il totale delle commissioni di vendita per tutte le aree.