A Power Query listái - hogyan, mikor és miért AZ ÖN-SZOLGÁLTATÁS-BI BLOG
Az M nyelvnek vannak úgynevezett strukturált értékei, amelyekhez listák, rekordok és táblázatok tartoznak. Minden értéktípus meghatározott célokat szolgál, és ez a bejegyzés célja, hogy bevezetést adjon a listákhoz. Ez a bejegyzés az M. listáiról, rekordjairól és táblázatairól szóló sorozat része. Ebben a bejegyzésben néhány M kódú képernyőképet mellékeltem. Itt letöltheti a kódot a képernyőképekről txt fájlként. A letöltéshez nincs szükség jelszóra. Ha továbbra is kéri a OneDrive jelszavát, cserélje böngészőjét Edge-re.
Az M-ben kétféle érték létezik: primitív és strukturált érték. Példák a primitív értékekre:
- "A",
- 1,
- igaz.
Ilyen módon primitívek, hogy nem más értékekből tervezték őket. A primitív értékekkel szemben M-ben úgynevezett strukturált értékeket használunk, amelyek más, primitív és strukturált értékekből állnak. A lista egyike ezeknek a strukturált értékeknek (a többiek rekordok és táblázatok), és "rendezett értéksorozatként" írják le. A definiált listát egy nyitó göndör zárójel zárja be. Még ha felsorolja is lehet üres (úgy néz ki, mint ez "<>"), a listák vannak mérete nem korlátozott, mert M végtelenül nagy listákat támogat.
A lista nagyon egyszerű képviselőjére példa:
Mielőtt részletesebben megnéznénk azokat a listákat, amelyek ezek és mire szolgálnak, beszéljük meg, miért kell egyáltalán használni a listákat.
Az esetek döntő többségében egy listát fognak használni köztes termék más lekérdezésekhez. Mindenesetre rendkívül ritka egy lista betöltése az adatmodellbe.
Sok az őshonos funkciókat M-ben, amelyek hasznos funkcionalitást és elvárják a listákat egy vagy több paraméterek. Ezekben az esetekben fontos tudni, hogyan kell listákat létrehozni, hogy megfelelő módon biztosíthassa ezeket a függvényeket a szükséges paraméterekkel.
Ezen kívül sok funkciókat M-ben hogy visszatérési listák mint visszatérő értékeket. Ezen okokból tudni kell, hogyan kell velük bánni az M nyelv biztonságos használata érdekében.
Vessünk egy pillantást a listák létrehozására.
Egy M-es listának általában van kezdete és vége, és tapasztalataim szerint vannak 3 módokon M-ben hogy létrehozzon egy listát:
1. A lista inicializáló szintaxisának használata göndör zárójelekkel
Megadhat egy listát egy nyitó "göndör zárójel" elemlista használatával, majd egy záró göndör zárójel ">" zárásával. A legegyszerűbb lista egy üres lista.
Üres listák
A az üres lista az összes lista közül a legegyszerűbb, amelyben az elemlista üres:
Egy üres lista gyakorlati felhasználási esete például egy olyan táblázat létrehozása a Power BI adatmodellben, amely csak intézkedéseket tartalmaz. Ellentétben a Power Query-ben létrehozott üres táblával (amelyet így hozhat létre: = #table (<>, <>)), amely egyszerűen nem jelenik meg az adatmodellben az üres lista táblázatként importálódik az adatmodellbe egy oszloppal és sorokkal. Egyszerűen rejtse el az eredményül kapott oszlopot az adatmodellben, és használja ezt az üres táblázatot mérési táblázatként.

Az üres lista természetesen inkább különleges eset, mert a listák általában értékeket, úgynevezett elemeket tartalmaznak.
Vesszővel elválasztott tételek
A nem üres Bármely típusú vesszővel elválasztott értéket hozzáadhatok a listához az alábbiak szerint:
Nem üres lista manuális létrehozása
Ha nagyszámú összefüggő értéket akarok hozzáadni egy listához, akkor a vesszővel elválasztott meghatározás meglehetősen összetett. De ehhez van segítség ...
Függő számokkal ellátott listák
Például, ha szeretnék létrehozni egy listát, amely a egész számok 1-től 100-ig, Nem kell ezeket a számokat manuálisan hozzáadnom a listához. Ehelyett ott van a rövidítést követve:
Ha például az egész számokat szeretném felsorolni 1-től 100-ig, de a 48. szám kellene kizárva, akkor ez a következőképpen működik:
Az összefüggő értékek ilyen sorozatának legfeljebb 2 ^ 31 (2.147.483.647) érték lehet. Nézze meg például a következő lista-meghatározást:
Annak a ténynek köszönhetően, hogy itt 2 147 483 647-nél nagyobb számtartományra hivatkozunk, a következő hibaüzenet jelenik meg:
Az összefüggő számok nem lehetnek korlátlanul nagyok
Ez azonban nem jelenti azt, hogy magában a listában nem lehet több elem, mert mint már említettük, a listák végtelenül nagyok lehetnek. A következő meghatározás érvényes eredményt ad vissza:
Az egész számok összefüggő tartományának "." szintaxisa szintén alkalmazható karakterek.
Felsorolható karakterekkel ellátott listák
Az imént bemutatott eljárás az egymást követő számok esetében betűk és karakterek esetében is lehetséges. Például a következő lista meghatározása érvényes:
Az eredmény a következőképpen néz ki:
Nem meglepő, hogy a Power Query "tudja", hogy az "a" után jön a "b", de nézze meg a listát és annak eredményét:
A "Z" és az "a" betűk között számos speciális karakterek. Tehát mi ennek a listának az alapja és annak rendezési sorrendje?
A karakterlisták Unicode-on alapulnak
Az M függvény Character.ToNumber () felfedi a titkot:
A karakterlisták Unicode-on alapulnak
A karakterek listája a "."-szintaxis belsőleg használat a Unicode meghatározás hogy meghatározzuk mind a karaktereket, mind azok sorrendjét. Tehát a lista belső átalakításra kerül, végül pedig unicode karakterek listájává. Ha meg akarja látni a megfelelő Unicode karaktert egy speciális numerikus értékhez, használhatja a Charater.FromNumber () függvényt. Például a Character.FromNumber (91) "[" eredményt ad .
Ez az unicode karakterek rendezett sorrendje okozza az üres lista létrehozását: A lista belsõen konvertálódik numerikus értékeire, ami ebben az esetben azt jelenti. Mivel a definiált lista eleje a lista vége előtt van, az eredmény egy üres lista.
A listák manuális meghatározása az egyik módja. Nézzük meg, hogyan kell listákat készíthet megfelelő funkciókat.
2. A natív M függvények használatával listákat hozhat létre
Az írás idején megvan 63 funkció M-ben amelyek listát adnak vissza. Közülük a legkézenfekvőbb a lista. * Funkciók (de nem mindegyik hoz létre listát). Népszerű példák:
Ugyancsak könnyen azonosíthatók a * .ToList () konverziós függvények (amelyeket később részletesebben tárgyalok), például:
Mindezek a függvények listákat hoznak létre a bemeneti paraméterek alapján. De van egy másik módszer a lista létrehozására.
3. Hivatkozás a táblázat oszlopára/mezőjére
A lista létrehozásának harmadik módja a táblázat oszlopának hivatkozása a következő szintaxissal: Table [ColumnName]:
Lista létrehozása egy táblázat oszlopának hivatkozásával
Mivel ez nem biztos, hogy nyilvánvaló, megemlítem itt, hogy a hivatkozás egy lépés nevére (ha egy táblázatot ad vissza) a ugyanaz a hatás, mint a tábla kifejezésre való hivatkozás: # "lépés neve" [oszlop] .
Most, hogy tudjuk, melyek a listák és hogyan készülnek, a listák kezelésére fogunk összpontosítani.
vannak 3 operátor amelyek a listákkal együtt használhatók: "=" és "<>" lehetővé teszi a listák összehasonlítását, míg a "&" kombinálja a listákat. Íme néhány példa ennek használatára:
- =→ igaz
- <>→ igaz
- →. Ez a List.Combine (<, >)
Egy másik szempont, amely a listák szempontjából érdekes, hogyan kell elérheti a lista elemeit.
Ha megvan a lista, néha szükség van a lista speciális elemeinek közvetlen elérésére.
A helyzeti index operátor használatával <>
A listában szereplő elemek eléréséhez használhatja az - ún. helyzeti index operátor "<>" Numerikus indexével. A elemek egy listában az a használatára utalnak nulla alapú index. A következő példák ezt részletesen kifejtik:
Vegyük a következő listát: MyList =. Mivel a listaelemek belső indexe nullával kezdődik, a következő eredményeket kapom:
A MyList a következő hibaüzenethez vezet, mondván, hogy megpróbálnak hozzáférni a lista olyan eleméhez, amely nem létezik a listában:
Ennek az utolsó hibaüzenetnek a leküzdéséhez használhatja az úgynevezett opcionális elem-választást az alábbiak szerint, amely nullát ad vissza, ha a kiválasztott elem nem létezik:
A listám ? → nulla
A List.Count () függvény segítségével megtudhatja, hogy hány elem szerepel a listában. List.Count (MyList) a 3. eredményhez vezet, így a lista utolsó elemének indexe 2 (List.Count (MyList) -1), mert az index nulla alapú.
A fent bemutatott példákon kívül különféle natív M funkciók is léteznek, amelyek hozzáférést tesznek lehetővé a lista elemeihez.
A natív M függvények használata
Az M könyvtár a listafunkciók széles skáláját kínálja, amelyek közül néhány hozzáférést biztosít a listaelemekhez. A következő példákhoz vegye ezt a listát az alábbiak szerint: MyList =
List.First ()
Ez a függvény hozzáfér a lista első eleméhez, ami egyenértékű a 0 indexű helyzeti index operátor használatával (például MyList).
List.FirstN ()
Ez a funkció kétféleképpen működik.
- Ha a második paraméter függvény a szám, az első listaelemek erre a számra kerülnek vissza: List.FirstN (MyList, 2) =
- Ha a második paraméter függvény a állapot, mindazokat az elemeket visszaküldik, amíg a feltétel már nem érvényesül először: List.FirstN (MyList, mindegyik _
List.Last ()
Ez a funkció a lista utolsó elemét éri el. A következő két kifejezés megegyezik: List.Last (MyList) = MyList
List.LastN ()
Listként működik. ElsőN, de fordítva.
List.Range ()
Visszaszámláló elemeket ad vissza eltolással kezdődően. List.Range (MyList, 2, 3) a következő eredményhez vezet:
Lista. Válassza ki ()
Ez a függvény a lista elemeit határozza meg, nem a listán belüli pozíciójuk alapján, hanem bizonyos feltételek alapján, amelyeket ennek az elemnek teljesítenie kell. A következő példa áttekint egy listát, és kijelöli azokat az elemeket, amelyek értéke nagyobb, mint 2:
Lista. Válassza a (MyList, mindegyik _> 2) lehetőséget, amely eredményként adja vissza a következő listát:
Néha egy bizonyos funkciót szeretne használni az M-ben, és meg kell keresnie a megfelelő funkciót. Ha például szeretném nevezze át az oszlop nevét A dinamikusan oszlopos oszlopneveket tartalmazó táblázatok közül ezt M-ben meg tudom csinálni a Table.RenameColumns () függvénnyel. Ha figyelmen kívül hagyom a függvény utolsó opcionális paraméterét, akkor annak felépítése a következőképpen írható le:
Table.RenameColumns (Megváltoztatandó oszlopnevekkel ellátott táblázatok, felsorolás a struktúrával)
Az alábbi képernyőképen látható egy M szkript, amely átnevezi a táblázat két meglévő oszlopát, és fel van készülve arra, hogy az eredeti táblázat oszlopfeliratai a következő futtatás során megváltozzanak. Az oszlopfeliratok tényleges átnevezése a let-kifejezés (2) utolsó sorában történik. A piros mezőben (1) leírt összes lépést a táblázat által megkívánt régi név/új névpárok dinamikus listájának létrehozásához használjuk. RenameColumns () függvény.
Dinamikusan változó oszlopnevek átnevezése
Ezután nézzük meg a listákat generáló függvényeket.
Az M számos funkciója listákat generál, amelyek közül a legnyilvánvalóbb a *. ToList függvények:
* .ToList funkciók
Binary.ToList () - Létrehozza a bináris fájlok listáját.
Record.ToList () - Egy rekordot konvertál listává, amely tartalmazza a rekord mezőértékeit.
Példa a Record.ToList ()
Table.ToList () - Létrehoz egy táblázatot az oszlopok soronkénti elválasztásával egy elválasztóval, amely meghatározható az opcionális kombináló paraméterben (pl. Combiner.CombineTextByDelimiter (","))
Példa a Table.ToList ()
Szöveg.ToList () - Létrehoz egy listát egy szövegből úgy, hogy mindegyik karaktert külön-külön adja hozzá listaelemként.
Példa a Text.ToList ()
Azonban a *. ToList függvények nem az egyetlen olyan funkciók, amelyek listát generálnak egy bizonyos típusú értékből.
Egyéb funkciók, amelyek listákat hoznak létre
Egyes funkciók esetében a név nem utal arra, hogy listákat készítsenek. Erre példa a Text.Split () függvény. Képzelje el a következő feladat: Hosszú szövegben számolja meg a különálló szavak számát. A következő parancsfájl ezt a Text.Split () más listafunkciókkal kombinálva hajtja végre.
A Text.Split () segítségével megszámolhatja (elkülönítheti) a szavakat
További példák a függvényekre, amelyek visszaadják a listákat, de nem így hangzanak:
Annak ellenére, hogy sokkal több mondanivaló van a listákról és azok képességeiről, azt hiszem, egyértelművé vált, hogy a listáknak megvan a varázsa, és hogy az M nyelv elsajátításához szükséges velük foglalkozni.
Üdvözlet Németországból,
Lars a Microsoft Power BI tanácsadója, fejlesztője és oktatója. Okleveles Power BI szakértő és Microsoft oktató. A nemzetközi közösség iránti elkötelezettségéért Lars-t 2017 óta évente átadják az MVP-díjnak. Bővebben itt ...