Ugrás a fő tartalomra

PowerBI DAX használat: GROUPBY() vs. ADDCOLUMNS() + SUMMARIZE()

 PowerBI DAX használat: GROUPBY() vs. ADDCOLUMNS() + SUMMARIZE()


🧠 Alapok röviden

A DAX-ban több módon is lehet aggregált táblákat létrehozni.
A három leggyakrabban használt függvény:

  • SUMMARIZE()

  • ADDCOLUMNS()

  • GROUPBY()

Mindhárom táblát ad vissza, és nem számszerű értéket, tehát jellemzően táblakifejezésekben használjuk őket, pl. CALCULATETABLE() vagy SUMX() belsejében.


⚙️ SUMMARIZE()

A SUMMARIZE() függvény a “klasszikus” csoportosító függvény.
Olyan, mint az SQL GROUP BY, de rugalmasabb — létrehozhat több oszlopot is, és csoportosítás után aggregálhat.

Szintaxis:

SUMMARIZE( Table, Column1, Column2, "NewColumnName", [Measure or Expression] )

Példa:

SUMMARIZE( Sales, Sales[Product], Sales[Year], "TotalSales", SUM(Sales[Amount]) )

➡️ Csoportosítja a táblát termék + év szerint, és kiszámolja az összesített eladásokat.


⚙️ ADDCOLUMNS() + SUMMARIZE()

ADDCOLUMNS()-t gyakran kombináljuk SUMMARIZE()-zal, ha összetett vagy kontextusfüggő számításokat szeretnénk a csoportosított táblához hozzáadni.

Példa:

ADDCOLUMNS( SUMMARIZE(Sales, Sales[Product], Sales[Year]), "TotalSales", CALCULATE(SUM(Sales[Amount])) )

➡️ Ez ugyanazt az eredményt adja, mint a fenti SUMMARIZE() példában — de:

  • tiszta logikai szétválasztás: először csoportosít (SUMMARIZE),

  • majd hozzáad számított oszlopot (ADDCOLUMNS).

💡 Mikor hasznos?

Ha az aggregálás összetettebb számításokat igényel, vagy kontextusváltás szükséges (CALCULATE(), szűrőfeltételek stb.).


⚙️ GROUPBY()

A GROUPBY() egy újabb generációs DAX függvény, amely a “strict” aggregálást szolgálja,
és a célja: nagy adathalmazokon hatékonyabb aggregáció előre definiált táblakörnyezetben.

Szintaxis:

GROUPBY( Table, GroupBy_ColumnName, [GroupBy_ColumnName2, ...], [Name, <expression>], ... )

De a legfontosabb:
➡️ GROUPBY() nem értelmezi a DAX kontextust (pl. CALCULATE-filtereket) automatikusan!

Ha számított oszlopot adunk meg, az csak az aktuális csoporton belül dolgozik, nem az egész modellre kiterjesztve.

Példa:

GROUPBY( Sales, Sales[Product], "TotalSales", SUMX(CURRENTGROUP(), Sales[Amount]) )

CURRENTGROUP() az aktuális csoport mini-táblája — ez kötelező, mert a GROUPBY() nem látja a teljes táblát, csak a csoport saját sorait.


🔍 Különbségek mélyebben

SzempontSUMMARIZE()ADDCOLUMNS() + SUMMARIZE()GROUPBY()
FunkcióKlasszikus csoportosításCsoportosítás + kiegészítő számításokSzigorú, alacsony szintű aggregáció
Kifejezés kontextusÉrti a szűrő- és sor-kontextustIgen (ADDCOLUMNS miatt)Nem automatikus – CURRENTGROUP() kell
TeljesítményJó, de komplex méréseknél lassabb lehetKözepes – minden CALCULATE() extra lekérdezésGyors nagy adatnál, ha jól van megírva
RugalmasságNagyLegnagyobbKorlátozott, de precíz
Ajánlott használatEgyszerű csoportosítás + összegzésHa extra számított mezőket akarszNagy táblákhoz, előaggregálásra
Tipikus használatJelentés aggregációÖsszetett számítások (KPI, ratio)Optimalizált ETL / DAX staging tábla

🧩 Gyakorlati példa – különbség a kimenetben

1️⃣ SUMMARIZE:

SUMMARIZE(Sales, Sales[Product], "TotalSales", SUM(Sales[Amount]))

✅ Egyszerű, jól olvasható
⚠️ Ha több aggregált mezőt adsz hozzá, “auto-execute” DAX context miatt redundáns lekérdezések jöhetnek.


2️⃣ ADDCOLUMNS + SUMMARIZE:

ADDCOLUMNS( SUMMARIZE(Sales, Sales[Product]), "AvgSales", CALCULATE(AVERAGE(Sales[Amount])), "TotalSales", CALCULATE(SUM(Sales[Amount])) )

✅ Rugalmas: többféle számítás kontextus szerint
⚠️ Lassabb, mert minden CALCULATE() külön értékelést végez.


3️⃣ GROUPBY:

GROUPBY( Sales, Sales[Product], "TotalSales", SUMX(CURRENTGROUP(), Sales[Amount]) )

✅ Nagy táblán gyorsabb, mert nem terjeszti ki a filter kontextust
⚠️ Csak egyszerű aggregációkhoz jó — CALCULATE() nem működik benne!


🧠 Melyiket mikor használd?

SzenárióJavasolt függvény
Jelentéshez gyors, egyszerű összegzésSUMMARIZE()
Többféle KPI, kontextusváltás szükségesADDCOLUMNS() + SUMMARIZE()
Előaggregált tábla (staging), nagy adatGROUPBY()

⚡ Összefoglalás

  • 🔹 SUMMARIZE()általános és olvasható, a legtöbb esethez elég

  • 🔹 ADDCOLUMNS() + SUMMARIZE()kontextusérzékeny, de lassabb

  • 🔹 GROUPBY()gyors, de szigorúan kontrollált (nem támogat minden DAX-funkciót)

👉 Pro tipp: ha CALCULATE()-ot vagy szűrőváltást kell használnod, NE GROUPBY()-t válassz, hanem ADDCOLUMNS()-t.
Ha viszont hatalmas tábla-előfeldolgozást csinálsz (pl. aggregált staging tábla Power BI modellben), akkor GROUPBY() lesz a hatékonyabb megoldás.







Megjegyzések