評価モデル
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 から始まるリストの先頭からのインデックスを使用します。 たとえば、次のリストの 1 番目と 2 番目の項目を参照するには、インデックス 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 式」を参照) は、遅延評価を使用して評価されます。 これらは、必要になったときに評価されます。 他の式はすべて、即時評価を使用して評価されます。 つまり、評価プロセス中に見つかった場合、これらは直ちに評価されます。 これについて考える良い方法は、リストまたはレコード式を評価すると、(参照またはインデックス演算子によって) 要求されたときに、リスト項目またはレコード フィールドの必要な計算方法を認識しているリストまたはレコードの値が返されることを、思い出すことです。