Ugrás a fő tartalomra

DAX vs. Power Query (M) – Részletes Összehasonlítás


DAX vs. Power Query (M) – Részletes Összehasonlítás




A Power BI két fő eszközt kínál az adatok transzformálására és elemzésére:

  • DAX (Data Analysis Expressions) – az adatmodellben történő számításokra és elemzésre szolgál.
  • Power Query (M) – az adatok betöltésére, tisztítására és előkészítésére használható.

Bár mindkettő kulcsfontosságú a Power BI munkafolyamatában, alapvetően eltérő szerepet töltenek be. Nézzük meg részletesen a hasonlóságokat és különbségeket!


1. Mi a DAX?

A DAX (Data Analysis Expressions) egy nyelv, amelyet a Power BI, Power Pivot és SSAS használ számítások és aggregációk végrehajtására. Olyan funkciókat tartalmaz, amelyekkel:

  • Számított mezőket (Measure) és számított oszlopokat (Calculated Column) hozhatunk létre.
  • Összesítéseket (SUM, AVERAGE, COUNT, MAX, MIN) és időintelligenciát (YTD, MTD, LY) kezelhetünk.
  • Kapcsolatokon átívelő számításokat végezhetünk (például LOOKUPVALUE, RELATED, CROSSJOIN).

DAX a memóriában tárolt adatokon dolgozik, és dinamikusan reagál a vizualizáció szűrőire.


2. Mi a Power Query (M)?

Az M Mashup rövidítése, ami arra utal, hogy a Power Query egy adatintegrációs és transzformációs nyelv, amely különböző forrásokból származó adatokat képes egyesíteni és átalakítani (összegyúrni).

A Power Query M nyelv célja, hogy adatok betöltését, átalakítását és előkészítését automatizálja egy lekérdező motor segítségével. Az M nyelv deklaratív (leíró) jellegű, ami azt jelenti, hogy a felhasználó a kívánt eredményt határozza meg, nem pedig a műveletek végrehajtásának sorrendjét.


A Power Query és az M nyelv kapcsolata:
Amikor a Power Query grafikus felhasználói felületén (GUI) adatátalakításokat végzünk, a háttérben az M nyelv kódja generálódik.
A haladó felhasználók közvetlenül is szerkeszthetik az M nyelv kódját a Power Query szerkesztőben, hogy összetettebb adatátalakításokat hajtsanak végre.


Fontos tudnivalók:
Az M nyelv elsajátítása lehetővé teszi a felhasználók számára, hogy teljes mértékben kihasználják a Power Query képességeit.
Az M nyelv használata különösen hasznos, ha olyan összetett adatátalakításokat kell végrehajtani, amelyek a GUI-n keresztül nem valósíthatók meg.



A Power Query (M) egy ETL (Extract, Transform, Load) nyelv, amelyet az adatok betöltésére, tisztítására és előkészítésére használnak a Power BI adatmodellbe történő importálás előtt.

Power Query feladatai:

  • Adatok importálása különböző forrásokból (SQL Server, Excel, web, JSON, API, stb.).
  • Adatok átalakítása: oszlopok eltávolítása, átalakítása, egyesítése, szűrése.
  • Táblák közötti műveletek: csatolások, egyesítések (Merge, Append).
  • Adattisztítás és normalizálás: duplikációk eltávolítása, adatformázás, számítások.

Power Query (M) az adatok előkészítésére szolgál, még mielőtt azok az adatmodellbe kerülnének.


1. Példa M: Egyszerű adatok lekérdezése és módosítása

Feladat: Töltsünk be egy Excel-fájlt, és alakítsuk át az oszlopok nevét.

--- M
let
Source = Excel.Workbook(File.Contents("C:\Data\sales.xlsx"), null, true), SalesData = Source{[Name="Sales"]}[Content], RenamedColumns = Table.RenameColumns(SalesData, {{"OldColumnName", "NewColumnName"}}) in RenamedColumns

🔹 Magyarázat:

  • Excel.Workbook(File.Contents("C:\Data\sales.xlsx"), null, true) → Betölti az Excel fájlt
  • Source{[Name="Sales"]}[Content] → Kiválasztja a Sales nevű munkalapot
  • Table.RenameColumns(SalesData, {{"OldColumnName", "NewColumnName"}}) → Átnevezi az egyik oszlopot

2. Példa M: Új oszlop létrehozása számítással

Feladat: Készítsünk egy új oszlopot, amely kiszámítja az árbevételt (Revenue = Unit Price × Quantity).

---M
let
Source = Table.FromRecords({ [Product="Laptop", UnitPrice=1200, Quantity=3], [Product="Mouse", UnitPrice=25, Quantity=10] }), AddedColumn = Table.AddColumn(Source, "Revenue", each [UnitPrice] * [Quantity], type number) in AddedColumn

🔹 Magyarázat:

  • Table.FromRecords({...}) → Egy táblázatot hoz létre az adatokból
  • Table.AddColumn(..., "Revenue", each [UnitPrice] * [Quantity], type number) → Új oszlopot ad hozzá, amely kiszámítja az árbevételt

3. Példa M: Adatok szűrése egy adott feltétel alapján

Feladat: Csak azokat a sorokat jelenítsük meg, ahol az eladott mennyiség (Quantity) nagyobb, mint 5.

--- M
let
Source = Table.FromRecords({ [Product="Laptop", Quantity=3], [Product="Mouse", Quantity=10], [Product="Keyboard", Quantity=7] }), FilteredRows = Table.SelectRows(Source, each [Quantity] > 5) in FilteredRows

🔹 Magyarázat:

  • Table.SelectRows(Source, each [Quantity] > 5) → Csak azokat a sorokat hagyja meg, ahol Quantity > 5.
  • Az eredményben csak a "Mouse" és "Keyboard" sorok maradnak meg.

4. Példa M: Adatok csoportosítása és összesítése

Feladat: Csoportosítsuk az eladásokat termék szerint, és számoljuk ki az összes eladott mennyiséget.

--- M
let
Source = Table.FromRecords({ [Product="Laptop", Quantity=3], [Product="Mouse", Quantity=10], [Product="Laptop", Quantity=2] }), GroupedData = Table.Group(Source, {"Product"}, {{"TotalQuantity", each List.Sum([Quantity]), type number}}) in GroupedData

🔹 Magyarázat:

  • Table.Group(Source, {"Product"}, {...}) → Termékek szerint csoportosítja az adatokat.
  • List.Sum([Quantity])                                   → Összegzi az adott termékhez tartozó eladásokat.
  • Az eredmény:
    ProductTotalQuantity
    Laptop5
    Mouse10

5. Példa M: Dátumok kezelése és év/hónap bontás

Feladat: Egy dátum oszlopból hozzunk létre egy új oszlopot, amely az évszámot tárolja.

--- M
let
Source = Table.FromRecords({ [OrderDate=#date(2024, 3, 1)], [OrderDate=#date(2025, 1, 15)] }), AddedYearColumn = Table.AddColumn(Source, "Year", each Date.Year([OrderDate]), type number) in AddedYearColumn

🔹 Magyarázat:

  • Date.Year([OrderDate]) → Kinyeri az évszámot a dátumból.
  • Ha az eredeti tábla a következő volt:
    OrderDate
    2024-03-01
    2025-01-15
    • Az átalakított tábla:
      | OrderDate | Year |
      |------------|------|
      | 2024-03-01 | 2024 |
      | 2025-01-15 | 2025 |

6. Példa M: Táblák összekapcsolása (JOIN / MERGE)

Feladat: Két táblát kapcsoljunk össze közös oszlop alapján.

--- M
let
Customers = Table.FromRecords({ [CustomerID=1, Name="John"], [CustomerID=2, Name="Alice"] }), Orders = Table.FromRecords({ [CustomerID=1, OrderID=101, Amount=500], [CustomerID=2, OrderID=102, Amount=300] }), MergedTables = Table.NestedJoin(Customers, "CustomerID", Orders, "CustomerID", "OrderDetails", JoinKind.Inner), ExpandedTable = Table.ExpandTableColumn(MergedTables, "OrderDetails", {"OrderID", "Amount"}) in ExpandedTable

🔹 Magyarázat:

  • Table.NestedJoin(...)              → Az Orders táblát az Customers táblához csatolja a CustomerID oszlop alapján.
  • Table.ExpandTableColumn(...) → Kibontja a kapcsolódó adatokat.
  • Az eredmény egy egyesített tábla, ahol az ügyfelekhez tartozó rendelési információk is szerepelnek.

Összegzés

A Power Query (M) nyelv lehetővé teszi az adatok tisztítását, átalakítását és előkészítését még az adatmodellbe való betöltés előtt.

🔹 Gyakran használt műveletek és parancsok:

  • Táblák betöltése                 → Excel.Workbook, Csv.Document
  • Szűrés és szortírozás          → Table.SelectRows, Table.Sort
  • Új oszlopok                          → Table.AddColumn
  • Csoportosítás és összesítésTable.Group
  • Dátumműveletek                  → Date.Year, Date.Month
  • Táblák egyesítése                → Table.NestedJoin, Table.ExpandTableColumn

Ha bonyolult adatmanipulációt kell elvégeznünk, a Power Query (M) a legjobb eszköz erre. Ha pedig dinamikus elemzéseket szeretnénk, akkor DAX-ot kell használni.


PowerQuery(M) Adatátalakítás

Alkalmazzon különféle adatátalakítási funkciókat az adatok megtisztításához, átalakításához és gazdagításához.

  • Oszlopműveletek: Átnevezés, átrendezés, felosztás, egyesítés és adattípus módosítása oszlopok.
  • Sorműveletek: Szűrés, rendezés, ismétlődések eltávolítása és sorok felosztása vagy csoportosítása alapján körülmények.
  • Szövegátalakítások: Használjon vágást, nagybetűket, kisbetűket, részkarakterláncot és egyéb szövegeket funkciókat.
  • Dátum és idő átalakítások: Kivonat év, hónap, nap, óra, perc és második, és végezze el a dátumszámítást.
  • Feltételes műveletek: Adjon hozzá feltételes oszlopokat meghatározott feltételek vagy logika alapján.
  • Táblázatműveletek: táblázatok egyesítése, hozzáfűzése és transzponálása, valamint pivot létrehozása műveleteket.
  • Egyéni függvények: Hozzon létre egyéni függvényeket az M képletnyelv használatával összetetthez adatátalakítások.


Kis- és nagybetűk megkülönböztetése: Ne feledje, hogy az M nyelv megkülönbözteti a kis- és nagybetűket, ezért ügyeljen rá szintaxis és függvénynevek.



Ismerje meg az M nyelv alapjait az adatátalakításhoz és -manipulációhoz a Power BI-ban.

  • Kis- és nagybetűk megkülönböztetése: Ne feledje, hogy az M nyelv megkülönbözteti a kis- és nagybetűket, ezért ügyeljen rá szintaxis és függvénynevek.
  • Kifejezések: A kifejezések segítségével számításokat hajthat végre, új oszlopokat hozhat létre vagy szűrhet adat.
  • Lépések: Alkalmazzon lépések sorozatát, amelyek mindegyikét egy M kifejezés képviseli az átalakításhoz adatokat a Power Queryben.

Adattípusok

Különféle adattípusokkal dolgozhat M nyelven, mint például szám, szöveg, dátum, idő, dátum és idő, időtartam, és bináris.

  • Típuskonverzió: Konvertálja az adattípusokat olyan függvényekkel, mint a Szám.From, Szöveg.From, DateTime.From és mások.
  • Típusellenőrzés: Az ellenőrzéshez használjon olyan függvényeket, mint a Value.Is, Type.Is vagy Type.IsNullable adattípusok.


Funkciók

Használja ki a beépített M függvényeket az adatok átalakításához, kinyeréséhez és manipulálásához.

  • Aritmetikai függvények: Számításokat végezhet olyan függvényekkel, mint a Number.Add, Szám.Szorzás és Szám.Osztás.
  • Szövegfunkciók: Szöveg manipulálása olyan funkciókkal, mint a Text.Upper, Text.Trim, Text.Replace és Text.Length.
  • DateTime funkciók: A dátummal és az idővel olyan funkciókkal dolgozhat, mint a DateTime.Add, DateTime.Day és DateTime.LocalNow.
  • Logikai függvények: Alkalmazzon logikai feltételeket az if, and, or, not, and függvényekkel Lista.Tartalmaz.
  • Listafunkciók: Listákat manipulálhat olyan funkciókkal, mint a List.First, List.Last, List.RemoveItems és List.Transform.


Egyéni (felhasználói) funkciók

  • Hozzon létre egyéni függvényeket M nyelven összetett adatátalakítások végrehajtásához.
  • Függvény szintaxis: Egyéni függvények meghatározása a szintaxis (paraméter mint típus) => használatával kifejezés.
  • Rekurzív függvények: Rekurzív függvényeket hozhat létre olyan feladatokhoz, mint a hierarchikus adatok lapítás vagy iteratív számítások.


Hibakezelés

Az adatok minőségének és integritásának megőrzése érdekében kezelje a hibákat és a null értékeket M nyelven.

  • Hibafunkciók: Az Error.Record, Error.Retry és Error.Table funkciók használata hibákat kezelni és kezelni.
  • Null kezelése: Kezelje a null értékeket olyan függvényekkel, mint a Value.ReplaceType, Value.ReplaceNull és Value.Remove.


Lekérdezés optimalizálás

  • Optimalizálja a teljesítményt azáltal, hogy engedélyezi a lekérdezés hajtogatását M nyelven az átalakítás leküldéséhez visszalép az adatforráshoz.
  • Támogatott funkciók: Használjon olyan függvényeket, amelyek támogatják a lekérdezés hajtogatását, mint pl Table.SelectColumns vagy Table.Sort.
  • Egyéni csatlakozók: Egyéni csatlakozók fejlesztése, amelyek támogatják a lekérdezések hajtogatását jobb teljesítményt.



Speciális adatátalakítás

  • Csoportosítás és összesítés: A Table.Group használatával csoportosíthatja az adatokat meghatározott oszlopok és összesítést alkalmaznak.
  • Elforgatás és elforgatás: Formálja át az adatokat a Table.Pivot és Table.Unpivot segítségével hatékonyabb elemzés.
  • Egyesítés és hozzáfűzés: A táblázatok kombinálása a Table.NestedJoin vagy a Table.Combine funkcióval adatkonszolidációhoz.


M programozási nyelv bevált gyakorlatai

  • Következetes elnevezés: Használjon konzisztens elnevezési konvenciókat a függvényekhez, oszlopokhoz és változók.
  • Megjegyzések: Megjegyzések hozzáadása az M kódhoz a bonyolult transzformációk magyarázatához ill. egyedi funkciók.
  • Paraméterezés: Használjon paramétereket az M nyelvi kód rugalmasabbá tételéhez és alkalmazható










3. Hasonlóságok DAX és Power Query között

  • Adatokkal dolgoznak: Mindkettőt arra használjuk, hogy az adatokat manipuláljuk a Power BI-ban.
  • Funkciókat biztosítanak az adatelemzéshez: Mindkettő tartalmaz matematikai, szöveges és logikai függvényeket.
  • Időalapú számításokat végezhetnek: Power Query is tud dátumműveleteket végrehajtani (pl. év, hónap bontás), míg DAX időintelligens számításokat végez.

4. Kulcsfontosságú különbségek DAX és Power Query között

JellemzőDAX (Data Analysis Expressions)Power Query (M)
Mikor használjuk?Az adatmodellben történő számításokra és elemzésekreAz adatok betöltésére és előkészítésére
Adatkezelés helyeMemóriában történő számítások az adatmodellbenAz adatok transzformálása betöltés előtt
NyelvFunkcionális nyelv, amely az Excelhez hasonló szintaxist használFunkcionális programozási nyelv, amely inkább a Power Query sajátos szabályai szerint működik
AdatforrásokCsak a Power BI-ba betöltött adatokkal dolgozikSzámos forrásból képes adatokat betölteni és transzformálni
Szűrők, szeletelők hatásaDinamikusan reagál a vizualizáció szűrőire és szeletelőireNincs hatással a vizualizáció szűrőire, mivel előzetesen végzi el a műveleteket
Használat módjaSzámított oszlopok, számított mezők és táblázatok létrehozásaTáblák előkészítése, átalakítása és tisztítása

5. Példa – DAX és Power Query egy konkrét esetben

Tegyük fel, hogy van egy Sales nevű tábla, amely az alábbi oszlopokat tartalmazza:

  • Order Date – a rendelés dátuma
  • Product – a termék neve
  • Unit Price – egységár
  • Quantity – mennyiség

A cél:

  1. Hozzunk létre egy új oszlopot, amely kiszámítja az eladás összegét (Revenue = Unit Price × Quantity).
  2. Készítsünk egy összesítést: összes eladás az aktuálisan kiválasztott évre.

Megoldás Power Query-ben (M)

Power Query-t az adat előkészítésére használjuk, hogy már egy kiszámított oszlopot kapjunk, amely az eladás összegét tartalmazza.

  1. Nyissuk meg a Power Query Editort.
  2. Válasszuk ki a Sales táblát.
  3. Hozzunk létre egy új oszlopot a következő képlettel:
--M

#"Added Custom" = Table.AddColumn(Sales, "Revenue", each [Unit Price] * [Quantity], type number)
  1. Az új oszlop beillesztődik a táblába, és az adatmodellbe történő betöltéskor már tartalmazza az előre kiszámított értéket.

Előny: Az értékek nem számolódnak újra minden interakciónál, mivel statikusan tárolódnak.
Hátrány: Nem reagál a vizualizációs szeletelőkre.


Megoldás DAX-szal

Power Query helyett DAX-szal is létrehozhatjuk a számítást, de ez az adatmodellben történik.

  1. Nyissuk meg a Data nézetet a Power BI-ban.
  2. Készítsünk számított oszlopot:
--DAX

Revenue = Sales[Unit Price] * Sales[Quantity]

Vagy számított mezőt (Measure-t) a dinamikus aggregáláshoz:

--DAX

Total Revenue = SUM(Sales[Unit Price] * Sales[Quantity])

Előny: A measure reagál a szűrőkre és szeletelőkre.
Hátrány: Minden vizualizáció lekérdezésekor újraszámítódik.


6. Melyiket mikor használjuk?

  • Power Query-t használjunk, ha:

    • Az adatokat előzetesen elő kell készíteni, tisztítani vagy átalakítani.
    • Az adatok állandó transzformációra szorulnak betöltés előtt.
  • DAX-ot használjunk, ha:

    • Az elemzéshez és interaktív vizualizációkhoz számításokra van szükség.
    • Az értékeknek reagálniuk kell a szeletelőkre és szűrőkre.

Összegzés

A Power Query az adatok előkészítésére és transzformálására szolgál, míg a DAX az adatok elemzésére és számítására. A kettő együttműködik: először Power Query-vel előkészítjük az adatokat, majd DAX-szal számításokat végzünk rajtuk.

Ha az adatok fixek és nem változnak interaktívan, Power Query a jobb választás. Ha az adatokat dinamikusan kell számolni a vizualizációkon belül, akkor DAX-ot használjunk.








Megjegyzések