Ugrás a fő tartalomra

Power Bi alapok: M nyelv alapok

  Power Bi alapok: M nyelv alapok


A Power Query M nyelv a Power Query lekérdezőmotor saját programozási nyelve, amelyet az adatok beolvasására, transzformálására és betöltésére használunk. Az M nyelv deklaratív, funkcionális programozási nyelv, amely az Excel, a Power BI és más Microsoft adatfeldolgozási eszközök alapját képezi.



1. Az M nyelv fő jellemzői

  1. Deklaratív – Az M nyelv megmondja, hogy mit szeretnénk elérni, nem pedig azt, hogyan kell végrehajtani.

  2. Funkcionális – Az M nyelv erősen épít a függvényekre, amelyek egymásra épülnek.

  3. Értékalapú (immutable) – A változók nem módosíthatók (csak új értéket lehet hozzárendelni egy új változóhoz).

  4. Automatikus típuskezelés – Az M nyelv automatikusan érzékeli az adatok típusát, de explicit módon is megadható.

  5. Együttműködés más rendszerekkel – SQL, Excel, JSON, XML, Web API, stb.


2. Az M nyelv szintaktikai elemei


Az M nyelv a két programozási blokkból, egy let ... in szerkezetből áll. (speciális szerkesztőnél jelenik meg) :

  • let: az összes változó definíciója
  • in: output! Igen, az valójában azt jelenti, hogy ki! Minden, amit ebbe a blokkba tesz, a lekérdezés kimenete lesz
Példa:

---m


let Valtozo1 = 10, Valtozo2 = Valtozo1 * 2 in Valtozo2

Magyarázat:

  • A let blokkban változókat és kifejezéseket definiálunk.

  • Az in blokk határozza meg, hogy a lekérdezés végén melyik változó vagy kifejezés eredménye jelenjen meg.


3. Adattípusok

TípusPélda
Szám (Number)42, -3.14, 1.0e3
Szöveg (Text)"Hello, Power Query!"
Logikai (Logical)true, false
Null érték (Null)null
Lista (List){1, 2, 3, "szöveg"}
Rekord (Record)[Név="Anna", Kor=30]
Tábla (Table)#table({"Név", "Kor"}, {{"Anna", 30}, {"Béla", 40}})
Függvény (Function)(x) => x * 2
Dátum, idő (DateTime)#date(2025, 3, 31), #datetime(2025, 3, 31, 14, 30, 0)

4. Fő adattárolási struktúrák

4.1 Lista ({})

A lista egy indexelt adatszerkezet, amely különböző típusú értékeket is tartalmazhat.

---m

let Lista = {1, 2, 3, "Power BI", true} in Lista{2} // Az index 0-al kezdődik, így ez az érték 3 lesz.

4.2 Rekord ([])

A rekord egy kulcs-érték párokból álló szerkezet.

---m

let Szemely = [Név = "Anna", Kor = 30, Város = "Budapest"] in Szemely[Kor] // Az eredmény 30 lesz.

4.3 Tábla (#table)

A tábla egy sorokból és oszlopokból álló adattároló.

---m

let Tabla = #table({"Név", "Kor"}, {{"Anna", 30}, {"Béla", 40}}) in Tabla

5. Vezérlési szerkezetek

Bár az M nyelv nem támogat klasszikus ciklusokat (pl. for, while), feltételes elágazások és rekurzió használhatók.

5.1 Feltételes elágazás (if ... then ... else)

---m

let Szam = 10, Eredmeny = if Szam > 5 then "Nagy" else "Kicsi" in Eredmeny

5.2 Rekurzió (függvényhívás önmagára)

---m

let Faktorialis = (n) => if n = 0 then 1 else n * Faktorialis(n - 1) in Faktorialis(5) // 5! = 120

6. Power Query M nyelvben elérhető műveletek

6.1 Szám műveletek

---m

let Osszeg = 5 + 3, Kulonbseg = 10 - 4, Szorzas = 6 * 7, Osztas = 10 / 2, Hatvany = Number.Power(2, 3) // 2^3 = 8 in [Osszeg, Kulonbseg, Szorzas, Osztas, Hatvany]

6.2 Szöveg műveletek

---m

let Szoveg1 = "Hello", Szoveg2 = "Power Query", Osszefuzes = Szoveg1 & " " & Szoveg2, // "Hello Power Query" Kisbetus = Text.Lower("ABC"), Nagybetus = Text.Upper("abc") in [Osszefuzes, Kisbetus, Nagybetus]

6.3 Dátum műveletek

---m

let Ma = DateTime.LocalNow(), Ev = Date.Year(Ma), Honap = Date.Month(Ma), Nap = Date.Day(Ma) in [Ma, Ev, Honap, Nap]

7. Saját függvények létrehozása

Függvényeket az => operátorral hozunk létre.

---m

let Negyzet = (x) => x * x, Eredmeny = Negyzet(5) // 25 in Eredmeny

Összegzés

🔹 A Power Query M egy funkcionális nyelv, amely erősen épít a listákra, rekordokra és táblákra.
🔹 Deklaratív módon működik, vagyis az adatmódosításokat egymásra épített kifejezésekkel valósítjuk meg.
🔹 Automatikusan kezeli az adattípusokat, de explicit módon is megadhatók.
🔹 Elérhető műveletek: számolás, szövegkezelés, dátumkezelés, adattáblák átalakítása.




A Power Query M nyelvében a literálok (konstans értékek) többféleképpen definiálhatók, és minden típusnak megvan a maga sajátos szintaxisa. Nézzük meg a legfontosabb literálokat, azok jelentését és működését példákon keresztül.


1. Szám literálok

A számokat egész vagy lebegőpontos formátumban adhatjuk meg:

---m

let EgészSzám = 42, TizedesSzám = 3.14, NegatívSzám = -10 in [EgészSzám, TizedesSzám, NegatívSzám]

📌 Megjegyzés: Power Query az angol tizedes formátumot használja, tehát a tizedeselválasztó pont (.).


2. Szöveg literálok

A szövegeket idézőjelek (" ") közé kell tenni:

---m

let Szoveg1 = "Hello, Power Query!", Szoveg2 = "123" // Ez is egy szöveg, nem szám! in [Szoveg1, Szoveg2]

📌 Fontos: A szöveges literálokat nem lehet egyszerű idézőjel (') között megadni, csak kettős idézőjelben.


3. Logikai literálok

A logikai értékek true vagy false lehetnek:

---m

let IgazErtek = true, HamisErtek = false in [IgazErtek, HamisErtek]

4. Null literál

A null érték egy hiányzó vagy ismeretlen értéket jelöl:

---m

let UresErtek = null in UresErtek

5. Lista literálok

A listák szögletes zárójelben ({}) vannak definiálva:

--- m

let SzamLista = {1, 2, 3, 4, 5}, SzovegLista = {"Alma", "Körte", "Barack"} in [SzamLista, SzovegLista]

6. Tábla (record) literálok

A táblák kulcs-érték párok formájában vannak megadva:

---m

let Rekord = [Név = "Péter", Kor = 30, Város = "Budapest"] in Rekord

7. Dátum és idő literálok

A dátumok és időpontok saját formátumot használnak:

---m

let Datum = #date(2025, 3, 31), Ido = #time(14, 30, 0), DatumIdo = #datetime(2025, 3, 31, 14, 30, 0) in [Datum, Ido, DatumIdo]

📌 Megjegyzés: A #date, #time, és #datetime kulcsszavakat kell használni a megfelelő formázás érdekében.


8. Dátum/idő zónával (datetimezone)

A dátumot időzónával is meg lehet adni:

---m

let DatumIdoZona = #datetimezone(2025, 3, 31, 14, 30, 0, +2, 0) in DatumIdoZona

📌 Fontos: Az utolsó két szám az UTC eltolás (+2, 0 azaz UTC+2).


Összegzés

A Power Query literálokat a következő módon lehet megadni:

TípusSzintaxis példa
Egész szám42
Lebegőpontos szám3.14
Szöveg"Hello, World!"
Logikai értéktrue / false
Null értéknull
Lista{1, 2, 3}
Record[Kulcs = "Érték"]
Dátum#date(2025, 3, 31)
Idő#time(14, 30, 0)
Dátum és idő#datetime(2025, 3, 31, 14, 30, 0)
Időzóna#datetimezone(2025, 3, 31, 14, 30, 0, +2, 0)


A változók neve 

  •     egy szóból állhat, például a Forras 
  •     vagy lehet benne szóköz, de akkor a nevet dupla idézőjelbe (“) kell tennie, és a kezdete mindig hashtage (#). 

A kódolásnál az egysoros kommentár dupla perjellel (//) a többsoros kommentár a perjel és a kezdetek között (/* megjegyzések */)


Nagyon hasznos:

= #shared  (megosztott elérhető függvény definíciók listája







Megjegyzések