Använd iteratorfunktioner för aggregering
Varje sammanfattningsfunktion i en enskild kolumn har sin motsvarande iteratorfunktion. I följande avsnitt beskrivs två aggregeringsscenarier när iteratorfunktioner är användbara: komplex sammanfattning och sammanfattning med högre kornighet.
Komplex sammanfattning
I det här avsnittet ska du skapa ditt första mått som använder en iteratorfunktion. Först ska du ladda ned och öppna filen Adventure Works DW 2020 M05.pbix. Lägg sedan till följande måttdefinition:
Revenue =
SUMX(
Sales,
Sales[Order Quantity] * Sales[Unit Price] * (1 - Sales[Unit Price Discount Pct])
)
Formatera måttet Intäkter som valuta med två decimaler och lägg sedan till det i det visuella tabellobjektet som finns på sidan 1 i rapporten.
Med hjälp av en iteratorfunktion aggregerar måttformeln Intäkter mer än värdena för en enskild kolumn. För varje rad använder den radkontextvärdena i tre kolumner för att komma fram till intäktsbeloppet.
Lägg nu till ett annat mått:
Discount =
SUMX(
Sales,
Sales[Order Quantity]
* (
RELATED('Product'[List Price]) - Sales[Unit Price]
)
)
Formatera måttet Rabatt som valuta med två decimaler och lägg sedan till det i tabellvisualiseringen.
Observera att formeln använder RELATED
funktionen . Kom ihåg att radkontexten inte sträcker sig utanför tabellen. Om formeln behöver referera till kolumner i andra tabeller och modellrelationer finns mellan tabellerna använder du RELATED
funktionen för ensidig relation eller RELATEDTABLE
funktionen för relationen på många sidor.
Mer detaljerad sammanfattning
I följande exempel ska genomsnittsintäkter rapporteras. Lägg till följande mått:
Revenue Avg =
AVERAGEX(
Sales,
Sales[Order Quantity] * Sales[Unit Price] * (1 - Sales[Unit Price Discount Pct])
)
Formatera måttet Genomsnittsintäkt som valuta med två decimaler och lägg sedan till det i tabellvisualiseringen.
Tänk på att Genomsnitt innebär att summan av värdena divideras med antalet värden. Den teorin leder dock till frågan: Vad representerar antalet värden? I det här fallet är antalet värden det antal uttryck som inte utvärderades till BLANK. Eftersom iteratorfunktionen räknar upp raderna i tabellen Försäljning skulle medelvärdet innebära intäkter per rad. Om du tar den här logiken ett steg längre, eftersom varje rad i tabellen Försäljning registrerar en försäljningsorderrad, kan den mer exakt beskrivas som intäkter per orderrad.
Därför bör du byta namn på måttet Genomsnittsintäkt till Genomsnittsintäkt för orderrad så att det är tydligt för rapportanvändare vad som används som genomsnittsbas.
I följande exempel används en iteratorfunktion för att skapa ett nytt mått som höjer detaljnivån till försäljningsordernivån (en försäljningsorder består av en eller flera orderrader). Lägg till följande mått:
Revenue Avg Order =
AVERAGEX(
VALUES('Sales Order'[Sales Order]),
[Revenue]
)
Formatera måttet Genomsnittlig orderintäkt som valuta med två decimaler och lägg sedan till det i tabellvisualiseringen.
Som förväntat är den genomsnittliga intäkten för en order alltid högre än den genomsnittliga intäkten för en enskild orderrad.
Observera att formeln använder VALUES
DAX-funktionen. Den här funktionen låter dina formler avgöra vilka värden som finns i filterkontexten. I det här fallet AVERAGEX
itererar funktionen över varje försäljningsorder i filterkontext. Det innebär att den upprepas för varje försäljningsorder för månaden. Filterkontexten VALUES
och funktionen introduceras i modulen filterkontext.