Model vyhodnotenia

Model vyhodnotenia jazyka vzorcov Power Query M sa modeluje po modeli vyhodnotenia, ktorý sa bežne nachádza v tabuľkových hárkoch, kde možno určiť poradie výpočtov na základe závislostí medzi vzorcami v bunkách.

Ak ste písali vzorce do tabuľkového hárka, ako je napríklad Excel, môžete rozpoznať, že vzorce na ľavej strane budú mať po vypočítaní za následok hodnoty vpravo:

Evaluation Model 1

Evaluation Model 2

V jazyku M môže výraz odkazovať na predchádzajúce výrazy podľa názvu a proces vyhodnotenia automaticky určí poradie, v ktorom sa vypočítavajú výrazy, na ktoré sa odkazuje.

Použijeme záznam na vytvorenie výrazu, ktorý je ekvivalentom vyššie uvedeného príkladu tabuľkového hárka. Pri inicializácii hodnoty poľa odkazujete na iné polia v rámci záznamu podľa názvu poľa takto:

[
    A1 = A2 * 2,
    A2 = A3 + 1,
    A3 = 1
]

Vyššie uvedený výraz sa vyhodnotí v nasledujúcom zázname:

[
    A1 = 4,
    A2 = 2,
    A3 = 1
]

Záznamy sa môžu nachádzať alebo byť vnorené v iných záznamoch. K poliam záznamu môžete získať prístup podľa názvu pomocou operátora vyhľadávania ([ ]). Nasledujúci záznam má napríklad pole s názvom Sales (Predaj) obsahujúce záznam a pole s názvom Total (Súčet), ktoré pristupuje k poliam záznamu predaja FirstHalf (Prváhalfa) a SecondHalf (Druhádla):

[
    Sales = [ FirstHalf = 1000, SecondHalf = 1100 ],
    Total = Sales[FirstHalf] + Sales[SecondHalf]
]

Vyššie uvedený výraz sa vyhodnotí v nasledujúcom zázname:

[
    Sales = [ FirstHalf = 1000, SecondHalf = 1100 ],
    Total = 2100
]

Na prístup k položke v zozname použijete číselný index pomocou operátora poziálneho indexu ({ }). Na hodnoty v zozname sa odkazuje pomocou indexu založeného na nule od začiatku zoznamu. Indexy 0 a 1 sa napríklad používajú na odkazovanie na prvú a druhú položku v zozname nižšie:

[
    Sales =
        {
            [
                Year = 2007,
                FirstHalf = 1000,
                SecondHalf = 1100,
                Total = FirstHalf + SecondHalf // equals 2100
            ],
            [
                Year = 2008,
                FirstHalf = 1200,
                SecondHalf = 1300,
                Total = FirstHalf + SecondHalf // equals 2500
            ]
        },
    #"Total Sales" = Sales{0}[Total] + Sales{1}[Total] // equals 4600
]

Lenivé a nedočkavé vyhodnotenie

Výrazy členov List, Record a Table , ako aj výrazy let (Prejsť na výrazy, hodnoty a výraz let) sa vyhodnocujú pomocou lenivého hodnotenia. To znamená, že sa vyhodnocujú v prípade potreby. Všetky ostatné výrazy sa vyhodnocujú pomocou nedočkavého vyhodnotenia. To znamená, že sa vyhodnocujú okamžite, keď sa vyskytnú počas procesu hodnotenia. Dobrým spôsobom je zapamätať si, že vyhodnotením výrazu zoznamu alebo záznamu sa vráti hodnota zoznamu alebo záznamu, ktorá vie, ako sa jej položky zoznamu alebo polia záznamov musia vypočítať, keď sa to vyžaduje (vyhľadávaním alebo operátormi indexu).