Adatmodellezés és DAX – a riport motorja

A jó adatmodell teszi a riportot gyorssá, bővíthetővé és érthetővé. Ez az útmutató a csillagsémát, a kapcsolatokat, a dátumtáblát és a leggyakoribb DAX mértékeket mutatja be – gyakorlati példákkal.

Olvasási idő 12 perc | Utolsó frissítés: 2026. szeptember 9.

Röviden

Adatmodell és DAX röviden

Az adatmodell az a szerkezet, amelyben a betöltött táblák egymáshoz kapcsolódnak; a DAX pedig az a nyelv, amellyel a számításokat leírjuk. A kettő együtt dönti el, hogy a riport gyors, bővíthető és érthető lesz-e.

Egy jó modell felismerhető arról, hogy új kérdésre általában nem kell új adatot behozni – elég egy új mérték vagy egy új vizuál. Egy rossz modellnél viszont minden új kérés újabb kerülőmegoldást szül.

Alapelv

A csillagséma – a Power BI természetes formája

A Power BI motorja (VertiPaq) arra van optimalizálva, hogy ténytáblák köré dimenziótáblák csoportosuljanak. Ez a csillagséma.

  • Ténytábla: az események, mérhető számokkal – értékesítési tételek, könyvelési sorok, gyártási jelentések. Sok sor, kevés oszlop, jellemzően azonosítók és számértékek.
  • Dimenziótábla: a leíró adatok – ügyfél, termék, dátum, régió, értékesítő. Kevés sor, több leíró oszlop.

A gyakori kísértés az, hogy egyetlen nagy, „mindent tartalmazó" táblát hozzunk létre, mert Excelben így szoktuk meg. Ez működhet kis adaton, de gyorsan lassuláshoz és nehezen karbantartható riporthoz vezet: minden ismétlődő szöveges érték helyet foglal, és a szűrők logikája is átláthatatlanná válik.

Ökölszabály

Ha egy oszlop leír valamit (név, kategória, régió), az dimenzióba való. Ha mér valamit (mennyiség, összeg, darab), az ténytáblába. A dátum mindig külön dimenziótáblát kap.

Szerkezet

Kapcsolatok – iránnyal és számossággal

A táblák közötti kapcsolatnak két fontos tulajdonsága van:

  • Számosság: a leggyakoribb az egy-a-többhöz (1:*) – egy termék sok értékesítési tételhez tartozik. A több-a-többhöz (*:*) kapcsolatot csak indokolt esetben érdemes használni.
  • Szűrési irány: alapesetben egyirányú: a dimenzió szűri a ténytáblát. A kétirányú szűrés kényelmesnek tűnik, de nehezen követhető viselkedést és teljesítményproblémát okozhat – csak tudatosan, indokolt esetben használja.

Ha két ténytábla között kellene kapcsolat, az szinte mindig jelzés: hiányzik egy közös dimenzió, amelyhez mindkettő kapcsolódhatna.

Kötelező elem

A dátumtábla – enélkül nincs időbeli elemzés

Szinte minden riport tartalmaz időbeli összehasonlítást: előző hónap, előző év, év eleje óta. Ehhez egy külön, folytonos dátumtábla kell, amely minden napot tartalmaz az időszakban – lyukak nélkül.

DAX – dátumtábla létrehozása
-- Számított tábla: folytonos naptár a ténytábla időtartományára
Datum =
VAR MinDatum = MIN( Ertekesites[Datum] )
VAR MaxDatum = MAX( Ertekesites[Datum] )
RETURN
ADDCOLUMNS(
    CALENDAR( DATE( YEAR(MinDatum), 1, 1 ), DATE( YEAR(MaxDatum), 12, 31 ) ),
    "Év",        YEAR( [Date] ),
    "Hónap sz.", MONTH( [Date] ),
    "Hónap",     FORMAT( [Date], "yyyy. mm." ),
    "Negyedév",  "Q" & QUARTER( [Date] ),
    "Hét",       WEEKNUM( [Date], 2 )
)

Két lépés maradt: a táblát meg kell jelölni dátumtáblaként (Mark as date table), és a szöveges hónaposzlopot rendezni kell a hónap sorszáma szerint (Sort by column) – különben ábécésorrendben jelenne meg.

Tipp: érdemes kikapcsolni a Power BI automatikus dátumhierarchiáját (Beállítások → Adatok betöltése → Auto date/time). Minden dátumoszlop mögé rejtett táblát generál, ami feleslegesen növeli a modell méretét.

Alapdöntés

Mérték vagy számított oszlop?

Mérték (measure)

  • Akkor számolódik ki, amikor megjeleníti – a szűrők szerint.
  • Nem foglal helyet a modellben.
  • Erre való a legtöbb üzleti mutató: összeg, arány, átlag, eltérés.
  • Kétség esetén mértéket írjon.

Számított oszlop

  • Frissítéskor számolódik ki, soronként, és tárolódik.
  • Növeli a modell méretét.
  • Akkor indokolt, ha az érték soronként fix, és szűrni vagy csoportosítani akar vele.
  • Ha lehet, inkább a Power Queryben (vagy a forrásban) állítsa elő.
Gyakorlat

A leggyakoribb DAX mértékek

A riportok többsége néhány visszatérő mintára épül. Az alábbiak lefedik a tipikus üzleti kérdések nagy részét.

DAX – alapmértékek
-- 1) Alapösszeg
Árbevétel = SUM( Ertekesites[NettoOsszeg] )

-- 2) Előző év azonos időszaka
Árbevétel EV =
CALCULATE( [Árbevétel], SAMEPERIODLASTYEAR( Datum[Date] ) )

-- 3) Eltérés az előző évhez képest, százalékban
Árbevétel EV % =
VAR Elozo = [Árbevétel EV]
RETURN DIVIDE( [Árbevétel] - Elozo, Elozo )

-- 4) Év eleje óta (YTD)
Árbevétel YTD =
TOTALYTD( [Árbevétel], Datum[Date] )

-- 5) Arány a teljes piachoz képest (a szűrő feloldásával)
Piaci részesedés =
DIVIDE(
    [Árbevétel],
    CALCULATE( [Árbevétel], ALL( Termek[Kategoria] ) )
)

-- 6) Egyedi ügyfelek száma
Aktív ügyfelek = DISTINCTCOUNT( Ertekesites[UgyfelID] )

Néhány szabály, amely hosszú távon sokat számít:

  • Osztásnál mindig DIVIDE(), ne a / operátor – így a nullával osztás nem hibát, hanem üres értéket ad.
  • Építsen egymásra: az összetett mértékek hivatkozzanak az alapmértékekre, ne ismételjék meg a képletet.
  • Használjon VAR változókat – olvashatóbb és gyorsabb is, mert az érték egyszer számolódik ki.
  • Tegye a mértékeket külön, dedikált táblába (pl. „_Mértékek"), hogy a mezőlistában könnyen megtalálhatók legyenek.
  • Nevezze őket üzleti nyelven – a riportban ez a név fog megjelenni.
A lényeg

A szűrési környezet (filter context)

Ez a DAX legfontosabb fogalma, és egyben a leggyakoribb félreértés forrása. Egy mérték értéke mindig attól függ, milyen szűrők vannak érvényben abban a cellában, ahol megjelenik.

Ha egy táblázat sorában „2026. március" és „Északi régió" szerepel, akkor az [Árbevétel] mérték csak azokra a sorokra számol, amelyek megfelelnek ennek a két szűrőnek. Ugyanaz a képlet más cellában más eredményt ad – ez nem hiba, hanem a működés lényege.

A CALCULATE() az a függvény, amellyel ezt a környezetet módosítani lehet: hozzáadhat, felülírhat vagy eltávolíthat szűrőket. Az ALL(), REMOVEFILTERS() és KEEPFILTERS() ennek a finomhangolására szolgálnak.

Ha nem stimmel a szám

A hibakeresés első kérdése mindig ugyanaz: milyen szűrők érvényesek abban a cellában? A vizuál „Adatok megjelenítése" funkciója és a Performance Analyzerben kimásolt DAX-lekérdezés (pl. DAX Studióban futtatva) többnyire azonnal megmutatja a választ.

Tanulságok

Tipikus modellezési hibák

  • Egyetlen óriási, lapos tábla – az Excel-reflex. Bontsa tény- és dimenziótáblákra.
  • Hiányzó dátumtábla – enélkül az időbeli függvények megbízhatatlanul működnek.
  • Kétirányú kapcsolatok mindenhol – nehezen kiszámítható eredményt és lassulást okoz.
  • Számított oszlop mérték helyett – feleslegesen növeli a modellt.
  • Nagy kardinalitású oszlopok (pl. időbélyeg másodperccel, egyedi tranzakcióazonosító) – ezek tömörödnek a legrosszabbul; ha nem kell, hagyja el őket.
  • Technikai oszlopnevek a riportban – az „ATVET_NETTO_OSSZ" senkinek nem mond semmit; nevezze át.

Összetett a számítási logika?

A kalkulátorban jelezze, milyen szintű számításokra van szüksége – az egyszerű összegzéstől a szcenárióelemzésig –, és megmutatjuk, ez mekkora ráfordítást jelent.

Kalkulátor indítása
GYIK

Gyakori kérdések

Meddig kell megtanulni a DAX-ot?
Az alapok (SUM, CALCULATE, DIVIDE, időbeli függvények) néhány nap gyakorlással használhatóvá válnak. A szűrési környezet mélyebb megértése – ami az összetettebb feladatokhoz kell – jellemzően hetek-hónapok kérdése, és leginkább valós feladatokon tanulható meg.
Hány táblám lehet egy modellben?
Nincs gyakorlati korlát, de a jó modellek meglepően egyszerűek: jellemzően 1–3 ténytábla és 5–10 dimenziótábla. Ha ennél sokkal többre van szükség, az általában azt jelzi, hogy az adatelőkészítés egy részét érdemesebb lenne a forrásban vagy egy dataflow-ban elvégezni.
Mi a különbség a SUM és a SUMX között?
A SUM egyetlen oszlopot összegez. A SUMX soronként kiértékel egy kifejezést, majd összeadja az eredményt – erre akkor van szükség, ha soronként kell számolni, például mennyiség × egységár, ha nincs kész összegoszlop. A SUMX drágább művelet, ezért ahol lehet, érdemes az összeget már a forrásban vagy a Power Queryben előállítani.
Miért mutat mást a riport, mint az Excel?
A leggyakoribb okok: eltérő szűrés (pl. a sztornó tételek kezelése), eltérő időszakhatár, más definíció (nettó/bruttó), vagy az Excelben lévő kézi korrekció, amit senki nem dokumentált. Az eltérést mindig tételesen, egy konkrét lezárt hónapon érdemes visszafejteni – gyakran kiderül, hogy a régi kimutatás volt pontatlan.
Kapcsolódó

Kapcsolódó útmutatók