Utføre kontekstovergang
Hva skjer når et mål eller måluttrykk evalueres i radkontekst? Dette scenariet kan skje i en beregnet kolonneformel, eller når et uttrykk i en iteratorfunksjon blir evaluert.
I dette eksemplet legger du til en beregnet kolonne i Kunde-tabellen for å klassifisere kunder i en fordelsklasse. Scenariet er enkelt: Når omsetningen som produseres av kunden er mindre enn $2500, klassifiseres kunden som Lav. Ellers klassifiseres de som Høy.
Customer Segment =
VAR CustomerRevenue = SUM(Sales[Sales Amount])
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
På side 4 i rapporten legger du til segment kundekolumn som forklaring av sektordiagrammet.
Legg merke til at det bare finnes én segment kundeverdi. Grunnen til dette er at den beregnede kolonneformelen gir et feil resultat: SUM(Sales[Sales Amount])
Hver kunde blir tildelt verdien Høy fordi uttrykket ikke blir evaluert i filterkontekst. Derfor vurderes hver kunde av summen av hver salgsbeløp-kolonneverdi i salgstabellen .
For å fremtvinge SUM(Sales[Sales Amount])
evaluering av uttrykket for hver kunde må det foregå en kontekstovergang som bruker kolonneverdiene for radkontekst til å filtrere konteksten. Du kan oppnå denne overgangen ved å bruke funksjonen CALCULATE
uten å sende i filteruttrykk.
Endre det beregnede kolonnedefinisjon slik at det gir det riktige resultatet.
Customer Segment =
VAR CustomerRevenue = CALCULATE(SUM(Sales[Sales Amount]))
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
I det visuelle sektordiagrammet legger du til den nye beregnede kolonnen i Forklaring-tillegget, kontroller du at to sektorsegmenter nå vises.
I så fall brukes radkontekstverdier CALCULATE
som filtre, kalt kontekstovergang . For å være nøyaktig, fungerer ikke prosessen fullt ut på den måten når en unik kolonne står i tabellen. Når en unik kolonne er i tabellen, trenger du bare å bruke et filter på den kolonnen for å få overgangen til å skje. I dette tilfellet bruker Power BI du et filter på Kundenøkkel-kolonnen for verdien i radkontekst.
Hvis du refererer til mål i et uttrykk som evalueres i radkontekst, er kontekstovergang automatisk. Dermed behøver du ikke å sende målreferanser til CALCULATE
funksjonen.
Endre den beregnede kolonnedefinisjon, som refererer til omsetningsmålet , og legg merke til at det fortsetter å produsere det riktige resultatet.
Customer Segment =
VAR CustomerRevenue = [Revenue]
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Nå kan du fullføre formelen for salgsprovisjonsmål . Hvis du vil lage en total, må du bruke en iteratorfunksjon til å gå gjennom alle områder i filterkontekst. Funksjonsuttrykket for iterator må bruke funksjonen CALCULATE
til å gå over radkonteksten til filterkonteksten. Legg merke til at det ikke lenger må teste om én enkelt Land-kolonneverdi i salgsfortegnelsestabellen er i filterkontekst fordi det er kjent for å være filtrering av ett enkelt land (fordi den går over områdene i filterkontekst og et område tilhører bare ett land).
Bytt til side 3 i rapporten, og endre deretter definisjonen av salgsprovisjonsmål for å bruke SUMX
funksjonen for iterator:
Sales Commission =
SUMX(
VALUES('Sales Territory'[Region]),
CALCULATE(
[Revenue]
* IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
)
Tabellen viser nå en salgsprovisjonstotal for alle områder.