Brug variabler til at forbedre dine DAX-formler
Det kan være udfordrende for dataudformere at skrive og foretage fejlfinding af visse DAX-beregninger. Det er almindeligt, at komplekse beregninger ofte kræver, at der skrives sammensatte eller komplekse udtryk. Sammensatte udtryk kan involvere brugen af mange indlejrede funktioner og muligvis genbrug af udtrykslogik.
Brug af variabler i dine DAX-formler kan hjælpe dig med at skrive mere komplekse og effektive beregninger. Variabler kan forbedre ydeevnen og pålideligheden samt læsevenligheden og reducere kompleksiteten.
I denne artikel demonstrerer vi de første tre fordele ved hjælp af en eksempelmåling for salgsvæksten år-til-år. (Formlen for Åfå salgsvækst er: periode salg færre salg for den samme periode sidste år, divideret med salg for den samme periode sidste år.)
Lad os starte med følgende målingsdefinition.
Sales YoY Growth % =
DIVIDE(
([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)
Målingen giver det korrekte resultat, men lad os nu se, hvordan det kan forbedres.
Gør ydeevnen bedre
Bemærk, at formlen gentager det udtryk, der beregner "samme periode sidste år". Denne formel er ineffektiv, da den kræver, at Power BI skal evaluere det samme udtryk to gange. Målings definitionen kan gøres mere effektiv ved hjælp af en variabel, var.
Følgende målingsdefinition repræsenterer en forbedring. Det bruger et udtryk til at tildele resultatet "samme periode sidste år" til en variabel, med navnet SalesPriorYear. Variablen bruges derefter to gange i RETURN-udtrykket.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
Målingen fortsætter med at give det korrekte resultat, og det gør den i ca. halvdelen af forespørgselstiden.
Gør læsbarheden bedre
I den tidligere målingsdefinition kan du se, hvordan valget af variabelnavn gør det enklere at forstå udtrykket RETURN. Udtrykket er kort og selvbeskrivende.
Gør fejlfinding mere enkel
Variabler kan også hjælpe dig med at foretage fejlfinding af en formel. Hvis du vil teste et udtryk, der er knyttet til en variabel, skal du midlertidigt omskrive RETURN-udtrykket for at sende variablen til output.
Følgende målingsdefinition returnerer kun variablen SalesPriorYear. Bemærk, hvordan den markerer det påtænkte RETURN-udtryk som kommentar. Denne teknik giver dig mulighed for nemt at gendanne det, når fejlfindingen er fuldført.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
--DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
SalesPriorYear
Reducer kompleksiteten
I tidligere versioner af DAX var variabler endnu ikke understøttet. Komplekse udtryk, der introducerede nye filterkontekster, skulle bruge DAX-funktionerne EARLIER eller EARLIEST til at referere til ydre filterkontekster. Desværre synes dataudformere, at disse funktioner er svære at forstå og bruge.
Variabler evalueres altid uden for de filtre, som RETURN-udtrykket gælder for. Derfor får en variabel samme resultat som funktionen EARLIEST, når du bruger den i en ændret filterkontekst. Brugen af funktionen EARLIER eller EARLIEST kan derfor undgås. Det betyder, at du nu kan skrive formler, der er mindre komplekse og nemmere at forstå.
Du kan se, at den følgende beregnede kolonnedefinition er føjet til tabellen Subcategory. Den evaluerer en rangordning af hver produktunderkategori baseret på værdierne i kolonnen Subkategory Sales.
Subcategory Sales Rank =
COUNTROWS(
FILTER(
Subcategory,
EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
)
) + 1
Funktionen EARLIER bruges til at henvise til kolonneværdien Subcategory Salesi den aktuelle rækkekontekst.
Den beregnede kolonnedefinition kan forbedres, ved at der bruges en variabel i stedet for funktionen EARLIER. Variablen CurrentSubcategorySales gemmer kolonneværdien for Subcategory Salesi den aktuelle rækkekontekst, og RETURN-udtrykket bruger den i en ændret filterkontekst.
Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
COUNTROWS(
FILTER(
Subcategory,
CurrentSubcategorySales < Subcategory[Subcategory Sales]
)
) + 1
Se også
- DAX-artiklen VAR
- Læringsforløb: Brug DAX i Power BI Desktop
- Har du spørgsmål? Prøv at spørge Power BI-community'et