Gå til indholdet
Modul 4 af 9
Modul 4 · 7 min

Modul 4 - CFO låser udsigten

CFO'en vil have salgsafdelingen låst, uanset hvilken slicer der står på. CALCULATE er svaret.

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

CALCULATE(
    <udtryk>,
    <filter1>,
    <filter2>,
    ...
)

På dansk: "Beregn udtrykket - men lad mig først ændre filtrene."

Løsningen på CFO'ens ønske

Antal ordrer - låst til Salg
Ordrer Salg =
CALCULATE(
    COUNTROWS( Salg ),
    Salg[Afdeling] = "Salg"
)

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:

  1. Starter med rapportens nuværende filterkontekst (slicers, række/kolonne i visual osv.).
  2. Modificerer den med de filtre du har angivet - overskriver eksisterende filtre på samme kolonne.
  3. 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 på tværs af alle afdelinger
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
Ordrer Audio =
CALCULATE(
    COUNTROWS( Salg ),
    Produkter[Kategori] = "Audio"
)

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.