Contextovergang uitvoeren

Voltooid

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.

Een afbeelding toont een besturingselement voor een cirkeldiagram met de titel Revenue by Customer Segment. Er is maar één segment: High, dat 100% van de gegevens vertegenwoordigt.

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.

Een afbeelding toont een besturingselement voor een cirkeldiagram met de titel Revenue by Customer Segment. Er zijn twee segmenten: High en Low. High vertegenwoordigt 76% van de gegevens en Low vertegenwoordigt 24%.

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.

Een afbeelding toont een tabelbesturingselement met drie kolommen: Region, Revenue en Sales Commission. Er worden tien regiorijen en een totaal weergegeven. De totale Sales Commission heeft nu een totaal.