Fredag morgen. Sidste sten i puslespillet.
"Når jeg viser omsætningen pr. kategori, vil jeg have en lille markør. Grøn hvis vi er over budget, rød hvis vi er under. Bare som tekst - 'Over' eller 'Under'."
Du tænker: "Nu er vi tilbage i Excel-land. IF-formel."
Du har faktisk ret. IF i DAX er stort set det samme som IF i Excel - den vurderer en betingelse og returnerer én ting hvis sand, noget andet hvis falsk.
IF - betinget logik¶
Syntaks¶
Stort set identisk med Excel. Den eneste forskel er at i DAX kan både betingelsen og returværdierne være målbaseret - så formlen er dynamisk og opdaterer sig pr. visual-celle.
Løsningen¶
Først skal du have budgettallet pr. kategori. Budgettet ligger i Produkter[MaanedsBudget] - pr. produkt. Pr. kategori bliver det summen af produkternes budgetter:
Når du trækker Produkter[Kategori] ind som rækker, viser det budget pr. kategori - SUM aggregerer automatisk.
Nu kan du lave statussen:
Træk den ind i din kategori-tabel som en kolonne - nu står "Over" eller "Under" ved siden af hver kategoris omsætning.
Mere end to udfald - nestet IF eller SWITCH¶
CFO'en vil have mere nuance:
"Faktisk vil jeg gerne se tre niveauer. Hvis vi er mere end 10% over: 'Stærkt over'. Hvis vi er inden for 10% af budgettet: 'På sporet'. Ellers: 'Under'."
Du kan neste IF'er:
Budget Status 3 =
IF(
[Total Omsætning] >= [Månedsbudget] * 1.10,
"Stærkt over",
IF(
[Total Omsætning] >= [Månedsbudget] * 0.90,
"På sporet",
"Under"
)
)
Det virker, men det bliver hurtigt uoverskueligt med fire-fem niveauer. Brug i stedet SWITCH med en TRUE()-konstruktion:
Budget Status 3 =
SWITCH(
TRUE(),
[Total Omsætning] >= [Månedsbudget] * 1.10, "Stærkt over",
[Total Omsætning] >= [Månedsbudget] * 0.90, "På sporet",
"Under"
)
SWITCH er ikke en af de fem funktioner i kursets kerne, men det er den pænere måde at skrive nestede IF'er. Lær den - du kommer til at bruge den.
IF kombineret med tomme/manglende værdier¶
En klassisk fælde: dit visual har en kategori uden salg i september. Total Omsætning returnerer BLANK (ikke 0). Hvad sker der med din IF?
DAX behandler BLANK som 0 i sammenligninger, så det returnerer "Under". Det er normalt det du vil - men nogle gange vil du eksplicit håndtere det:
Budget Status Sikker =
IF(
ISBLANK( [Total Omsætning] ),
"Ingen salg",
IF( [Total Omsætning] >= [Månedsbudget], "Over", "Under" )
)
Brug IF i betinget formatering¶
Tekst-statussen er fint, men CFO'en vil i virkeligheden have grøn/rød farve på selve omsætningstallet. Det gør du ikke med IF i selve målet - du gør det via Power BI's betingede formatering:
- Klik på dit visual, find
Total Omsætningi værdier. - Klik på pil ned → Betinget formatering → Skriftfarve.
- Vælg Formater efter: Feltværdi.
- Lav et nyt mål:
Status Farve =
IF( [Total Omsætning] >= [Månedsbudget], "#2E7D32", "#C62828" )
Vælg det som feltværdi for farven. Nu skifter tallets farve dynamisk efter status. Det er Power BI-trickset CFO'en faktisk ville have.
Øvelse - performance-flag på handler¶
Lav en beregnet kolonne på Salg der hedder Handelsstørrelse og som returnerer:
- "Stor" hvis linjeomsætning over 10.000
- "Mellem" hvis mellem 2.000 og 10.000
- "Lille" ellers
Løsningsforslag
Handelsstørrelse =
VAR LinjeOms = Salg[Antal] * Salg[EnhedsPris] * ( 1 - Salg[Rabat] )
RETURN
SWITCH(
TRUE(),
LinjeOms > 10000, "Stor",
LinjeOms >= 2000, "Mellem",
"Lille"
)
Her bruger jeg VAR til at gemme linjeomsætningen - så slipper jeg for at gentage formlen tre gange. Det er den slags oprydning modul 9 viser dig.
Hvad du har lært¶
- IF virker som i Excel - betingelse, sand, falsk.
- For flere udfald: brug SWITCH med TRUE() i stedet for nestede IF'er.
- Husk at BLANK opfører sig som 0 i sammenligninger - eksplicit håndtering med
ISBLANKhvis du har brug for det. - Til farve-formatering: lav et separat mål der returnerer hex-koder, og brug det i betinget formatering.
Du har nu set alle fem funktioner. Sidste modul samler dem i ét stort mål.