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…