Kiértékelési modell

A Power Query M képletnyelvének kiértékelési modelljét a számolótáblákban gyakran használt kiértékelési modell után modellezi a rendszer, ahol a számítások sorrendje a cellák képletei közötti függőségek alapján határozható meg.

Ha olyan számolótáblában írt képleteket, mint az Excel, akkor a bal oldali képletek felismerése a jobb oldalon lévő értékeket eredményezi a számításkor:

Evaluation Model 1

Evaluation Model 2

Az M-ben egy kifejezés név alapján hivatkozhat a korábbi kifejezésekre, és a kiértékelési folyamat automatikusan meghatározza a hivatkozott kifejezések kiszámításának sorrendjét.

Használjunk egy rekordot a fenti számolótábla-példával egyenértékű kifejezés létrehozásához. Egy mező értékének inicializálásakor a rekord többi mezőjére a mező nevével hivatkozik, az alábbiak szerint:

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

A fenti kifejezés a következő rekordot értékeli ki:

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

A rekordok más rekordokon belül vagy beágyazottan is tárolhatók. A keresési operátor ([ ]) használatával név szerint érheti el a rekord mezőit. Az alábbi rekord például egy Sales nevű mezőt tartalmaz, amely egy rekordot tartalmaz, és egy Összeg nevű mezőt, amely hozzáfér az Értékesítési rekord FirstHalf és SecondHalf mezőihez:

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

A fenti kifejezés a következő rekordot értékeli ki:

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

A pozícióindex operátorral ({ }) numerikus index alapján érheti el a lista elemeit. A lista értékeire a lista elejétől nulla alapú indexet használunk. A 0 és az 1 index például az alábbi lista első és második elemére hivatkozik:

[
    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
]

Lusta és lelkes értékelés

A lista-, rekord- és táblatagkifejezések, valamint a kifejezéseket (Ugrás a kifejezésekre, értékekre és kifejezés engedélyezése) a rendszer lusta kiértékeléssel értékeli ki. Vagyis szükség esetén kiértékelik őket. Minden más kifejezés kiértékelése lelkes kiértékelés használatával történik. Vagyis a kiértékelési folyamat során azonnal kiértékeljük őket. Érdemes átgondolni, hogy a lista- vagy rekordkifejezések kiértékelése olyan lista- vagy rekordértéket ad vissza, amely tudja, hogy a listaelemeket vagy rekordmezőket hogyan kell kiszámítani, amikor a rendszer kéri (keresési vagy indexelési operátorok segítségével).