Základní principy “M” (jazyka pro práci s Power Query)
S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.
Tento článek popisuje nejzákladnější pravidla pro práci s jazykem M, který slouží k tvorbě dotazů v Power Query (Načíst a transformovat) v Excelu a stejně tak pro tvorbu dotazů v Power BI.
Jazyk M, upřímně řečeno, ani nemusíte znát pokud dotazy vytváříte - většinu věcí si naklikáte a do M kódu v pozadí si to Excel nebo Power BI přepíší sami. Tento článek je tedy spíše pro zvídavé nebo pro pokročilejší - kteří díky psaní kódu mohou zvládnout i něco, co naklikat nejde (příklady toho, co naklikat nejde viz tady).
Ještě než se pustím do konkrétních pravidel syntaxe, tak upozorňuji, že M rozlišuje mezi malými a velkými písmeny v názvech funkcí i proměnných - tedy když chcete napsat např. název funkce If, nesmíte napsat IF. To je trochu chyták, protože další jazyky, o kterých tady píšeme, takové fajnovky co se týká názvů funkcí nejsou.
- Běžné vzorce v Excelu můžete psát jakkoliv a Excel si názvy funkcí sám změní na všechna velká. Tedy např. "if" se změní na "IF".
- DAX vás nechá napsat malá nebo velká písmena.
- VBA si syntaxi samo upraví, ve funkcích obvykle na první velké písmena a ostatní malá.
Takže v Mku musíme dávat pozor na velikost písmenek. A dál?
Základ
Základní logika je vlastně jednoduchá. Zápis dotazu do dat má vždy dva bloky - "let" a "in". "Let" je víceřádková definice proměnných, zatímco "in" je výstup. Ano, "in" je opravdu to, co jde ven - netvrdím, že to dává smysl...
Zápis tedy může vypadat třeba takto:
let
my_variable = "hello world"
in
my_variable
V našem příkladu bude výstupem "hello world", tedy hodnota proměnné "my_variable", která se objeví na výstupu. Pokud toto zapíšete nebo zkopírujete do rozšířeného editoru v Power Query nebo v Power BI, opravdu uvidíte na výstupu opravdu "hello wordl".
Jenomže dotazy většinou nepíšeme proto, abychom zobrazovali "Hello world". Takto tedy vypadá dotaz, který v původním zdroji vezme sloupec "Revenue" a vydělí ho tisícovkou.
let
Source = my_source,
#"Divided Column" = Table.TransformColumns(Source, {{"Revenue", each _ / 1000, type number}})
in
#"Divided Column"
Proměnné
Zjednodušeně lze říci, že každý řádek se nějak odvozuje z toho předchozího. Tedy poslední řádek (in) se jmenuje "Divided Column" a počítá se ze Source pomocí funkce Table.TransformColumns. Source se počítá z "my_source" a tak až na začátek, třeba i pro velké množství řádků.
Názvy kroků (nebo, chcete-li, proměnných), mohou být libovolné - pokud byste místo "Source" psali "xy", bude to fungovat také - jen to musíte použít jak v řádku, kde tato proměnná vzniká, tak v tom, kde je použitá.
Pokud má proměnná více slov, pak je třeba dát jí do uvozovek a před ní psát křížek - tedy např.
- xy
ale
- #"x y"
Funkce
Funkce se volají tak, že se napíše jejich název, a jejich vstupy - např. takto:
- Text.Start("abcd", 2)
vytáhneme z textu první dva znaky (obdoba funkce ZLEVA v Excelu).
Komentáře
Komentář, tedy část kódu, která nemá vliv na funkci, napíšete buď pro jeden řádek s dvojitým lomítkem:
- // tady je můj komentář
nebo pro více řádků
- */ tady je můj
komentář */
Tak asi tak... v kostce...
S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.