Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
Základy k pochopení jazyka M v Editoru Power Query. Není pro práci v Editoru Power Query nezbytné, ale když ho pochopíte, dokážete vytvářet různá prospěšná kouzla při zpracování dat.
Lze aplikovat v Excel (jak jinak), ale i Power BI.
Jak na M-kód co který řádek znamená, jak vypadá, jak vložit poznámky a spousta dalších zajímavých a potřebných informací. Pro přehlednost je článek rozdělen do kapitol.
Chcete-li upravovat M-kód musíte vstoupit do Editoru M-kódu, který se nachází v Editoru Power Query. Předpokládám, že jste v Editoru Power Query. Stačí v menu
V dialogovém okně si můžete všimnout, že možnosti jsou v tuto chvíli velice omezené. Rozšířený editor je v podstatě jen textový editor (který obarvuje některé písmena). S kontrolou syntaxe v levém dolním rohu a malých možností zobrazení v pravém horním rohu.
Po úpravách může být okno trochu upraveno (můžete mít číslované řádky, což se hodí).
Předpokládám, že Microsoft brzo do tohoto okna ještě zainvestuje a podstatně ho vylepší (přeci jen možností M-kódu jsou obrovské, tak proč tuto obrovskou sílu nevyužít a okno nevylepšit o prvky programovacího editoru). Bohužel v současnosti (01/2022) je to v podstatě obyčejné textové barevné pole.
Uvnitř rozšířeného editoru se může nacházet podobný jednoduchý kód:
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka1"]}[Content]
in
Zdroj
Tento kód obsahuje několik klíčových částí, které jsou nutné k sestavení úspěšného M dotazu. Pro pochopení si tento kód rozdělíme na jednotlivé řádky.
Ve speciláních případech (přesahuji rámec tohoto článku a nechci vás vyděsit) skladba M kódu nemusí obsahovat konstrukci Let In. Za tip na dolnění děkuji Pavel Ondra.
= Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Tabulka1"]}[Content],{{"ID", Int64.Type}})
Seznam speciálních znaků a co znamenají. Vložil jsem do tabulky.
Znak | Popis |
---|---|
(Parametry) | Pro parametry funkce. |
{List} | Složené závorky obklopující položky seznamu. Viz dále případně samostatný článek. |
[Record] | Obklopující záznamy. Viz samostatný článek |
"Text" | Hodnoty, stringy. Uvozovky obklopují tento text. |
#"Název kroku" | Odkazující na název kroku, který obsahuje mezery nebo jiné vyhrazené znaky |
NazevKroku | Odkazující na název kroku, kdy krok nemá v názvu mezery |
//comment | Komentování jednoho řádku kódu |
/* komentář dvouřádkový*/ | Komentování více řádků kódu začátek /* (lomítko hvězdička), konec */ (hvezdička lomítko) |
.. | Pro rozsah např. u seznamu, jako řada číslel 1 až 365 ={1..365} |
= | Přiřazení hodnoty, například pro parametr |
Rychlý přehled základních speciálních znaků. Napadá vás co doplnit můžete zmínit v komentářích
Druhá věc, které byste si mohli všimnout je, že před názvem nějakého kroku je znak # doplněný o uvozovky ". například: #"Změněný typ" (#"Changed Type").
Konstrukce #"" uvozují název kroku (transformačního korku), který ve svém názvu obsahuje mezeru a jiné neASCII znaky.
Ukázky rozšířeného editoru po přidání nového kroku, kdy změníte typ prvního sloupce na číslo. Přidá se nový krok, který se jmenuje Změněný typ. Tj. Název kroku obsahuje mezeru oproti předchozímu kroku Zdroj.
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka1"]}[Content],
#"Změněný typ" = Table.TransformColumnTypes(Zdroj,{{"ID", Int64.Type}})
in
#"Změněný typ"
To způsobí, že Power Query s těmito dvěma slovy zachází jako se samostatnými výrazy. Aby se s tímto Editor Power Query vypořádal a zacházel se slovem Změněný typ jako s jedním slovem, přidá před slovo znakem # a spojení zabalí do uvozovek.
Bohužel se s takovýmto postupem setkáte nejčastěji. Editor Power Query použáívá výchozí názvy kroků jako dvouslovné s mezerou. Třeba časem upraví a buň bude mít názvy jednoslovné Změněno, nebo využije velbloudí konvenci ZměněnýTyp.
Za mě budou minimálně dva přínosy:
Do doby než k tomu dojde můžete jednoduše přes pravé tlačítko krok přejmenovat a kód se zjednodušší.
Není kód bez # a "" přehlednější:
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka1"]}[Content],
ZmenenyTyp = Table.TransformColumnTypes(Zdroj,{{"ID", Int64.Type}})
in
ZmenenyTyp
Lepší než ten původní kód s #?
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka1"]}[Content],
#"Změněný typ" = Table.TransformColumnTypes(Zdroj,{{"ID", Int64.Type}})
in
#"Změněný typ"
Poznámka: Ono formátování (jak kod vidíte) nemá vliv na funkci kódu, důležité jsou speciální znaky, například čárky pro oddělení query (kroku). Pokud v kódu odmažete konce řádku, stále bude fungovat. Za tip děkuji Pavel Adam.
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka1"]}[Content], ZmenenyTyp = Table.TransformColumnTypes(Zdroj,{{"ID", Int64.Type}})
in
ZmenenyTyp
Průběh zpracování dat v M-kódu jde krok za krokem, tj. v následujícím kroku se odkazujete na ten předchozí. Pokud se podíváte na fragment předchozího kódu.
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka1"]}[Content],
ZmenenyTyp = Table.TransformColumnTypes(Zdroj,{{"ID", Int64.Type}})
in
ZmenenyTyp
Zaměříme se na dva řádky:
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka1"]}[Content],
ZmenenyTyp = Table.TransformColumnTypes(Zdroj,{{"ID", Int64.Type}})
První řádek Zdroj = ... načte data ze sešitu. Druhý řádek ZmenenyTyp = ... se odkazuje na předchozí krok:Zdroj.
ZmenenyTyp = Table.TransformColumnTypes(Zdroj,{{"ID", Int64.Type}})
Vždy na konci kroku musí být čárka
Přidám další kus kódu, chci mít zobrazeny jen první dva řádky tabulky, mějte tedy kus kódu:
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka1"]}[Content],
ZmenenyTyp = Table.TransformColumnTypes(Zdroj,{{"ID", Int64.Type}}),
PrvnichXRadku = Table.FirstN(ZmenenyTyp,2)
in
PrvnichXRadku
Podívám se do předchozího kroku PrvnichXRadku z tabulky se podívám do sloupce [ID] a následně na druhý řádek {1}
CisloZTabulky = PrvnichXRadku[ID]{1}
Výsledek:
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka1"]}[Content],
ZmenenyTyp = Table.TransformColumnTypes(Zdroj,{{"ID", Int64.Type}}),
PrvnichXRadku = Table.FirstN(ZmenenyTyp,2),
CisloZTabulky = PrvnichXRadku[ID]{1}
in
CisloZTabulky
Nebo-li získáte číslo 2. Stejného stavu dosáhnete, když se odkážete na první krok
CisloZTabulky = Zdroj[ID]{1}
Výsledek:
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka1"]}[Content],
ZmenenyTyp = Table.TransformColumnTypes(Zdroj,{{"ID", Int64.Type}}),
PrvnichXRadku = Table.FirstN(ZmenenyTyp,2),
CisloZTabulky = Zdroj[ID]{1}
in
CisloZTabulky
Takto můžete tvořit zajímavé kódy. Kdy se odkážete na předchozí kroky (hodnoty z tabulek atd.)
Pokud jde o složitější konstrukce, je vhodné je doplnit o poznámky. Poznámky mohou být:
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka1"]}[Content],
// Komentář jednořádkový
ZmenenyTyp = Table.TransformColumnTypes(Zdroj,{{"ID", Int64.Type}})
in
/* komentář víceřádkový
druhý řádek komentáře
třetí a poslední řádek */
ZmenenyTyp
Aneb kroky nemusí jít postupně a můžete se odkazovat na jiné.
Výsledkem následujícího kódu bude 3:
let
A = 1,
B = 2,
C = A + B
in
C
Stejně tak výsledkem následujícího kódu bude 3:
let C = A + B, A = 1, B = 2 in CKlidně se můžete podívat na první krok kdy výsledkem bude 1:
let
A = 1,
B = 2,
C = A + B
in
A
Pro budoucnost si odložím jak v M-ku zadávat konstanty, typu číslo, text, datum:
let
Cislo = 42,
Text = "Pavel",
Logicka = true, // Nebo false
UplneNic = null,
Binarne = #binary({0x42}),
Datum = #date(2022, 1, 19),
Cas = #time(12, 42, 11),
DatumCas = #datetime(2022, 1, 19, 10, 42 ,0),
DateCasovaZona = #datetimezone(2022, 1, 19, 0, 0 ,0, 1, 0),
Trvani = #duration(0, 4, 2, 0)
in
// Můžete měnit za Datum
Text
Narazili jste na nějaké problémy, máte tip na vylepšení nebo doplnění článku, můžete se zmínit v komentářích.
Článek byl aktualizován: 19.01.2022 13:32
Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.
Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.
Můžete být prvními co zanechají smysluplný komentář.
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2025 |