Velkommen til dataon's Julekalender 2025!

Hver mandag, onsdag og fredag frem til jul kan du åbne en ny låge.
Tilmeld dig vores mailingliste og modtag en mail på dagen.

1. december
Tema: DAX UDF

(lavet af Kasper Knakkergaard Rasmussen)

Dagens låge omhandler en af årets helt store Power BI nyheder: DAX User-Defined Functions. Det er en funktionalitet, der ikke kun er interessant for udviklere, men som også har stor betydning for forretningen, fordi den giver mulighed for langt bedre konsistens, governance og genbrug af beregninger.

Hvad er DAX UDFs?

En DAX User-Defined Function (UDF) er en funktion, du selv definerer i DAX, og som du derefter kan bruge præcis som enhver anden DAX-funktion.

Det betyder, at du kan skrive logik én gang og genbruge den på tværs af hele modellen, uden at skulle kopiere og vedligeholde den samme formel i mange measures.

Hvorfor er det relevant?

Power BI-modeller vokser ofte hurtigt i kompleksitet. Det giver typisk:

-            measures der ligner hinanden

-            små variationer af den samme beregning

-            inkonsistente KPI’er mellem rapporter

-            unødvendige fejl

-            tung og gentaget vedligeholdelse

Med UDF’er samles logikken ét sted.
Hvis definitionen ændrer sig (fx hvordan “YoY” beregnes), opdateres alle YoY-measures automatisk, fordi de kalder den samme funktion.

 

Sådan kommer du i gang

DAX UDFs er stadig i preview og kræver derfor, at du slår en enkelt indstilling til:

File → Options → Preview features → “DAX user-defined functions”:

Når det er aktiveret:

1.       Gå til DAX Query View

2.       Opret en funktion med DEFINE FUNCTION

3.       Gem funktionen i modellen

4.       Brug den i measures som enhver anden funktion

 

Hvordan skriver man en UDF?

En UDF har typisk en struktur lignende denne:

DEFINE
FUNCTION MyFunction =
(
_Arg1 : ANYREF EXPR,
_Arg2 : STRING
)
=>
<return expression>

Argumenterne kan have forskellige typer, som f.eks.:

  • ANYREF EXPR → et andet DAX-udtryk (fx et measure)

  • STRING → tekst

  • INT64 VAL → tal

  • osv.

I ovenstående sendes to argumenter:
_Arg1 : ANYREF EXPR betyder at du kan sende et DAX-udtryk som fx et measure ind.
_Arg2 : INT64 VAL betyder at funktionen også tager et heltal som input.

Det gør UDF’er meget fleksible: du kan sende alt fra measures, kolonner og konstanter som input.

Når funktionen er gemt, kalder du den sådan her:

New Measure = MyFunction( [Existing Measure], "Argument" )

Her sendes [Existing Measure] ind i _Arg1, og "Argument" ind i _Arg2.

Eksempel: Standardiseret Time Intelligence

Her er et eksempel på tre UDF’er, der håndterer klassiske tidsberegninger:

-            TimeIntel.PY – sidste års værdi

-            TimeIntel.YOY – forskel mellem i år og sidste år

-            TimeIntel.YOYPCT – procentvis forskel

Som det ses her, kan en funktion også kalde en anden funktion. I funktionen ”TimeIntel.YOY” kaldes funktionerne ”TimeIntel.CY” og ”TimeIntel.PY”.

 Et YoY-measure kan nu reduceres til følgende:
Sales YoY  = TimeIntel.YOY( [Sales Amount] )

Og et YoY%-measure til følgende:
Sales YoY  = TimeIntel.YOYPCT( [Sales Amount] )

Hvordan ser det ud i rapporten?

Her er et lille udsnit fra en demo-rapport, hvor der vises Total Salg PY, Total Salg YoY og Total Salg YoY% alle tre beregnet via UDF’erne:

Det interessante her er, hvor meget logikken er blevet forenklet i modellen, og hvor konsekvent beregningerne bliver.

 

Det kan bruges til meget mere end blot tidsberegninger

Selvom eksemplerne her tager udgangspunkt i salgstal, kan UDF’er bruges i mange forskellige typer beregninger i Power BI, fx:

-            Valutaomregning

-            margin- og profitberegninger

-            KPI-definitioner

-            formatteringslogik (fx skalering, afrunding, visning af symboler)

-            avancerede forretningsregler, der bruges på tværs af modeller

Kort sagt: Hvis en beregning optræder mange steder, er den en kandidat til en UDF.

 

Opsummering

DAX UDF’er gør det muligt at strukturere logik i Power BI langt bedre end før.

Eksemplet med PY, YoY og YoY% er blot én af mange anvendelser. Valutaomregning, marginberegninger, forretningsregler og formattering er andre oplagte områder.

Hvis du arbejder med Power BI til dagligt, er det værd at tage et kig på, hvordan UDF’er kan forbedre din model.