Dataanalys

DAX och datamodellering: Grunden för starka Power BI-rapporter

Lär dig grunderna i DAX och datamodellering för Power BI. Upptäck hur star schema, relationer och DAX-funktioner skapar starka rapporter.

BijoyIQ 27 juli 2026 5 min läsning
Dela

DAX och datamodellering: Grunden för bra Power BI-rapporter

När vi pratar om Business Intelligence hamnar fokus ofta på de visuella delarna. Det är ju graferna och nyckeltalen som möter användaren först. Sanningen är dock att merparten av en bra Power BI-rapport faktiskt utgörs av det som sker under ytan. Den solida datamodelleringen och de välskrivna DAX-uttrycken är grunden för all analys. Utan en ordentlig struktur kommer även den snyggaste rapporten att lida av prestandaproblem och felaktiga beräkningar. Dessutom blir det svårt att anpassa lösningen när verksamhetens behov förändras över tid.

I dagens datainfrastruktur är Power BI det absolut bästa BI-verktyget för svenska företag. Verktyget kan hantera stora datamängder och integrera med många olika källor för att ge tydliga insikter. För att utnyttja denna potential behöver vi ju förstå de två hörnstenarna i plattformen, nämligen datamodellering och Data Analysis Expressions (DAX). I den här artikeln går vi igenom de viktigaste koncepten från stjärnschema till tidsintelligens. Vi tittar på praktiska exempel från svensk detaljhandel och tillverkningsindustri för att se hur du bygger modeller som fungerar bra både nu och i framtiden.

Datamodellering: Arkitekturen bakom insikterna

Att bygga en datamodell i Power BI handlar om att strukturera olika datakällor på ett sätt som optimerar prestandan. Det är här vi transformerar rådata från affärssystem eller Excel-filer till en logisk struktur som användarna faktiskt kan förstå. En bristfällig datamodell leder nog ofta till onödigt komplicerade och långsamma DAX-beräkningar. En välbyggd modell gör däremot analysen intuitiv och snabb.

Stjärnschema: Standarden för analytiska modeller

Inom Power BI är stjärnschema den mest rekommenderade designmetodiken. Konceptet är faktiskt ganska enkelt i grunden. Du har en central faktatabell som är omgiven av relaterade dimensionstabeller, vilket visuellt påminner om en stjärna. Denna struktur är optimerad för VertiPaq-motorn i Power BI. Det ger en bra komprimering av data och snabba svarstider även när vi hanterar miljontals rader.

Faktatabeller innehåller de kvantitativa mätvärdena och transaktionerna i din verksamhet. I ett svenskt detaljhandelsföretag kan detta till exempel vara enskilda försäljningstransaktioner i kassan eller dagliga lagersaldon per artikel. Dessa tabeller är ofta mycket långa men relativt smala med få kolumner. De innehåller primärt numeriska värden som antal och belopp samt nycklar som pekar mot de omgivande dimensionstabellerna. En välutformad faktatabell bör nog inte innehålla beskrivande textfält eftersom det försämrar komprimeringen avsevärt.

Dimensionstabeller innehåller den beskrivande informationen som ger kontext åt dina fakta. Det är här vi hittar detaljerad information om produkter, kunder, butiker och tid. Dimensionstabellerna är typiskt sett korta med betydligt färre rader än faktatabellerna. De är däremot breda med många beskrivande kolumner. Det är ju dessa tabeller som användarna drar in i sina rapporter för att filtrera och gruppera data.

Vikten av korrekta relationer och filtreringsriktning

Relationerna mellan fakta och dimensionstabeller håller ihop datamodellen och möjliggör analysen. I Power BI strävar vi alltid efter en-till-många-relationer mellan dimensioner och fakta. Detta innebär alltså att en specifik produkt i produktdimensionen kan förekomma många gånger i försäljningsfaktatabellen.

Riktningen på korsfiltreringen är ett viktigt koncept att ha koll på. Den bör väl nästan uteslutande vara enkelriktad från dimension till fakta. När en användare filtrerar på en specifik region i butiksdimensionen går detta filter ner till faktatabellen. Det begränsar då försäljningsdatan till enbart de transaktioner som skett i just den regionen.

Att använda dubbelriktad korsfiltrering kan verka frestande för att lösa svåra filtreringsbehov. Det är förstås en genväg som ofta leder till prestandaproblem och oförutsägbart beteende i rapporterna. Det är bäst att undvika detta förutom i mycket specifika undantagsfall som vid hantering av många-till-många-relationer via en bryggtabell. En välstrukturerad design med stjärnschema eliminerar oftast behovet av dubbelriktad filtrering helt och hållet.

För att förstå hur detta hänger ihop med modern datainfrastruktur och datapipelines är det viktigt att se helheten. Datamodelleringen i Power BI är ju ofta det sista steget i en lång kedja av datatransformationer. Oavsett om du använder ett datalager eller bygger direkt mot källsystem är målet alltid att leverera data i ett stjärnschema till Power BI.

Jämförelse av modelleringsmetoder

För att tydliggöra varför stjärnschema fungerar bäst i Power BI kan vi jämföra det med andra vanliga metoder som vi ofta stöter på ute hos företag.

EgenskapStjärnschemaPlatt tabellSnowflake-schema
Prestanda i Power BIHög (optimerad för VertiPaq-motorn)Låg (dålig komprimering och långsamma frågor)Medel (kräver fler kopplingar vilket kostar prestanda)
AnvändarvänlighetHög (intuitiv navigering och tydlig struktur)Låg (många kolumner gör det svårt att hitta rätt)Medel (komplex struktur där användaren måste förstå hierarkier)
DAX-komplexitetLåg (enkla uttryck och inbyggd tidsintelligens fungerar bra)Hög (svårt att hantera kontext med risk för fel)Medel (kan kräva komplexa filteruttryck)
Underhåll och skalbarhetEnkelt (tydlig separation av data)Svårt (redundant data och uppdateringsproblem)Komplext (många beroenden och risk för kaskadeffekter)

Som tabellen visar ger stjärnschema en bra balans mellan prestanda, användarvänlighet och underhåll. Det är därför vi förespråkar denna metodik när vi bygger dashboards och visualiserar data. Att ladda in platta tabeller direkt från Excel är nog oftast ett recept på framtida problem.

DAX: Språket för affärslogik och analys

När datamodellen är på plats är det dags att arbeta med Data Analysis Expressions (DAX). DAX är ett formelspråk från Microsoft för att hantera relationsdata och utföra aggregeringar i tabulära modeller. Det kan vid första anblicken påminna om Excel-formler. Under ytan är det faktiskt ett effektivt språk som bygger på helt andra principer än vanliga kalkylblad.

Förstå utvärderingskontext i DAX

Det viktigaste konceptet att förstå i DAX är utvärderingskontexten. Det är ju detta som avgör vilka rader i datamodellen som inkluderas i en specifik beräkning vid ett givet tillfälle. Utvärderingskontexten består av två delar, nämligen radkontext och filterkontext.

Radkontext uppstår när vi går igenom en tabell rad för rad. Detta sker primärt när vi skapar en beräknad kolumn eller när vi använder funktioner som SUMX, AVERAGEX eller FILTER. Radkontexten handlar alltså helt enkelt om att veta vilken specifik rad som för tillfället utvärderas. Om du skriver [Pris] * [Antal] i en beräknad kolumn vet DAX exakt vilket pris och vilket antal som ska multipliceras för varje enskild rad.

Filterkontext är den uppsättning filter som appliceras på datamodellen från rapportvyn. Detta inkluderar förstås filter från rapporten samt de rader och kolumner som används i en specifik visualisering. Om du tittar på en matris som visar försäljning per år och produktkategori kommer varje enskild cell i matrisen att ha en unik filterkontext.

Att förstå hur dessa två kontexter samverkar är alltså viktigt för att skriva korrekt DAX. Detta gäller särskilt när vi går från enkla ad-hoc-analyser till att formalisera standardrapporter som ska användas av hela organisationen.

CALCULATE: En central funktion i DAX

Om det finns en funktion du bör ha koll på i DAX så är det CALCULATE. Det är faktiskt en mycket använd funktion som har förmågan att modifiera filterkontexten. Med CALCULATE kan du lägga till nya filter eller ändra de filter som för tillfället är aktiva. Det gör det möjligt att utföra mer avancerade jämförelser och beräkningar.

Låt oss ta ett praktiskt exempel från ett svenskt tillverkningsföretag. Anta att vi har ett grundläggande mätvärde för total försäljning: Total Försäljning = SUM(Försäljning[Belopp]). Vi vill nu alltså skapa ett specifikt mätvärde som alltid visar försäljningen för produktkategorin "Kullager" oavsett vad användaren har valt i sina filter. Uttrycket skulle se ut så här:

Försäljning Kullager = CALCULATE([Total Försäljning], Produkter[Kategori] = "Kullager")

Här tar CALCULATE det befintliga mätvärdet [Total Försäljning] och utvärderar det i en ny filterkontext. Argumentet Produkter[Kategori] = "Kullager" åsidosätter eventuella befintliga filter på produktkategorin och låser beräkningen till just "Kullager". Detta är grunden för att bygga flexibla nyckeltal. Det är ju viktigt för företagsledare som vill fatta datadrivna beslut baserat på tillförlitliga jämförelsetal.

Ett annat vanligt scenario är förstås att vi vill beräkna andelen av totalen. Då kan vi använda CALCULATE tillsammans med funktionen ALL för att ta bort filter:

Andel av Total Försäljning = DIVIDE([Total Försäljning], CALCULATE([Total Försäljning], ALL(Produkter)))

Här tar ALL(Produkter) bort alla filter som ligger på produkttabellen. Det ger oss alltså den totala försäljningen för alla produkter som vi sedan kan dividera den specifika produktens försäljning med.

Tidsintelligens: Att analysera trender över tid

Ett vanligt krav i affärsanalys är att jämföra prestationer över tid. Hur går försäljningen i år jämfört med samma period förra året? Vad är det rullande genomsnittet för de senaste tolv månaderna? DAX har inbyggda tidsintelligensfunktioner som gör dessa beräkningar enklare. Det förutsätter förstås att du har en korrekt konfigurerad datumdimension i din datamodell.

Ett klassiskt mönster är beräkningar för hittills i år (YTD). För att beräkna den ackumulerade försäljningen från årets början fram till det aktuella datumet i filterkontexten använder vi alltså funktionen TOTALYTD:

Försäljning YTD = TOTALYTD([Total Försäljning], 'Datum'[Datum])

För att jämföra detta med samma period föregående år kombinerar vi ju CALCULATE med funktionen SAMEPERIODLASTYEAR:

Försäljning YTD Föregående År = CALCULATE([Försäljning YTD], SAMEPERIODLASTYEAR('Datum'[Datum]))

Med dessa två mätvärden på plats kan vi beräkna variansen och tillväxten i procent. Tidsbaserade jämförelser är bra för att identifiera trender och förstå säsongsvariationer. Det är nog ett första steg mot mer prediktiv analys och långsiktig hållbarhet av verksamheten.

Ett annat mönster är förstås rullande medelvärden. Det kan till exempel vara ett rullande 30-dagarsgenomsnitt för att jämna ut dagliga fluktuationer i försäljningen:

Försäljning Rullande 30 Dagar = CALCULATE(AVERAGEX(VALUES('Datum'[Datum]), [Total Försäljning]), DATESINPERIOD('Datum'[Datum], MAX('Datum'[Datum]), -30, DAY))

Avancerade mönster och prestandaoptimering

När du har koll på grunderna i datamodellering och de centrala DAX-funktionerna kan du börja titta på mer avancerade mönster. Samtidigt blir prestandaoptimering faktiskt en viktig faktor i takt med att modellerna växer.

Dynamisk segmentering i praktiken

Ett vanligt mönster är ju dynamisk segmentering där vi grupperar kunder eller produkter baserat på deras beteende i realtid. Föreställ dig en svensk e-handlare som vill segmentera sina kunder baserat på deras totala köpesumma under den tidsperiod som användaren har valt i rapporten.

Vi kan lösa detta genom att skapa en frikopplad parametertabell med segment som brons, silver och guld. Där definierar vi alltså min- och maxvärden för varje segment. Genom att använda DAX kan vi sedan utvärdera varje kunds försäljning mot dessa gränsvärden och räkna antalet kunder i varje segment.

Detta kräver en förståelse för iteratorfunktioner och kontextövergångar. Resultatet blir faktiskt en analysmodell som låter användarna utforska kundbasen på ett interaktivt sätt. Denna typ av analys är en del i att bygga en datadriven kultur inom organisationen där medarbetarna uppmuntras att ställa frågor till sin data.

Hantering av många-till-många-relationer

I verkligheten är affärslogik sällan så enkel som strikta en-till-många-relationer. Ett vanligt scenario inom konsultverksamhet är ju att en anställd kan arbeta på flera projekt samtidigt som ett projekt kan ha flera anställda. Detta skapar en många-till-många-relation.

I Power BI löser vi detta bäst genom att introducera en bryggtabell som innehåller de unika kombinationerna av anställd och projekt. Vi skapar sedan en-till-många-relationer från våra dimensioner till bryggtabellen. För att filtren ska flöda korrekt genom bryggtabellen till vår faktatabell kan vi nog behöva hantera filtreringen dynamiskt i DAX med hjälp av funktionen CROSSFILTER. Detta säkerställer att vi bibehåller prestandan samtidigt som vi löser affärslogiken.

Prestandaoptimering: Att bygga för skala och hastighet

I takt med att datamängderna växer blir prestandaoptimering allt viktigare. En långsam rapport leder ju snabbt till frustration och minskat förtroende för datan. Här är några principer för att säkerställa att dina Power BI-rapporter förblir snabba även med miljontals rader data.

För det första bör du minimera antalet kolumner i din datamodell. VertiPaq-motorn är en kolumnbaserad databas som komprimerar data kolumn för kolumn. Varje onödig kolumn konsumerar faktiskt minne och försämrar prestandan. Ta bara in den data som faktiskt behövs för analysen. Detta är en viktig del av att förbereda data för AI och avancerad analys.

För det andra bör du undvika beräknade kolumner i DAX så långt det är möjligt. Beräknade kolumner utvärderas vid datauppdatering och lagras fysiskt i minnet. Det ökar förstås modellens storlek och uppdateringstid. Sträva istället efter att utföra radbaserade beräkningar så långt uppströms som möjligt, helst i datalagret eller i Power Query innan datan laddas in i modellen. Använd DAX primärt för mätvärden som utvärderas dynamiskt vid frågetillfället.

Slutligen bör du vara försiktig med komplexa iteratorfunktioner över stora faktatabeller. Försök att filtrera på dimensionstabeller istället för faktatabeller när du använder CALCULATE. Att filtrera en dimensionstabell med 1 000 rader är ju mycket snabbare än att filtrera en faktatabell med 10 miljoner rader. Att förstå hur VertiPaq-motorn exekverar dina DAX-frågor hjälper dig att skriva effektiv kod.

Från data till insikt: Helhetsperspektivet

Att behärska DAX och datamodellering är ett medel för att leverera insikter till verksamheten. När du har en solid grund på plats blir det alltså mycket enklare att bygga vidare med fler funktioner.

Du kan till exempel börja integrera AI-funktioner för att låta användarna ställa frågor till sin data på naturligt språk. Du kan också använda Power BI:s inbyggda verktyg för att bygga dashboards med AI-stöd. Dessa funktioner bygger på att den underliggande datamodellen är logiskt strukturerad och att DAX-mätvärdena är korrekt definierade. AI fungerar nog bäst som ett komplement till en välbyggd datamodell och djup förståelse för verksamhetens behov.

En välbyggd Power BI-modell är också en förutsättning för att lyckas med KPI-uppföljning för företagsledare. När ledningsgruppen tittar på sina nyckeltal måste de ju kunna lita på att siffrorna stämmer. Denna tillit byggs genom noggrann datamodellering och kvalitetssäkrad DAX-kod.

Sammanfattning

Att bygga bra Power BI-rapporter handlar om mer än bara snygga visualiseringar. Det är faktiskt den underliggande datamodelleringen och de välskrivna DAX-uttrycken som utgör grunden för analysen. Genom att använda stjärnschema och förstå utvärderingskontexten i DAX kan du skapa flexibla och snabba analyslösningar för verksamheten.

Power BI är ett bra verktyg på marknaden. Dess potential kan dock endast frigöras om man förstår hantverket bakom datamodellering. Oavsett om du arbetar med snabba ad-hoc-analyser eller bygger standardrapporter är en solid grundstruktur viktig för att leverera tillförlitliga insikter. Kom ihåg att merparten av arbetet faktiskt sker under ytan.

Börja smått och tänk stort när det gäller er datainfrastruktur. Genom att investera i rätt struktur kring datamodellering kan ni ju få ut mer av er data. Hör gärna av dig via vår kontakta oss-sida om du vill bolla idéer kring hur ni kan optimera era Power BI-lösningar. Vi tar gärna en kaffe och pratar om hur vi kan hjälpa er framåt.

Power BIBusiness IntelligenceDataanalys
Dela