評估模型

Power Query M 公式語言的評估模型是以試算表中常見的評估模型為基礎,其中計算的順序會根據儲存格中公式間相依性來決定。

若曾在 Excel 等試算表中撰寫過公式,您可能會知道在計算時,左側公式會產生右側的值:

Evaluation Model 1

Evaluation Model 2

在 M 中,運算式可以透過名稱參考先前的運算式,且評估流程會自動判斷計算參考運算式的順序。

讓我們使用記錄來產生與以上試算表範例相當的運算式。 初始化欄位的值時,您可以透過欄位名稱來參考記錄中的其他欄位,如下:

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

以上運算式會評估為下列記錄:

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

記錄可以包含或以巢狀方式包含在其他記錄中。 您可以使用查閱運算子 ([ ]) 來透過名稱存取記錄欄位。 例如,下列記錄包含名為 Sales 的欄位 (其包含一筆記錄),以及名為 Total 的欄位,該欄位會存取 Sales 記錄的 FirstHalf 和 SecondHalf 欄位:

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

以上運算式會評估為下列記錄:

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

您可以使用位置索引運算子 ({ }) 來透過清單的數字索引以存取清單中項目。 清單內值可使用以零為基礎的索引,從清單的開頭參考。 例如,索引 0 和 1 會用來參考以下清單中的第一個和第二個項目:

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

消極式和積極式評估

清單記錄資料表成員運算式,以及 let 運算式 (前往運算式、值和 let 運算式) 會使用消極式評估進行評估。 也就是說,系統會視需要加以評估。 所有其他運算式都會使用積極式評估來評估。 也就是說,在評估程式期間遇到它們時,會立即進行評估。 考慮這一點的其中一種好方法是記住評估清單或記錄運算式時,會傳回一個清單或一筆記錄值,該值會知道在要求時需要其清單項目或記錄欄位的方式 (透過查閱或索引運算子)。