Tirsdag formiddag. Du har bygget en pæn tabel-visual: afdeling som rækker, antal ordrer som værdi. Du sender et screenshot til CFO. Hendes svar:
"Fint. Men jeg vil have et felt der altid viser Salg-afdelingens tal. Også når jeg klikker en anden afdeling i sliceren. Som et benchmark."
Du tænker: "Den er nem. Jeg laver en visuel-filter der hedder Afdeling = Salg."
Du opdager problemet med det samme: når CFO'en klikker på "Webshop" i sliceren, forsvinder dit Salg-tal. Visuelle filtre adlyder slicers. Det er hele pointen med slicers.
Du har brug for en måde at sige: "Beregn det her - men ignorér rapportens filter på afdeling. Brug i stedet altid Salg."
Det er præcis hvad CALCULATE gør.
CALCULATE - den vigtigste DAX-funktion¶
Hvis du kun lærer én DAX-funktion, så lær den her. CALCULATE modificerer filterkontekst - og filterkontekst er, som vi så i sidste modul, hele fundamentet for DAX.
Syntaks¶
På dansk: "Beregn udtrykket - men lad mig først ændre filtrene."
Løsningen på CFO'ens ønske¶
Indsæt målet. Træk det ind i et card-visual ved siden af din tabel. Klik på "Webshop" i sliceren. Tallet bliver stående.
Det er fordi CALCULATE har overskrevet filteret på Afdeling. Sliceren siger "Webshop", men CALCULATE siger "uanset hvad, brug Salg". CALCULATE vinder.
Hvad sker der under motorhjelmen¶
CALCULATE kører i tre trin:
- Starter med rapportens nuværende filterkontekst (slicers, række/kolonne i visual osv.).
- Modificerer den med de filtre du har angivet - overskriver eksisterende filtre på samme kolonne.
- Evaluerer udtrykket i den nye, modificerede kontekst.
Rapportens nuværende filtre
(slicer = Webshop)
│
▼
CALCULATE
┌───────────────────┐
│ Afdeling = "Salg" │ ◄── overskriver slicer
└─────────┬─────────┘
▼
COUNTROWS( Salg ) evalueres
Resultat: 1.247
Et eksempel mere - totalen uanset filter¶
CFO'en spørger næste dag: "Hvad er andelen af Salg-afdelingen af de samlede ordrer?"
Du har brug for to tal: ordrer i den filtrerede kontekst, og det samlede antal uanset filter. Det sidste kræver at du fjerner alle filtre på afdeling:
Ordrer Total =
CALCULATE(
COUNTROWS( Salg ),
ALL( Salg[Afdeling] )
)
ALL er en hjælper der siger til CALCULATE: "Fjern filteret på den her kolonne." Hvis du klikker på Webshop i sliceren, viser Ordrer Total stadig tallet for alle afdelinger.
Når begge mål er på plads, kan du bygge andelen - men det venter til modul 9.
Almindelig fejl - boolske filtre med flere kolonner¶
Det her virker ikke:
Ordrer Salg Erhverv =
CALCULATE(
COUNTROWS( Salg ),
Salg[Afdeling] = "Salg" && Salg[Dato] >= DATE(2026, 9, 15) -- ❌
)
Et boolsk filter må kun referere til én kolonne. Skriv dem som separate argumenter:
Ordrer Salg Efter 15 =
CALCULATE(
COUNTROWS( Salg ),
Salg[Afdeling] = "Salg",
Salg[Dato] >= DATE(2026, 9, 15) -- ✅
)
De forenes automatisk med AND.
Øvelse - prøv selv¶
CFO'en spørger: "Hvor mange ordrer i kategorien Audio? Skal stå fast i toppen af rapporten."
Skriv målet selv før du kigger.
Løsningsforslag
Bemærk at filteret er på Produkter-tabellen, ikke på Salg. Det er fint - relationen mellem de to tabeller gør at filteret automatisk flyder over til Salg.
Hvad du har lært¶
- CALCULATE modificerer filterkontekst - overskriver, tilføjer eller fjerner filtre.
- ALL fjerner filtre på en kolonne, så du kan beregne totaler "på tværs af alt".
- Boolske filtre må kun referere til én kolonne - del dem op i separate argumenter.
Næste problem: omsætningen findes ikke som kolonne. Det er der ingen CALCULATE der kan redde dig fra. Du har brug for et nyt værktøj.