Power Query M 数式言語の評価モデルは、スプレッドシートでよく見られる評価モデルの後にモデル化されます。計算の順序は、セル内の数式間の依存関係に基づいて決定できます。
Excel などのスプレッドシートで数式を記述した場合、計算時に左側の数式の結果が右側に表示されます。
M では、式は前の式を名前で参照でき、評価プロセスによって参照される式の計算順序が自動的に決定されます。
レコードを使用して、上記のスプレッドシートの例と同等の式を生成してみましょう。 フィールドの値を初期化するときは、次のようにフィールドの名前でレコード内の他のフィールドを参照します。
[
A1 = A2 * 2,
A2 = A3 + 1,
A3 = 1
]
上記の式は、次のレコードに評価されます。
[
A1 = 4,
A2 = 2,
A3 = 1
]
レコードは、他のレコード内に格納することも、 入れ子にすることもできます。 ルックアップ演算子 ([ ]) を使用すると、レコードのフィールドに名前でアクセスできます。 たとえば、次のレコードには、レコードを含む Sales という名前のフィールドと、Sales レコードの FirstHalf フィールドと SecondHalf フィールドにアクセスする Total という名前のフィールドがあります。
[
Sales = [ FirstHalf = 1000, SecondHalf = 1100 ],
Total = Sales[FirstHalf] + Sales[SecondHalf]
]
上記の式は、次のレコードに評価されます。
[
Sales = [ FirstHalf = 1000, SecondHalf = 1100 ],
Total = 2100
]
位置指定インデックス演算子 ({ }) を使用して、リスト内の項目に数値インデックスでアクセスします。 リスト内の値は、リストの先頭から 0 から始まるインデックスを使用して参照されます。 たとえば、インデックス 0 と 1 は、次の一覧の 1 番目と 2 番目の項目を参照するために使用されます。
[
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 式に移動) は、 遅延評価を使用して評価されます。 つまり、必要に応じて評価されます。 他のすべての式は、 一括評価を使用して評価されます。 つまり、評価プロセス中に検出されるとすぐに評価されます。 これについて考える良い方法は、リストまたはレコード式を評価すると、(ルックアップ演算子またはインデックス演算子によって) 要求されたときに、リスト アイテムまたはレコード フィールドの計算方法を認識するリストまたはレコード値が返されることを覚えておくことです。