Contextovergang uitvoeren
Wat gebeurt er wanneer een meting of metingexpressie wordt geëvalueerd binnen rijcontext? Dit scenario kan zich voordoen in een formule voor een berekende kolom of wanneer een expressie in een iterator-functie wordt geëvalueerd.
In het volgende voorbeeld voegt u een berekende kolom toe aan de tabel Klant om klanten te classificeren in een loyaliteitsklasse. Het scenario is eenvoudig: wanneer de omzet die door de klant wordt geproduceerd minder is dan $ 2500, wordt de klant geclassificeerd als Laag; Anders worden ze geclassificeerd als Hoog.
Customer Segment =
VAR CustomerRevenue = SUM(Sales[Sales Amount])
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Voeg op pagina 4 van het rapport de kolom Customer Segment toe als legenda van het cirkeldiagram.
U ziet dat er slechts één waarde voor Customer Segment bestaat. De reden hiervoor is dat de formule voor de berekende kolom een onjuist resultaat produceert: Aan elke klant wordt de waarde High toegewezen, omdat de expressie SUM(Sales[Sales Amount])
niet in een filtercontext wordt geëvalueerd. Daarom wordt elke klant beoordeeld op de som van elke kolomwaarde verkoopbedrag in de tabel Verkoop.
Om de evaluatie van de SUM(Sales[Sales Amount])
expressie voor elke klant af te dwingen, moet er een contextovergang plaatsvinden die de kolomwaarden van de rijcontext toepast op filtercontext. U kunt deze overgang uitvoeren met behulp van de CALCULATE
functie zonder filterexpressies door te geven.
Wijzig de definitie van de berekende kolom zodat deze het juiste resultaat produceert.
Customer Segment =
VAR CustomerRevenue = CALCULATE(SUM(Sales[Sales Amount]))
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
Voeg in de visual van het cirkeldiagram de nieuwe berekende kolom toe aan de bron Legenda en controleer of er nu twee cirkelsegmenten worden weergegeven.
In dit geval past de CALCULATE
functie rijcontextwaarden toe als filters, ook wel contextovergang genoemd. Om preciezer te zijn, het proces werkt niet helemaal op die manier wanneer zich een unieke kolom in de tabel bevindt. Wanneer zich een unieke kolom in de tabel bevindt, hoeft u alleen een filter op die kolom toe te passen om de overgang te laten plaatsvinden. In dit geval past Power BI een filter toe op de kolom CustomerKey voor de waarde in de rijcontext.
Als u verwijst naar metingen in een expressie die wordt geëvalueerd in rijcontext, vindt de contextovergang automatisch plaats. U hoeft dus geen metingverwijzingen door te geven naar de CALCULATE
functie.
Wijzig de definitie van de berekende kolom, die verwijst naar de meting Revenue, en u ziet dat deze het juiste resultaat blijft produceren.
Customer Segment =
VAR CustomerRevenue = [Revenue]
RETURN
IF(CustomerRevenue < 2500, "Low", "High")
U kunt nu de formule voor de meting voor Sales Commission voltooien. Als u een totaal wilt produceren, moet u een iterator-functie gebruiken die wordt herhaald voor alle regio's in de filtercontext. De expressie van de iteratorfunctie moet de CALCULATE
functie gebruiken om de rijcontext over te zetten naar de filtercontext. U ziet dat er niet meer hoeft te worden getest of één kolomwaarde Land in de tabel Verkoopgebied zich in de filtercontext bevindt, omdat het bekend is dat deze wordt gefilterd op één land (omdat deze regio's in filtercontext wordt herhaald en een regio tot slechts één land behoort).
Ga naar pagina 3 van het rapport en wijzig vervolgens de metingdefinitie van de Verkoopcommissie om de SUMX
iterator-functie te gebruiken:
Sales Commission =
SUMX(
VALUES('Sales Territory'[Region]),
CALCULATE(
[Revenue]
* IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
)
In het tabelbesturingselement wordt nu een verkoopprovisietotaal weergegeven voor alle regio's.
Hulp nodig? Raadpleeg onze gids voor probleemoplossing of geef specifieke feedback door een probleem te melden.