Brug iteratorfunktioner til sammenlægning

Fuldført

Hver opsummeringsfunktion for enkeltkolonner har en tilsvarende iteratorfunktion. I følgende afsnit beskrives to aggregeringsscenarier, når iteratorfunktioner er nyttige: kompleks opsummering og opsummering med højere detaljeringsgrad.

Kompleks opsummering

I dette afsnit skal du oprette din første måling, der bruger en iteratorfunktion. Først skal du downloade og åbne filen Adventure Works DW 2020 M05. pbix. Tilføj følgende målingsdefinition:

Revenue =
SUMX(
    Sales,
    Sales[Order Quantity] * Sales[Unit Price] * (1 - Sales[Unit Price Discount Pct])
)

Formatér målingen Revenue som valuta med to decimaler, og føj den derefter til tabelvisual'et, der findes på side 1 i rapporten.

Ved hjælp af en iteratorfunktion lægger formlen for målingen Revenue mere end værdierne i en enkelt kolonne sammen. Den bruger rækkekontekstværdierne for tre kolonner til at oprette indtægtsbeløbet for hver række.

Tilføj nu en anden måling:

Discount =
SUMX(
    Sales,
    Sales[Order Quantity]
    * (
        RELATED('Product'[List Price]) - Sales[Unit Price]
    )
)

Formatér målingen Discount som valuta med to decimaler, og føj den derefter til tabelvisual'et.

Bemærk, at formlen bruger funktionen RELATED . Husk, at rækkekonteksten ikke udvides længere end til tabellen. Hvis formlen skal referere til kolonner i andre tabeller, og der findes modelrelationer mellem tabellerne, skal du bruge RELATED funktionen for en-siden-relationen RELATEDTABLE eller funktionen for mange-siden-relationen.

Opsummering med lavere detaljeringsgrad

I følgende eksempel er der et krav om at rapportere den gennemsnitlige indtægt. Tilføj følgende måling:

Revenue Avg =
AVERAGEX(
    Sales,
    Sales[Order Quantity] * Sales[Unit Price] * (1 - Sales[Unit Price Discount Pct])
)

Formatér målingen Revenue Avg som valuta med to decimaler, og føj den derefter til tabelvisual'et.

Tænk på, at gennemsnit betyder summen af værdier divideret med antallet af værdier. Denne teori medfører dog et spørgsmål: Hvad repræsenterer antallet af værdier? I dette tilfælde er antallet af værdier det antal udtryk, der ikke blev evalueret til BLANK. Da iteratorfunktionen optæller rækkerne i tabellen Sales , betyder gennemsnit også indtægt pr. række. Hvis du tager denne logik et skridt videre, da hver række i tabellen Sales registrerer en salgsordrelinje, kan den beskrives mere præcist som indtægt pr. ordrelinje.

Derfor skal du omdøbe målingen Revenue Avg til Revenue Avg Order Line, så det er tydeligt for rapportbrugerne, hvad der bruges som grundlag for gennemsnittet.

I følgende eksempel bruges en iteratorfunktion til at oprette en ny måling, der hæver detaljeniveauet til salgsordreniveau (en salgsordre består af en eller flere ordrelinjer). Tilføj følgende måling:

Revenue Avg Order =
AVERAGEX(
    VALUES('Sales Order'[Sales Order]),
    [Revenue]
)

Formatér målingen Revenue Avg Order som valuta med to decimaler, og føj den derefter til tabelvisual'et.

Som forventet er den gennemsnitlige indtægt for en ordre altid højere end den gennemsnitlige indtægt for en enkelt ordrelinje.

Bemærk, at formlen bruger VALUES DAX-funktionen. Denne funktion gør det muligt for formler at bestemme, hvilke værdier der er i filterkonteksten. I dette tilfælde gentager funktionen AVERAGEX hver salgsordre i filterkonteksten. Det vil sige, at den gentager alle månedens salgsordrer. Filterkontekst og funktionen VALUES introduceres i modulet om filterkontekst.