Gå til indholdet

Snydeark

Print eller bogmærk. Hurtig reference når du er færdig med kurset.

De fem funktioner i én tabel

Funktion Formål Minimumseksempel
CALCULATE Modificer filterkontekst CALCULATE( SUM( T[X] ), T[Y] = "A" )
SUMX Row-by-row sum SUMX( T, T[A] * T[B] )
RELATED Hent værdi fra én-siden RELATED( Dim[Kategori] )
FILTER Kompleks filterbetingelse FILTER( T, T[A] * T[B] > 100 )
IF Betinget logik IF( [Salg] > [Budget], "Over", "Under" )

Beslutningstræ

Vil du beregne en aggregering?
├── Simpelt (kolonne der findes)?   → SUM, COUNT, AVERAGE
└── Pr. række så sum?                → SUMX

Vil du dele to tal?                  → DIVIDE (sikker mod /0)

Vil du modificere filterkonteksten?  → CALCULATE
├── Simpelt filter (én kolonne)?    → CALCULATE( udtryk, Tabel[Kol] = "x" )
└── Kompleks (flere kolonner)?      → CALCULATE( udtryk, FILTER(...) )

Vil du slå op i en relateret tabel?
├── Fra mange-siden?                → RELATED
└── Fra én-siden?                   → RELATEDTABLE eller en aggregering

Betinget logik?
├── To udfald?                      → IF
└── Flere udfald?                   → SWITCH( TRUE(), ... )

Filterkontekst - det vigtigste

Filterkontekst er den mængde filtre der gælder i det øjeblik et mål bliver evalueret. Den kommer fra:

  • Slicers
  • Række og kolonne i visual'en
  • Visual-level filters
  • Page filters, report filters
  • DAX-funktioner som CALCULATE (modificerer eksisterende kontekst)

Når du forstår filterkontekst, forstår du DAX.

Mål vs. beregnet kolonne

Mål Beregnet kolonne
Dynamisk - beregnes når visualet viser det Statisk - beregnes ved datasæt-opdatering
Til aggregeringer, KPI'er, totaler, procent Til kategoriseringer, opslag, flag pr. række
Fylder ingenting i modellen Fylder rigtig plads
Kan ikke filtreres på direkte Kan filtreres som almindelig kolonne
Foretræk altid mål Kun når du virkelig har brug for det

Performance - tommelfingerregler

Hurtigt Langsomt
Simple CALCULATE-filtre FILTER over store fakta-tabeller
SUM på beregnet kolonne SUMX over millioner af rækker
Stjernemodel Mange-til-mange-relationer
Forberedelse i Power Query Beregnede kolonner i DAX

Skabeloner du genbruger

Total med ét fast filter

Salg = CALCULATE( SUM( Salg[Beløb] ), Produkter[Kategori] = "Audio" )

Andel af total

Andel =
DIVIDE(
    SUM( Salg[Beløb] ),
    CALCULATE( SUM( Salg[Beløb] ), ALL( Produkter ) ),
    0
)

Iteration med opslag

Listepris-Sum =
SUMX( Salg, Salg[Antal] * RELATED( Produkter[Listepris] ) )

Sikker procent (forudsætter DIVIDE)

% =
DIVIDE( [Tæller], [Nævner], 0 )

Status med flere niveauer

Status =
SWITCH(
    TRUE(),
    [Værdi] >= 1.10 * [Mål], "Stærkt over",
    [Værdi] >= 0.90 * [Mål], "På sporet",
    "Under"
)

Sammenligning med sidste år

Sidste År =
CALCULATE( [Total Omsætning], SAMEPERIODLASTYEAR( Kalender[Dato] ) )

Gode vaner

  • Brug VAR / RETURN når et udtryk gentages eller bliver kompliceret.
  • Navngiv mål så de forklarer sig selv: Omsætning Store Handler, ikke Mål27.
  • Indryk lange formler - Shift+Enter i formelboksen.
  • Test små formler først - byg komplekse mål op i lag.
  • Undgå bidirektionel filtrering med mindre du virkelig ved hvad du gør.
  • Undgå beregnede DAX-kolonner hvis Power Query kunne klare det.

Tilbage til forsiden