Mi az a Power Query & M Language: Részletes áttekintés
Ez az oktatóanyag áttekintést nyújt a Power Query szerkesztőről és az M nyelvről a LuckyTemplates asztalon.
Ebben a blogbejegyzésben megvizsgáljuk a megoldásomat. Ehhez a kihíváshoz újra felkerestük a LuckyTemplates első Probléma of the Week című kihívását, ahol konkrét és relatív dátumok keverékéből hoztunk létre egy örök ünnepnaptárt. De ezúttal csak a Power Queryt fogjuk használni . Az oktatóanyag teljes videóját a blog alján tekintheti meg.
Ha elakad magával a probléma lebontásával, újra átnézheti a webhelyet, hogy megnézze, vannak-e olyan elemek valamelyik megközelítésben, amelyek segíthetnek ebben a kihívásban.
A beadványok olvasása közben azt tapasztaltam, hogy emberek vegyesen használják a felhasználói felületet , és egyéni funkciókat írtak egy öröknaptár létrehozásához. Élvezetes volt elemezni az egyes bejegyzéseket, és ha ihletet szeretnél meríteni, akkor erre biztatlak.
Amikor magam dolgoztam ezen a forgatókönyvön, több megoldást is létrehoztam. Az, amelyikkel jártam, azt szemlélteti a legjobban, hogyan lehet nem csak kisebb darabokra bontani egy problémát , hanem láthatóvá is tenni . Ez nagyon hasznos, ha hibát vagy váratlan eredményt tapasztal.
Tartalomjegyzék
Az öröknaptár létrehozásának kiindulópontja
Ez a nyers ünnepi asztal a kiindulópontunk. Egy dátum összeállításához egy évre, egy hónapra és egy napra van szükségünk bizonyos dátumokhoz. Már csak az évszám hiányzik.
De a relatív dátumokhoz még egy kicsit többet kell dolgoznunk. Kezdetnek a nap oszlopot fel kell osztanunk számokra és hétköznapokra is. Tekintsük át ezeket a lépéseket.
Az évek lekérése a dátumtáblázatból
A megoldás dinamikusabbá tételéhez lekérem az éveket a dátumtáblázatból . A képletsorban láthatja, hogy vetítést használtam, hogy egyetlen oszlopos táblázatot kapjak a dátumtáblázatomból. Ez természetesen tartalmazni fog ismétlődéseket. Ezek eltávolításához hozzáadtam a Table.Distinct elemet .
Ha a táblázatok melletti fehér mezőben oldalra kattintok, megjelenik egy lista is, amely a dátumtáblázat-lekérdezésemben jelen lévő különböző éveket tartalmazza.
Kaptunk egy hónap nevet , de valójában szükségünk lesz egy hónapszámra . Most, amikor egy évet egy hónap nevéhez kapcsolunk, a Date.From függvényt használhatjuk az adott hónap első dátumának visszaadásához dátumértékként.
A Dátum.Hónap hozzáadásával csak a hónap száma marad meg az adott dátumhoz. Januárban 1-et ad vissza. Februárban 2-t ad vissza, és így tovább.
A szám beszerzése a nap oszlopból
Ahhoz, hogy a számot a nap oszlopból kapjuk meg, úgy döntöttünk, hogy nem osztjuk fel az oszlopot, hanem kivonjuk az értéket. Amint a képletsorban látható, a Text.BeforeDelimiter-t használtuk , és ezt a szóközt használtuk a szöveges karakterlánc jobb és bal oldali részének azonosítására.
Ha nincs hely, azt szeretnénk visszaadni, ami a nap oszlopban marad. Tehát az első rekordnál 1-et ad vissza. A második rekordnál, amely tartalmazza ezt a szóközt, a szöveges karakterlánc első részét, a Third szót adja vissza .
Hasonló megközelítést fogunk alkalmazni a dátumnév meghatározásához, de a List.PositionOf függvényt használjuk . Ez az első argumentumként átadott lista értékének nulla alapú eltolását adja vissza, és -1-et ad vissza, ha az érték nem jelenik meg a listában.
Az első rekordnál átadja az 1 értéket, amely nem szerepel a listánkban. Ezért adja vissza a -1 értéket. A második rekordnál a Monday értéket adja vissza .
Ezt átadja a függvényünknek, és 1-et ad vissza, mert ez a második elem a listánkban. Ezután az összes -1 értéket lecseréljük egy nullára .
Ezen a ponton létrehoztuk az összes építőelemet, amelyre szükségünk van az egyéni függvény meghívásához.
Az egyéni funkció előhívása az állandó ünnepnaptárhoz
A képletsorban láthatjuk, hogy a függvénynek négy argumentuma van: egy év , egy hónap , egy szám és egy hétköznap .
De hogyan határozza meg a dátum értékét? Ismét a List.PositionOf-ot használjuk, hogy számértéket kapjunk a számhoz. Van egy listánk, amely az elsőt, a másodikat, a harmadikat és a negyediket tartalmazza. Amikor átadjuk a számot a List.PositionOf-nak , akkor a nulla alapú eltolást adja vissza.
Ismét, ha egy érték nincs jelen, akkor -1-et ad vissza. Tehát az első rekordnál az 1 értéket adjuk át. Az 1 nem szerepel ebben a listában, ezért a -1 értéket adja vissza. A második rekordnál a Third értéket adjuk át, ami a harmadik elem a listánkban. Ez a 2 értéket adja vissza.
Dátumlista készítése
Most készítsünk egy listát a dátumokról. Meghatározzuk az adott hónap kezdő dátumát, meghatározzuk a napok számát abban a hónapban, és a List.Dates segítségével létrehozunk egy listát, amely az adott hónap összes napját tartalmazza.
Ezután a List.Select funkciót használjuk, hogy csak azokat a dátumokat őrizzük meg, amelyek egy adott hétköznapon vannak.
Ha bármelyik lista melletti oldalra kattintunk, láthatjuk, hogy csak ezt a négy elemet tartalmazza.
Feltételes logika alkalmazása
Végül feltételes logikát alkalmazunk egy dátum létrehozásához vagy lekéréséhez. Ha a hét napja null , ami azt jelzi, hogy van egy konkrét dátumunk, használhatjuk a belső #date értéket a dátumérték létrehozásához.
Ha a szám egyenlő az utolsóval, akkor a List.Reverse függvénnyel megfordíthatjuk a sorrendet a listában, és kivonhatjuk az első értéket.
Ha ezt a növekvő sorrendet csökkenőre akarjuk változtatni, akkor ebből a dátumtartományból mindig kivonhatjuk az utolsó dátumot. Nem számít, hogy négy vagy öt elemünk van a listában. A sorrend megfordításával és az első tétel kibontásával mindig megvan az utolsó dátum.
Az összes többi esetben a List.Skip parancsot használjuk .
Az értéket a lista ezen pozíciója alapján kinyerhetjük. Hálaadás napján a szám a negyedik, a negyedik pedig 3-at ad vissza. Ezzel kihagyja a lista első három értékét, és mindig a negyedik elemet adja vissza.
Tegyük össze az egészet, és menjünk a megoldás lekérdezésére. A forráslépéshez a RAW ünnepnapok dátumtáblázatát hívjuk. Ezután hozzáadunk egy oszlopot, amely egy listát ad vissza dátumokkal.
Az örökös ünnepnaptár M kódjának áttekintése
Ellenőrizzük az oszlop M kódját. A táblázat minden sorához beágyaztunk egy táblázatot, amely a dátumtáblázattól eltérő éveket tartalmaz. Ezután az egyéni függvény meghívásával átalakítottuk az év oszlop értékeit.
Természetesen ahhoz, hogy az egyéni függvényt meghívhassuk, először el kell végeznünk a beállítást. Meg kell kapnunk a hónap számát , a számértéket és természetesen a hét napját . Aztán abból a beágyazott táblázatból megtartottuk a listát a dátumokkal.
Ha oldalra kattintunk a fehér mezőben, lentebb láthatjuk a lista előnézetét.
A következő lépés a lista bővítése és a CelebratedOnDate hozzáadása .
Ezt a logikát használtuk a számítás során: ha a dátum szombaton van, akkor kivonunk egy napot, hogy pénteken érkezzünk. Ha vasárnap van, akkor hozzáadunk egy napot a hétfői leszálláshoz. Ha nem szombat vagy vasárnap, akkor nullát akarunk.
Végül az utolsó lépés a típusok megváltoztatása.
Következtetés
Csak egy gyors emlékeztetőegy folyamatban lévő sorozat, amely minden 1. és 3. szerdán történik a LuckyTemplates fórumon. Az 1. héten közzétett probléma DAX-alapú, míg a 3. heti probléma Power Query-alapú megoldást igényel.
Ha tetszett az ebben a POTW-ben tárgyalt tartalom, kérjük, iratkozzon fel a LuckyTemplates TV-csatornára a továbbiakért. Rengeteg tartalom jön ki folyamatosan tőlem és egy sor tartalomkészítőtől, mindannyian elkötelezettek a LuckyTemplates és a Power Platform használatának javításáért.
Méhfű
Ez az oktatóanyag áttekintést nyújt a Power Query szerkesztőről és az M nyelvről a LuckyTemplates asztalon.
Ismerje meg, hogyan hozhat létre oldalszámozott jelentést, hogyan adhat hozzá szövegeket és képeket, majd exportálhatja a jelentést különböző dokumentumformátumokba.
Ismerje meg, hogyan használhatja a SharePoint automatizálási funkcióját munkafolyamatok létrehozására, és segít a SharePoint-felhasználók, -könyvtárak és -listák mikrokezelésében.
Fejlessze jelentéskészítési készségeit, ha csatlakozik egy adatelemzési kihíváshoz. Az Accelerator segítségével LuckyTemplates szuperfelhasználóvá válhatsz!
Ismerje meg, hogyan számíthatja ki a futó összegeket a LuckyTemplates programban a DAX segítségével. Az összesítések futtatása lehetővé teszi, hogy ne ragadjon le egyetlen egyéni eredménynél sem.
Ismerje meg a változók fogalmát a DAX-ban a LuckyTemplates-en belül, és a változók hatásait a mérőszámok kiszámítására.
Tudjon meg többet a LuckyTemplates Slope diagram nevű egyéni vizualizációról, amely egyetlen vagy több mérőszám növekedésének/csökkenésének megjelenítésére szolgál.
Fedezze fel a LuckyTemplates színtémáit. Ezek elengedhetetlenek ahhoz, hogy jelentései és vizualizációi zökkenőmentesen nézzenek ki és működjenek.
Az átlag kiszámítása a LuckyTemplates alkalmazásban számos módon elvégezhető, hogy pontos információkat kapjon üzleti jelentéseihez.
Nézzük meg a Standard LuckyTemplates Theming témakört, és tekintsünk át néhány olyan funkciót, amely magában a LuckyTemplates Desktop alkalmazásban található.