DAX er et af de begreber, mange møder ret tidligt i arbejdet med Power BI, men som først rigtig giver mening, når man begynder at bygge sine egne rapporter. I starten kan det ligne Excel-formler med nye navne. Efter lidt tid opdager man, at DAX er noget andet og langt mere tæt knyttet til datamodellen, relationerne og brugerens filtre i rapporten.
Hvis Power BI skal bruges til mere end simple summer og standarddiagrammer, bliver DAX hurtigt relevant. Det er her, man bygger KPI’er, tidsberegninger, procentandele, dynamiske sammenligninger og logik, der reagerer på klik i slicers og visualer.
DAX i Power BI: hvad sproget egentlig bruges til
DAX står for Data Analysis Expressions og er formelsproget i Power BI’s tabulære datamodel. Det bruges til at lave beregninger på tværs af tabeller, kolonner og relationer. Power Pivot og Analysis Services, men i praksis møder de fleste det i Power BI Desktop.
Det vigtige er, at DAX ikke kun laver tal. Det laver kontekstafhængige beregninger. En measure i DAX kan vise ét resultat for hele virksomheden, et andet for en afdeling og et tredje for en enkelt kunde, alt efter hvilke filtre brugeren har valgt i rapporten.
Det gør DAX til motoren bag meget af det, der føles “intelligent” i en Power BI-rapport.
Efter de første forsøg bliver det ofte tydeligt, at DAX især bruges til disse opgaver:
- KPI’er og nøgletal
- tidsintelligens
- procent af total
- rangeringer
- segmentering
- specialfiltre i rapporter
En enkel måde at forstå DAX på er at sammenligne det med Excel og SQL. De tre værktøjer overlapper lidt, men de arbejder forskelligt.
| Værktøj | Primær brug | Arbejder typisk med | Styrke |
|---|---|---|---|
| DAX | Analyse i Power BI-modeller | Tabeller, kolonner, relationer, filterkontekst | Dynamiske beregninger i rapporter |
| Excel-formler | Beregninger i regneark | Celler og områder | Hurtige regnearksopgaver |
| SQL | Dataudtræk og databehandling | Tabeller, rækker, joins | Databaser og forespørgsler |
I Excel tænker man ofte i celler. I DAX tænker man i tabeller og filtre. Det er en stor forskel, og det er netop her, mange nye brugere skal skifte tankegang.
Sådan virker DAX i Power BI med filterkontekst
Når en DAX-beregning giver et andet resultat end forventet, handler det meget ofte om kontekst. To begreber går igen: row context og filter context. Man behøver ikke kende alle tekniske detaljer fra dag ét, men man skal forstå, at DAX læser situationen omkring beregningen.
Filterkontekst er det, rapporten allerede har valgt. Det kan være en dato, en region, en produkttype eller et klik i et diagram. Hvis en bruger vælger “Jylland” i en slicer, vil et measure som regel kun regne på data fra Jylland.
Row context opstår, når DAX arbejder række for række, som i en beregnet kolonne eller i iteratorfunktioner som SUMX(). Her regnes der ikke kun på hele kolonner, men på én række ad gangen.
Det er også derfor, relationer i modellen betyder så meget. Hvis relationerne er uklare eller bygger på en svag model, bliver DAX sværere at stole på. En god stjernemodel med tydelige dimensionstabeller og en faktatabel gør både rapporten og DAX-koden enklere.
Efter man har forstået kontekst, giver disse tre beregningstyper meget mere mening:
- Measures: Dynamiske beregninger, der reagerer på filtre i rapporten
- Calculated columns: Beregninger, der laves ved opdatering og gemmes i modellen
- Calculated tables: Nye tabeller, der oprettes med DAX og lagres i modellen
I praksis er measures det, de fleste arbejder mest med i Power BI. De belaster ikke modellen på samme måde som beregnede kolonner, og de er langt bedre til analyser, hvor brugeren selv filtrerer og skifter perspektiv.
Measures og calculated columns i Power BI
En klassisk fejl er at lave for meget i calculated columns, fordi det føles mere kendt. Det kan virke fint i små modeller, men i større løsninger bliver det hurtigt tungt.
Hvis man vil beregne omsætning på tværs af den aktuelle filterkontekst, er en measure som regel det rigtige valg:
Total Sales = SUM(Sales[SalesAmount])
Det measure ændrer resultat, når brugeren vælger en anden kundegruppe, måned eller afdeling.
Hvis man i stedet vil udregne en værdi pr. række, kan en calculated column være relevant:
Line Amount = Sales[Quantity] * Sales[UnitPrice]
Den bliver gemt i modellen og ændrer sig ikke dynamisk med rapportens filtre på samme måde som en measure.
Det lyder som en lille forskel. Det er det ikke.
Vigtige DAX-funktioner i Power BI
Når man begynder at skrive DAX, er der nogle funktioner, man møder igen og igen. Det er ikke nødvendigt at kunne dem alle fra starten. Men nogle få giver meget hurtigt værdi.
SUM() og AVERAGE() er oplagte at starte med, fordi de minder om kendte Excel-funktioner. De er gode til simple aggregeringer, når kolonnen allerede indeholder det tal, der skal summeres eller beregnes gennemsnit på.
SUMX() er et skridt videre. Her regner DAX række for række og summerer derefter resultatet. Det er nyttigt, når selve summen skal dannes af et udtryk.
Sales Amount =
SUMX(
Sales,
Sales[Quantity] * Sales[UnitPrice]
)
CALCULATE() er den funktion, mange opfatter som hjertet i DAX. Den ændrer filterkonteksten for en beregning. Det betyder, at man kan tage et eksisterende measure og få det beregnet under særlige betingelser.
Red Sales =
CALCULATE(
[Total Sales],
Product[Color] = "Red"
)
Det samme mønster bruges til langt mere avancerede analyser, også når man vil skifte datorelation eller beregne sidste års salg.
DIVIDE() er en anden nyttig funktion, især til procenttal og marginer. Den er bedre end almindelig division, fordi den håndterer tilfælde, hvor nævneren er nul.
Margin % =
DIVIDE(
[Gross Profit],
[Total Sales]
)
I mange rapporter er det små funktioner som disse, der gør forskellen mellem en pæn rapport og en rapport, der faktisk svarer på forretningens spørgsmål.
DAX-eksempler til rapporter, KPI’er og tidsintelligens
Noget af det mest værdifulde ved DAX er muligheden for at lave beregninger, der ellers ville kræve ekstra behandling i datakilden eller manuelle workaround-løsninger i rapporten.
Tidsintelligens er et godt eksempel. Hvis modellen har en ordentlig datotabel, kan man bygge nøgletal som year-to-date, sidste år og rullende perioder ret elegant.
Sales YTD =
CALCULATE(
[Total Sales],
DATESYTD('Date'[Date])
)
Sales Last Year =
CALCULATE(
[Total Sales],
DATEADD('Date'[Date], -1, YEAR)
)
Det gør det muligt at vise udvikling over tid, sammenligne perioder og lave dashboards, hvor ledelsen hurtigt ser retningen i salget.
En anden klassiker er andel af total. Det bruges i alt fra salgsrapporter til HR-overblik og budgetopfølgning.
Sales % of Total =
DIVIDE(
[Total Sales],
CALCULATE([Total Sales], ALL(Product))
)
Her beregnes det aktuelle salg i forhold til totalen på tværs af produktfilteret. Resultatet bliver langt mere brugbart end en almindelig sum, når man vil vise, hvad en kategori fylder.
DAX er også stærkt, når der findes flere datoer i samme faktatabel. Man kan have både ordredato og leveringsdato, men kun én relation er aktiv ad gangen. Med USERELATIONSHIP() kan man aktivere den alternative relation inde i et bestemt measure.
Sales by Ship Date =
CALCULATE(
[Total Sales],
USERELATIONSHIP(Sales[ShipDate], 'Date'[Date])
)
Det er en meget praktisk løsning i modeller, hvor samme data skal vises fra flere vinkler.
Typiske forretningsscenarier, hvor DAX giver stor værdi, er ofte disse:
- Salg: omsætning, dækningsgrad, udvikling mod sidste år
- Drift: antal sager, svartider, backlog og SLA-opfølgning
- Økonomi: budget mod faktisk, afvigelser og rullende forecasts
- Ledelsesrapportering: KPI’er, segmenter og sammenligning mellem enheder
DAX og datamodel: derfor hænger det tæt sammen
DAX bliver bedst, når datamodellen er velbygget. Mange problemer, der ser ud som DAX-fejl, er i virkeligheden modelproblemer. Manglende datotabel, uklare relationer eller for mange mange-til-mange-forbindelser skaber hurtigt forvirring.
En god model gør tre ting. Den gør resultaterne mere korrekte. Den gør koden kortere. Og den gør rapporten hurtigere.
Det er også grunden til, at undervisning i Power BI sjældent kun handler om formler. DAX giver mest mening sammen med modeldesign, filterretning og valg af beregningstype. I praksis hænger Power Query, datamodel og DAX tæt sammen.
Gode arbejdsvaner med DAX i Power BI
Når man vil arbejde mere effektivt med DAX, er der nogle vaner, der betaler sig ret hurtigt. De handler ikke kun om teknik, men også om struktur og vedligeholdelse.
- Start med measures: Brug measures til analyser og KPI’er, før du overvejer calculated columns
- Brug
VAR: Variabler gør lange udtryk lettere at læse og rette - Lav en datotabel: Det er næsten et krav, hvis rapporten skal have ordentlig tidsintelligens
- Hold modellen enkel: Et stjerneskema gør DAX mere forudsigelig
- Test i små bidder: Byg ét measure ad gangen og kontroller resultatet i en simpel tabel
Et eksempel med variabler ser ofte mere overskueligt ud end en lang formel med gentagelser:
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Total Sales], DATEADD('Date'[Date], -1, YEAR))
RETURN
DIVIDE([Total Sales] - SalesPriorYear, SalesPriorYear)
Det er lettere at læse, lettere at fejlfinde og ofte også lettere at forklare til kolleger.
CoPilot og andre AI-værktøjer kan være nyttige her. De kan hjælpe med at foreslå et første udkast til et measure, forklare forskellen på SUM() og SUMX() eller omskrive en formel til en mere læsbar version. Men DAX skal stadig valideres i den konkrete model. AI kan hjælpe med fart og inspiration, men den kan ikke gætte de rigtige relationer eller forretningsregler uden kontrol fra en bruger, der kender data.
Sådan kommer man godt i gang med DAX i Power BI
Det bedste sted at starte er ikke de mest avancerede funktioner. Det er de beregninger, man faktisk har brug for i hverdagen. En god læringsvej er at tage udgangspunkt i en rapport, man allerede bruger, og så forbedre den trin for trin.
- Opret et simpelt measure med
SUM() - Lav et procentmeasure med
DIVIDE() - Byg en YTD-beregning med en datotabel
- Test et
CALCULATE()-measure med et ekstra filter - Sammenlign resultatet i flere visualer og slicers
Når det sidder, bliver det langt lettere at gå videre til iteratorer, relationstricks og mere avancerede mønstre.
DAX kan virke teknisk i starten, men i praksis handler det om noget meget jordnært: at få Power BI til at svare mere præcist, hurtigere og mere fleksibelt på de spørgsmål, virksomheden stiller hver dag. Det er derfor, DAX bliver ved med at være et centralt emne på Power BI-kurser, i rapportprojekter og i arbejdet med moderne Microsoft 365-baserede beslutningsværktøjer.