Fredag eftermiddag. CFO'en stikker hovedet ind igen:
"En sidste ting - jeg vil have ét mål øverst i rapporten der siger om vi som helhed er i 'Vækst' eller 'Tilbagegang' sammenlignet med sidste år. Skal være på de store handler - over 10.000. Brug omsætning som mål."
Det her er ikke ét nyt problem - det er alle fem funktioner i én formel. Lad os bygge det op.
Hvad vi har brug for¶
- Omsætning fra de store handler i indeværende år (SUMX + FILTER).
- Omsætning fra de store handler i sidste år (CALCULATE der overskriver datofiltret).
- Sammenligning af de to (IF).
- Pr. kategori (kommer automatisk via filterkontekst - slicer eller række).
- Kategori-informationen hentes via RELATED.
Det er præcis den øvelse Anthony Obot afslutter sin artikel med - bare tilpasset vores controller-case.
Trin 1 - omsætning over 10.000¶
Vi har den allerede fra modul 7, men her er den igen med en VAR der renser op:
Omsætning Store Handler =
VAR StorTærskel = 10000
RETURN
SUMX(
FILTER(
Salg,
Salg[Antal] * Salg[EnhedsPris] * ( 1 - Salg[Rabat] ) > StorTærskel
),
Salg[Antal] * Salg[EnhedsPris] * ( 1 - Salg[Rabat] )
)
VAR gør to ting: tærsklen er nu nem at ændre på ét sted, og hvis du bruger linjeomsætningen flere gange (det gør vi nedenfor) bliver formlen kortere.
Trin 2 - samme tal for sidste år¶
Antag du har en kalender-tabel Kalender med en relation til Salg[Dato]. Hvis ikke, kan du gøre det enkelt med et eksplicit datofilter - men i en rigtig rapport vil du altid have en kalendertabel. Det er emne for et andet kursus.
For at sammenligne med sidste år, bruger vi CALCULATE til at overskrive datofiltret:
Omsætning Store Handler SidsteÅr =
CALCULATE(
[Omsætning Store Handler],
SAMEPERIODLASTYEAR( Kalender[Dato] )
)
SAMEPERIODLASTYEAR er en tids-intelligens-funktion der flytter datofiltret ét år tilbage. Den er ikke en af kursets fem funktioner, men du kommer til at bruge den så ofte at den fortjener en omtale her.
Hvis du ikke har en kalendertabel
Det er fint for at lære DAX, men ikke for en rigtig rapport. Hurtigste fix: gå i Modellering → Ny tabel og indsæt:
Markér den, og under Tabelværktøjer → Markér som datotabel. Lav relation fraKalender[Date] til Salg[Dato].
Trin 3 - vækst eller tilbagegang¶
Nu kombinerer vi det hele:
Vækststatus =
VAR Nu = [Omsætning Store Handler]
VAR Før = [Omsætning Store Handler SidsteÅr]
VAR Vækst = Nu - Før
VAR VækstProcent = DIVIDE( Vækst, Før, 0 )
RETURN
SWITCH(
TRUE(),
ISBLANK( Før ), "Ingen sammenligning",
VækstProcent >= 0.05, "Vækst",
VækstProcent >= -0.05, "Stabilt",
"Tilbagegang"
)
Læg mærke til strukturen:
- VAR-blokken øverst gemmer mellemresultater - gør formlen læsbar.
- RETURN definerer det endelige output.
- SWITCH med TRUE() håndterer tre udfald + en kantsag (ingen sammenligning).
Det her mål bruger nu alle fem funktioner indirekte: SUMX (i [Omsætning Store Handler]), FILTER (samme sted), CALCULATE (i sidste-år-målet), RELATED (gennem Kalender-relationen), og IF/SWITCH (her).
Visuel opsætning - det færdige produkt¶
Når målene er på plads, byg det her layout:
| Visual | Indhold |
|---|---|
| Card øverst | Vækststatus - stort, fed tekst |
| Card ved siden af | Omsætning Store Handler med formattering DKK |
| Søjlediagram | x = Produkter[Kategori], værdi = Total Omsætning, betinget farve via Status Farve |
| Tabel nederst | Kolonner: Kategori, Total Omsætning, Månedsbudget, Budget Status 3 |
| Slicer | Salg[Afdeling] til at filtrere alt |
Send et screenshot til CFO klokken 16:47 fredag.
"Perfekt. Tak."
Hvad du har lært i denne uge¶
| Spørgsmål | Funktion | Hvad den løste |
|---|---|---|
| Lås filteret til Salg | CALCULATE | Overskriv eller fjern filtre |
| Omsætning der ikke findes som kolonne | SUMX | Beregn pr. række, summér efter |
| Kategori fra den anden tabel | RELATED | Slå op via relationen |
| Kun handler over 10.000 | FILTER | Komplekse filterbetingelser |
| Over eller under budget | IF / SWITCH | Betinget logik |
Og det er det. Fem funktioner. De dækker virkelig 80-90% af konkrete forretningsanalyser i Power BI.
Hvad du bør lære som det næste¶
Hvis du er fortsat sulten:
- VAR / RETURN - du har set det her. Brug det altid på sammensatte mål. Gør koden læselig og hurtigere.
- Tids-intelligens-funktioner -
DATEADD,SAMEPERIODLASTYEAR,TOTALYTD. Forudsætter en kalendertabel; så er de magi. - DIVIDE i stedet for
/- undgår #DIV/0!-fejl, returnerer BLANK eller en alternativ værdi. - ALL / ALLEXCEPT - i kombination med CALCULATE giver det dig procentdele, andele, og "alt undtagen denne kolonne"-effekter.
- Calculation groups - Tabular Editor-feature. Når du gentager den samme formel for "i år", "sidste år", "to år siden", "år til dato" - det her er svaret.
Hvor du finder hjælp¶
- sqlbi.com - Marco Russo og Alberto Ferraris site. Den autoritative DAX-kilde.
- The Definitive Guide to DAX (2. udg.) - bibelen. Tung men værd at have.
- dax.do - sandkasse i browseren.
- Guy in a Cube - daglige korte videoer om Power BI.
Et sidste råd¶
DAX bliver først rigtig din, når du stopper med at copy-paste formler du ikke forstår. Når du finder en formel på et forum, læs den. Pak den ud. Byg den selv. Lege med den. Det er først dér den sætter sig fast.
Lykke til. Du har værktøjerne nu.