Utför kontextomställning
Vad händer när ett mått eller ett måttuttryck utvärderas i radsammanhang? Detta scenario kan inträffa i en beräknad kolumnformel eller när ett uttryck i en iteratorfunktion utvärderas.
I följande exempel lägger du till en beräknad kolumn i kundregistret för att klassificera kunder till en förmånsklass. Scenariot är enkelt: När den intäkt som produceras av kunden är mindre än $2500, klassificeras kunden som låg, annars är de klassificerade som hög.
Customer Segment =
VAR CustomerRevenue = SUM(Sales[Sales Amount])
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
På sida 4 i rapporten lägger du till segment kolumnen som förklaring till cirkeldiagrammet.
Lägg märke till att det bara finns en segment värde. Orsaken är att den beräknade kolumnformeln ger fel resultat: SUM(Sales[Sales Amount])
Varje kund tilldelas värdet hög eftersom uttrycket inte utvärderas i en filterkontext. Därför bedöms varje kund på summan av varje värde iförsäljningsbelopp i försäljningsregistret .
För att tvinga utvärderingen av uttrycket SUM(Sales[Sales Amount])
för varje kund måste en kontextomställning ske där radkontextkolumnvärdena används för att filtrera kontexten. Du kan genomföra den här övergången genom att använda funktionen CALCULATE
utan att skicka den i filteruttryck.
Ändra den beräknade kolumndefinition så att det leder till rätt resultat.
Customer Segment =
VAR CustomerRevenue = CALCULATE(SUM(Sales[Sales Amount]))
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
I cirkeldiagrammet lägger du till den nya beräknade kolumnen i förklaringen, och kontrollerar att två cirkelsegment nu visas.
I det här fallet används radkontextvärden CALCULATE
som filter, som kallas för kontextomställning. För att vara korrekt fungerar inte processen på det sättet när en unik kolumn finns i tabellen. När det finns en unik kolumn i registret behöver du bara använda ett filter på den kolumnen för att göra övergången tillgänglig. I det här fallet Power BI används ett filter på kolumnen Kundnyckel för värdet i radsammanhang.
Om du refererar till mått i ett uttryck som utvärderas i radsammanhang, blir sammanhangsomställningen automatisk. Därför behöver du inte överföra måttreferenser till CALCULATE
funktionen.
Ändra den beräknade kolumndefinition beräkning, som refererar till intäktsmåttet och noterar att det fortsätter att ge rätt resultat.
Customer Segment =
VAR CustomerRevenue = [Revenue]
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Nu kan du slutföra måttformeln för försäljningskommission. För att skapa summan måste du använda en iteratorfunktion för att kunna iterera över alla regioner i filtersammanhang. Uttrycket för iteratorfunktionen måste använda funktionen när CALCULATE
du överar radkontexten till filterkontexten. Lägg märke till att det inte längre behöver testa om ett enskilt värde för landkolumn i registret Försäljningsområde är i filtersammanhang eftersom det är känt att filtreras efter ett enskilt land (eftersom det sorteras över regionerna i filtersammanhang och en region bara tillhör ett land).
Växla till sida 3 i rapporten och ändra sedan måttdefinitionen för försäljning så att den använder SUMX
funktionen iterator:
Sales Commission =
SUMX(
VALUES('Sales Territory'[Region]),
CALCULATE(
[Revenue]
* IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
)
I det visuella registret visas nu en provisionssumma för alla regioner.