Eseguire la transizione del contesto

Completato

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.

Un'immagine mostra un oggetto visivo grafico a torta denominato Revenue by Customer Segment. È presente solo un segmento: High, che rappresenta il 100% dei dati.

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.

Un'immagine mostra un oggetto visivo grafico a torta denominato Revenue by Customer Segment. Sono presenti due segmenti: High e Low. High rappresenta il 76% dei dati e Low rappresenta il 24%.

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.

Un'immagine mostra un oggetto visivo tabella con tre colonne: Region, Revenue e Sales Commission. Vengono mostrate dieci righe per le aree e un totale. Il totale per Sales Commission presenta ora un totale.