CALCULATE i Power BI: derfor viser din andel 100 procent

Table of contents
- 1. Filterkontekst: hver celle regner for sig
- 2. CALCULATE i én sætning
- 3. Måling 1: én region, uanset hvad rækken siger
- 4. Måling 2: andel af total, der rent faktisk virker
- 5. Måling 3: samme periode sidste år
- De fire fejl der giver forkerte tal
- Tre greb der gør det lettere
- Prøv det selv
- Til sidst
Du har en tabel med omsætning per region, og chefen vil gerne se, hvor stor en del hver region står for. Du laver en måling, der deler omsætningen med den samlede omsætning. Resultatet står i alle fire rækker: 100 %.
Du prøver at skrive det om, og det bliver ved. I Excel ville du bare have delt med cellen i bunden af kolonnen, men sådan en celle findes ikke i Power BI.
Det er her, CALCULATE kommer ind. Det er den funktion, der skiller de simple målinger fra dem, der rent faktisk svarer på chefens spørgsmål, og det er også den, flest går i stå på. Her får du forklaringen på, hvad der sker, og tre målinger du kan bruge i morgen: én region for sig, andel af total og samme periode sidste år. Regn med en halv time.
To praktiske ting inden du går i gang. DAX-funktionerne hedder det samme på dansk og engelsk, så CALCULATE hedder CALCULATE. Og Power BI bruger som standard komma mellem argumenterne, også på en dansk maskine, hvor Excel bruger semikolon.
1. Filterkontekst: hver celle regner for sig
Hvad det betyder: En måling i Power BI har ikke ét resultat. Den bliver regnet ud forfra i hver eneste celle i din tabel eller dit diagram. Og hver gang får den et sæt filtre med: den række den står i, det udsnitsværktøj der er valgt, og de filtre der er sat på siden.
Det sæt filtre hedder filterkonteksten.
Hvorfor det giver 100 %: I rækken med Nord regner målingen kun på Nords salg, fordi rækken filtrerer på Nord. Det gælder også for den del af formlen, der skulle være totalen. Så du deler Nord med Nord, Syd med Syd, og så videre. Svaret er 100 % hver gang, og Power BI gør præcis, hvad du bad om.
Sådan tænker du fremover: Når en måling giver et mærkeligt tal, så spørg ikke "hvad er formlen forkert". Spørg "hvilke filtre har den fået med i den her celle". Det er den ene vane, der gør DAX til at forstå.
2. CALCULATE i én sætning
Hvad den gør: CALCULATE regner et udtryk ud, men med ændrede filtre. Det er det hele.
CALCULATE(udtryk, filter1, filter2, ...)
Det første argument er det, der skal regnes, typisk en måling du allerede har. Resten er de filtre, du vil lægge på, tage af eller skifte ud, før der bliver regnet.
Start altid med en simpel grundmåling, som de andre kan bygge videre på. Vælg tabellen Salg i Data-ruden, klik Ny måling i gruppen Beregninger på fanen Hjem, og skriv i formellinjen:
Omsætning = SUM(Salg[Beløb])
Så har du én måling, som resten henter fra. Skal definitionen af omsætning ændres en dag, retter du det ét sted.
3. Måling 1: én region, uanset hvad rækken siger
Omsætning Nord = CALCULATE([Omsætning], Salg[Region] = "Nord")
Hvad der sker: Filteret på Region bliver skiftet ud med Nord. Sætter du målingen ind i tabellen ved siden af regionerne, står der det samme tal i alle rækker: Nords omsætning. Rækkens eget filter på Syd, Øst eller Vest bliver overskrevet.
Hvor du bruger den: Til benchmark. "Hvordan klarer de andre regioner sig i forhold til Nord" kræver, at Nords tal står i hver række, så du kan trække fra eller dele.
Læg mærke til: Andre filtre bliver ikke rørt. Vælger du 2026 i et udsnitsværktøj, er det stadig Nord i 2026. CALCULATE ændrer kun de filtre, du nævner.
4. Måling 2: andel af total, der rent faktisk virker
Løsningen på 100 %-problemet er to målinger. Først en der fjerner filteret på Region:
Omsætning alle regioner = CALCULATE([Omsætning], REMOVEFILTERS(Salg[Region]))
Derefter selve andelen:
Andel af total = DIVIDE([Omsætning], [Omsætning alle regioner])
Hvad der sker: I rækken med Nord regner [Omsætning] stadig kun på Nord. Men [Omsætning alle regioner] fjerner filteret på Region og regner på dem alle. Nu deler du Nord med totalen. I øvelsesfilen giver det 2.088.100 ud af 6.605.000 for 2026, altså 31,6 %.
To detaljer der tæller: Brug DIVIDE i stedet for skråstreg. DIVIDE giver et tomt resultat i stedet for en fejl, når der ikke er noget at dele med. Og husk at formatere målingen som procent på den fane, der dukker op i båndet, når målingen er valgt. Ellers står der 0,32.
I ældre eksempler vil du se ALL i stedet for REMOVEFILTERS. Inde i CALCULATE gør de det samme her, men REMOVEFILTERS siger bedre, hvad den gør.
5. Måling 3: samme periode sidste år
Omsætning sidste år = CALCULATE([Omsætning], SAMEPERIODLASTYEAR(Dato[Dato]))
Hvad der sker: Filteret på datoerne bliver flyttet et år tilbage. Står du i rækken marts 2026, regner målingen på marts 2025. Derefter er væksten lige til:
Vækst % = DIVIDE([Omsætning] - [Omsætning sidste år], [Omsætning sidste år])
Kravet de fleste falder over: SAMEPERIODLASTYEAR skal have en rigtig datotabel. Det vil sige en tabel med én række for hver dag, uden huller, forbundet til din salgstabel med en relation på datoen. Peger du på datokolonnen i selve salgstabellen, hvor der kun står de dage, der var salg, får du huller og forkerte tal.
Sådan gør du: Lav en separat tabel med alle dage, forbind den til salget i Modelvisning, højreklik på tabellen og markér den som datotabel. Bruger du den tabel til måneder og år i dine diagrammer, virker tidsfunktionerne.
De fire fejl der giver forkerte tal
Andelen er 100 % overalt. Du har glemt at fjerne filteret i nævneren. Se afsnit 4.
Sidste år er tomt eller forkert. Der mangler en datotabel, den er ikke forbundet, eller du bruger måneden fra salgstabellen i diagrammet i stedet for måneden fra datotabellen.
Udsnitsværktøjet bliver ignoreret. Du har skrevet et filter i CALCULATE på netop den kolonne, udsnitsværktøjet bruger. Så overskriver din formel brugerens valg. Det er med vilje i Omsætning Nord, men ikke hvis du ville have det modsatte.
Du har lavet en beregnet kolonne i stedet for en måling. En beregnet kolonne regnes én gang per række, når data indlæses, og reagerer ikke på udsnitsværktøjer. Andele, vækst og sammenligninger skal være målinger.
Tre greb der gør det lettere
- Byg altid oven på en grundmåling. [Omsætning] først, så alt det andet. Det gør formlerne korte og til at læse.
- Brug Ny hurtig måling til at lære. Den ligger ved siden af Ny måling og kan selv skrive en andel af total eller en ændring fra år til år. Kig på den DAX, den laver, og sammenlign med formlerne herover.
- Test i en tabel, ikke i et diagram. Sæt målingen i en tabel med regionerne eller månederne ved siden af. Tal kan du tjekke. Søjler kan du ikke.
Prøv det selv
Jeg har lavet en Excel-fil med knap 1.000 salgslinjer fra januar 2025 til august 2026 og en færdig datotabel med alle dage i begge år. Begge er formateret som tabeller, så de dukker pænt op i Navigator, når du henter dem ind i Power BI Desktop.
På forsiden står de seks målinger, du skal skrive, og hvordan du sætter relationen op. Facit-arket viser de tal, du skal ramme for 2026, både per region og per måned, så du kan se, om det virker.
Hent øvelsesfilen (Excel, xlsx)
Er du helt ny i Power BI, så start med Fra Excel til din første Power BI-rapport og kom tilbage hertil bagefter.
Til sidst
CALCULATE er ikke svær, fordi formlen er lang. Den er svær, fordi den forudsætter, at du tænker på filtrene i stedet for på cellerne. Når det først sidder, kan du bygge næsten alle de sammenligninger, chefen spørger efter.
Hos KontorAkademiet tager jeg en time om måneden med den slags praktiske greb. Ikke i et bestemt program, men i det du sidder med til daglig, så du og dine kollegaer får timerne tilbage lidt efter lidt.