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)?
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.
--- MletSource = 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ájltSource{[Name="Sales"]}[Content]
→ Kiválasztja a Sales nevű munkalapotTable.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).
---MletSource = 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ólTable.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.
--- MletSource = 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, aholQuantity > 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.
--- MletSource = 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:
Product TotalQuantity Laptop 5 Mouse 10
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.
--- MletSource = 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 |
- Az átalakított tábla:
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.
--- MletCustomers = 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 aCustomerID
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és →
Table.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ésekre | Az adatok betöltésére és előkészítésére |
Adatkezelés helye | Memóriában történő számítások az adatmodellben | Az adatok transzformálása betöltés előtt |
Nyelv | Funkcionális nyelv, amely az Excelhez hasonló szintaxist használ | Funkcionális programozási nyelv, amely inkább a Power Query sajátos szabályai szerint működik |
Adatforrások | Csak a Power BI-ba betöltött adatokkal dolgozik | Számos forrásból képes adatokat betölteni és transzformálni |
Szűrők, szeletelők hatása | Dinamikusan reagál a vizualizáció szűrőire és szeletelőire | Nincs hatással a vizualizáció szűrőire, mivel előzetesen végzi el a műveleteket |
Használat módja | Számított oszlopok, számított mezők és táblázatok létrehozása | Tá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:
- Hozzunk létre egy új oszlopot, amely kiszámítja az eladás összegét (Revenue = Unit Price × Quantity).
- 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.
- Nyissuk meg a Power Query Editort.
- Válasszuk ki a Sales táblát.
- Hozzunk létre egy új oszlopot a következő képlettel:
--M#"Added Custom" = Table.AddColumn(Sales, "Revenue", each [Unit Price] * [Quantity], type number)
- 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.
- Nyissuk meg a Data nézetet a Power BI-ban.
- Készítsünk számított oszlopot:
--DAXRevenue = Sales[Unit Price] * Sales[Quantity]
Vagy számított mezőt (Measure-t) a dinamikus aggregáláshoz:
--DAXTotal 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.
- Link lekérése
- X
- Más alkalmazások
Címkék
elemzés Power platform riport- Link lekérése
- X
- Más alkalmazások
Megjegyzések
Megjegyzés küldése