ステップを変数として利用する
Power Query(M言語)を実務で使う際に、「ステップ=変数」という発想を理解すると、コードの読みやすさ・保守性・応用力が一気に向上します。 初心者が最初に戸惑うポイントですが、仕組みはとてもシンプルで、むしろ“変数として扱えるからこそ”Power Queryは強力です。
ここでは、ステップを変数として扱う意味・使い方・応用までを、例題とテンプレートを交えてステップバイステップで解説します。
ステップは「ただの名前」ではなく“変数”である
ステップ名=変数名
Power Query の let … in 構造では、次のように書きます。
let
Step1 = ...,
Step2 = Step1 + 10,
Step3 = Step2 * 3
in
Step3
Power Queryここで重要なのは、
Step1・Step2・Step3 はすべて「変数」であり、値を保持している
という点です。
Excel のセル参照(A1、B2)と同じように、 後続ステップで前のステップを参照できるのが M 言語の最大の特徴です。
ステップを変数として扱うメリット
1. 処理を分割できる
複雑な処理を一行で書く必要はありません。 ステップごとに分けて書けば、読みやすく、修正しやすくなります。
2. 再利用できる
同じ処理結果を複数のステップで使いたい場合、変数として保持しておけば何度でも使えます。
3. デバッグしやすい
途中のステップを in に返すだけで、簡単に中間結果を確認できます。
ステップを変数として扱う例題
例題:売上テーブルを読み込み → フィルタ → 列追加 → ソート
let
Source = Excel.CurrentWorkbook(){[Name="売上"]}[Content],
FilteredHighAmount =
Table.SelectRows(Source, each [金額] > 1000),
AddedTaxColumn =
Table.AddColumn(FilteredHighAmount, "税込金額", each [金額] * 1.1),
SortedByTax =
Table.Sort(AddedTaxColumn, {{"税込金額", Order.Descending}})
in
SortedByTax
Power Queryここでのポイントは、
- Source は「元データ」
- FilteredHighAmount は「金額 > 1000 の行だけ」
- AddedTaxColumn は「税込金額列を追加したテーブル」
- SortedByTax は「税込金額でソートしたテーブル」
というように、各ステップが“変数としての値”を持っていることです。
ステップを変数として扱う深掘りポイント
変数は「テーブル」「リスト」「レコード」など何でも保持できる
M言語の変数は、数値だけでなく、テーブル・リスト・レコードなど、どんなデータ構造でも保持できます。
例:
let
Numbers = {1,2,3,4},
Sum = List.Sum(Numbers)
in
Sum
Power QueryNumbers は「リスト」、Sum は「数値」です。 この柔軟性が M 言語の強みです。
ステップ名を変数として使うときの注意点
1. ステップ名は必ず一意であること
同じ名前を使うとエラーになります。
2. ステップ名は英語で意味が分かる名前にする
変数として扱う以上、名前が読みやすいほど保守性が上がります。
例:
- Good:FilteredValidRows
- Bad:Step2、AddedCustom、ChangedType
3. ステップは「上から順番に評価される」
後のステップで前のステップを参照するため、順番がとても重要です。
ステップを変数として扱うテンプレート集
テンプレ1:中間結果を保持する
let
Source = ...,
Cleaned = Table.TransformColumns(Source, {{"顧客コード", Text.Trim, type text}}),
Valid = Table.SelectRows(Cleaned, each [顧客コード] <> "")
in
Valid
Power Queryテンプレ2:複数の中間結果を再利用する
let
Source = ...,
Filtered = Table.SelectRows(Source, each [数量] > 0),
AmountCalc = Table.AddColumn(Filtered, "金額", each [数量] * [単価]),
Summary = Table.Group(AmountCalc, {"顧客コード"}, {{"合計金額", each List.Sum([金額]), type number}})
in
Summary
Power Queryテンプレ3:中間結果をデバッグする
let
Source = ...,
Cleaned = Table.TransformColumns(Source, {{"商品コード", Text.Trim, type text}})
in
Cleaned // ← 中間結果を返して確認できる
Power Queryステップを変数として扱う応用
応用1:複数のステップをまとめて返す(レコードとして返す)
let
Source = ...,
Valid = ...,
Error = ...
in
[正常行 = Valid, エラー行 = Error]
Power QueryPower Query では、レコードを返すことで「複数の結果」を返すこともできます。
応用2:ステップを関数に渡す
let
Source = ...,
Cleaned = Table.TransformColumns(Source, {{"顧客コード", Text.Trim, type text}}),
Result = MyCustomFunction(Cleaned)
in
Result
Power Queryステップ(変数)を関数の引数として渡すことも可能です。
まとめ:ステップ=変数を理解すると M 言語が一気に簡単になる
ステップを変数として扱うことは、M 言語の本質です。 これを理解すると、次のようなメリットがあります。
- クエリが読みやすくなる
- 修正しやすくなる
- 再利用しやすくなる
- 複雑な処理を分割して書ける
- 他の人が読めるクエリになる
つまり、実務で通用する M 言語の書き方の基礎になります。
