Power Query使用時にステップがどんどん増えていって「どこで何をしているのか分からない」「同じ処理が続いて混乱する」となってしまったことはありませんか?
そんなときに役立つのが let 式 や 入れ子式です。
これらの方法を使うことで複数のステップを一つにまとめることができます。
今回は長く複雑になったPowerQueryの処理をスッキリ整理する2つの方法を紹介します。
let式とは?
まず利用するlet式について解説します。
let式の構文は下記のようになっています。
let
ステップ1 = 処理1,
ステップ2 = 処理2,
...
in
最終結果内容としてはlet の中で処理を行いin で最終結果を指定するといったものです。
この式を使うことで複数の処理をまとめて1つにすることができます。
ドノ実はPower Queryのクエリも全て let ... in という形で書かれています。GUIで作ったステップも、裏ではこのような形になっています。
複数ステップを1つにまとめる方法
複数ステップを1つのステップにまとめる方法を紹介します。
ここでは上述したlet式を用いる方法と入れ子式を用いる方法の2つのやり方を解説します。
ここでは以下のデータと処理内容を例にして説明します。
| Region | Product | Amount |
| East | A | 1200 |
| West | B | 800 |
| East | C | 1500 |
| West | D | 2000 |
【処理内容】
- 「Region」列を削除
- 「Amount > 1000」の行だけ残す
- 「Amount」を降順に並べる
通常のクエリ(GUIで作成したまま)
上記の処理内容を通常のGUIで操作して作成したクエリは以下のようになります。
let
Source = #table({"Region", "Product", "Amount"},
{{"East", "A", 1200},
{"West", "B", 800},
{"East", "C", 1500},
{"West", "D", 2000}}),
Removed = Table.RemoveColumns(Source, {"Region"}),
Filtered = Table.SelectRows(Removed, each [Amount] > 1000),
Sorted = Table.Sort(Filtered, {{"Amount", Order.Descending}})
in
Sorted各処理ごとステップがあるため、処理の流れは分かりやすいですがPowerQuery上のステップは多くなります。


これに対してlet式でまとめるとどうなるか次に見てみます。
let式でのステップ整理方法
次にlet式で処理をまとめた結果とまとめる方法について紹介します。
ここでは上述の通常のクエリのRemoved, Filtered, Sortedの3つの処理をCleanedという一つの処理にまとめます。
クエリ式
let
Source = #table({"Region", "Product", "Amount"},
{{"East", "A", 1200},
{"West", "B", 800},
{"East", "C", 1500},
{"West", "D", 2000}}),
Cleaned =
let
Removed = Table.RemoveColumns(Source, {"Region"}),
Filtered = Table.SelectRows(Removed, each [Amount] > 1000),
Sorted = Table.Sort(Filtered, {{"Amount", Order.Descending}})
in
Sorted
in
Cleaned処理内容はこのようになっています。ひとつのステップの中でlet式を使うことで処理をまとめることができます。
Source:テーブルを作成Cleaned:ステップの中でletを使い、3つの処理部をまとめて処理let ... in:外側のletは全体の流れを管理し、Cleanedの内側のletは部分処理を整理
PowerQueryの画面で見るとこのようになっています。Cleanedの1ステップに処理がまとまっています。


クエリの修正手順
まずは元データを元の処理を準備します。


次に処理をまとめるステップを追加します。
最後のステップを右クリックして「後にステップの挿入」を選択する。


let式を使って処理をまとめた下記の式を入力する。Source部分は参照するテーブル名のため状況によって変更してください。
let
Removed = Table.RemoveColumns(Source, {"Region"}),
Filtered = Table.SelectRows(Removed, each [Amount] > 1000),
Sorted = Table.Sort(Filtered, {{"Amount", Order.Descending}})
in
Sorted

最後にRemoved, Filtered, Sortedの3つのステップを削除します。


これでステップを1つにまとめる手順は完了です。下図のように1ステップ「カスタム1」で3つの処理が行えています。


入れ子式でのステップ整理方法
次に入れ子式で処理をまとめた結果とまとめる方法について紹介します。
入れ子式ではステップ内のTable関数の元データ部分に、別のTable関数を埋め込むことで処理をまとめています。
同様に通常のクエリのRemoved, Filtered, Sortedの3つの処理をCleanedという一つの処理にまとめます。
クエリ式
let
Source = Source = #table({"Region", "Product", "Amount"},
{{"East", "A", 1200},
{"West", "B", 800},
{"East", "C", 1500},
{"West", "D", 2000}}),
Cleaned =
Table.Sort(
Table.SelectRows(
Table.RemoveColumns(
Source,
{"Region"}
),
each [Amount] > 1000
),
{{"Amount", Order.Descending}}
)
in
Cleaned処理内容はこのようになっています。ひとつのステップの中の関数にさらに関数を入れることで処理をまとめることができます。
Source:テーブルを作成Cleaned:Table.RemobeColumns関数でSourceデータから列を削除、次にTable.SelectRows関数でフィルタをかけ、最後にTable.Sort関数でデータの並べ替えを実施let ... in:外側のletは全体の処理をまとめる
PowerQueryの画面で見るとこのようになっています。Cleanedの1ステップに処理がまとまっています。


クエリの修正手順
まずは元データを元の処理を準備します。


次に処理をまとめるステップを追加します。
最後のステップを右クリックして「後にステップの挿入」を選択する。


let式を使って処理をまとめた下記の式を入力する。Source部分は参照するテーブル名のため状況によって変更してください。
Table.Sort(
Table.SelectRows(
Table.RemoveColumns(Source,{"Region"}),
each [Amount] > 1000
),
{{"Amount", Order.Descending}}
)

最後にRemoved, Filtered, Sortedの3つのステップを削除します。


これでステップを1つにまとめる手順は完了です。下図のように1ステップ「カスタム1」で3つの処理が行えています。





短い処理ならこの方法がオススメですが、処理が長くなるとクエリが読みにくくなるので注意してください
let式と入れ子式の使い分け
let式と入れ子式はどちらもステップを整理することができますが状況に使い分けることをおススメします。
大まかには以下のイメージで使い分けると良いと思います。
- let式:多くの複雑な処理を1つのステップでまとめる
- 入れ子式:いくつかの簡単な処理を1つのステップにまとめる
| 項目 | let式 | 入れ子 |
|---|---|---|
| ステップ数 | 少ない | 少ない |
| 可読性 | 構造が明確で読みやすい | 短い処理なら◎、長いと読みにくい |
| 再利用性 | 高い(部分処理を再利用可能) | 低い |
まとめ
今回は複数のステップを1つのステップにまとめる方法を紹介しました。
主なポイントは以下の通りです。
- Power Queryのクエリはすべて
let ... in構造でできている - ステップが多いときはlet式や入れ子で整理できる
- 短い処理は入れ子、複雑な処理はlet式が便利
長く複雑になってPowerQueryの処理をすっきり整理したい時に利用してみてください!

コメント