Contextovergang uitvoeren

Voltooid

Wat gebeurt er wanneer een maat- of metingexpressie binnen een rijcontext wordt geëvalueerd? Dit scenario kan plaatsvinden in een berekende kolomformule of wanneer een expressie in een iteratorfunctie wordt geëvalueerd.

In het volgende voorbeeld voegt u een berekende kolom aan de tabel Klant toe om klanten in een loyaliteitsklasse te classificeren. Het scenario is eenvoudig: wanneer de opbrengsten die door de klant worden geproduceerd minder zijn 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")

Op pagina 4 van het rapport voegt u de klant segment in de legenda van het cirkeldiagram.

Er bestaat slechts één segment klantwaarde. De reden is dat de berekende kolomformule een onjuist resultaat oplevert: SUM(Sales[Sales Amount]) aan elke klant wordt de waarde Hoog toegewezen, omdat de expressie niet in een filtercontext wordt geëvalueerd. Bijgevolg wordt elke klant geëvalueerd voor de som van elke kolomwaarde Verkoopbedrag in de tabel Verkoop.

Om de evaluatie van de expressie SUM(Sales[Sales Amount]) voor elke klant af te dwingen, moet er een contextovergang plaatsvinden die de kolomwaarden van de rijcontext gebruikt om de context te filteren. U kunt deze overgang uitvoeren met de functie zonder CALCULATE filterexpressie door te geven.

De berekende kolomdefinitie wijzigen zodat het het juiste resultaat genereert.

Customer Segment =
VAR CustomerRevenue = CALCULATE(SUM(Sales[Sales Amount]))
RETURN
    IF(CustomerRevenue < 2500, "Low", "High")

Voeg in de weergave van het cirkeldiagram de nieuwe berekende kolom aan de legenda toe en controleer of er nu twee cirkelsegmenten worden weergegeven.

In dit geval past de functie CALCULATE rijcontextwaarden toe als filters, ook wel contextovergang genoemd. Om precies te zijn werkt het proces niet helemaal zo wanneer er een unieke kolom in de tabel staat. Wanneer er een unieke kolom in de tabel staat, hoeft u alleen een filter op de kolom toe te passen om de overgang te realiseren. In dit geval past u een Power BI filter op de kolom CustomerKey toe op de waarde in de rijcontext.

Als u verwijst naar metingen in een expressie die in een rijcontext is geëvalueerd, is de contextovergang automatisch. U hoeft dus geen metingverwijzingen door te geven naar de CALCULATE functie.

Wijzig de berekende kolomdefinitie, die verwijst naar de opbrengstmaat, en merk op dat deze nog steeds het juiste resultaat produceert.

Customer Segment = 
VAR CustomerRevenue = [Revenue]
RETURN
    IF(CustomerRevenue < 2500, "Low", "High")

Nu kunt u de maatformule verkoopcommissie voltooien. Voor het produceren van een totaal moet u een iteratorfunctie gebruiken om in de filtercontext over alle regio's te kunnen itereren. De functieexpressie van de iterator moet de functie gebruiken CALCULATE om de rijcontext over te brengen naar de filtercontext. U hoeft niet langer te testen of één kolomwaarde voor land in de tabel Verkoopgebied in de filtercontext valt, omdat bekend is dat er op één land wordt gefilterd (omdat de kolomwaarde boven de regio's in de filtercontext en een regio slechts bij één land hoort).

Ga naar pagina 3 van het rapport en wijzig vervolgens de definitie van de verkoopcommissie om de SUMX iteratorfunctie te gebruiken:

Sales Commission =
SUMX(
    VALUES('Sales Territory'[Region]),
    CALCULATE(
        [Revenue]
        * IF(
            VALUES('Sales Territory'[Country]) = "United States",
            0.15,
            0.1
        )
    )
)

In het tabeldisplay wordt nu een verkoopcommissietotaal weergegeven voor alle regio's.