PowerQueryの複数ステップをまとめる方法!let式ですっきり整理

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つのやり方を解説します。

ここでは以下のデータと処理内容を例にして説明します。

RegionProductAmount
EastA1200
WestB800
EastC1500
WestD2000

【処理内容】

  • 「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ステップに処理がまとまっています。

クエリの修正手順

STEP
元データの準備

まずは元データを元の処理を準備します。

STEP
集約ステップの追加

次に処理をまとめるステップを追加します。

最後のステップを右クリックして「後にステップの挿入」を選択する。

STEP
集約処理の入力

let式を使って処理をまとめた下記の式を入力する。Source部分は参照するテーブル名のため状況によって変更してください。

let
  Removed = Table.RemoveColumns(Source, {"Region"}),
  Filtered = Table.SelectRows(Removed, each [Amount] > 1000),
  Sorted = Table.Sort(Filtered, {{"Amount", Order.Descending}})
in 
  Sorted
STEP
不要ステップの削除

最後に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:テーブルを作成
  • CleanedTable.RemobeColumns関数でSourceデータから列を削除、次にTable.SelectRows関数でフィルタをかけ、最後にTable.Sort関数でデータの並べ替えを実施
  • let ... in:外側の let は全体の処理をまとめる

PowerQueryの画面で見るとこのようになっています。Cleanedの1ステップに処理がまとまっています。

クエリの修正手順

STEP
元データの準備

まずは元データを元の処理を準備します。

STEP
集約ステップの追加

次に処理をまとめるステップを追加します。

最後のステップを右クリックして「後にステップの挿入」を選択する。

STEP
集約処理の入力

let式を使って処理をまとめた下記の式を入力する。Source部分は参照するテーブル名のため状況によって変更してください。

Table.Sort(
            Table.SelectRows(
                Table.RemoveColumns(Source,{"Region"}),
                each [Amount] > 1000
            ),
            {{"Amount", Order.Descending}}
        )
STEP
不要ステップの削除

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

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

ドノ

短い処理ならこの方法がオススメですが、処理が長くなるとクエリが読みにくくなるので注意してください

let式と入れ子式の使い分け

let式と入れ子式はどちらもステップを整理することができますが状況に使い分けることをおススメします。

大まかには以下のイメージで使い分けると良いと思います。

  • let式:多くの複雑な処理を1つのステップでまとめる
  • 入れ子式:いくつかの簡単な処理を1つのステップにまとめる

項目let式入れ子
ステップ数少ない少ない
可読性構造が明確で読みやすい短い処理なら◎、長いと読みにくい
再利用性高い(部分処理を再利用可能)低い

まとめ

今回は複数のステップを1つのステップにまとめる方法を紹介しました。

主なポイントは以下の通りです。

  • Power Queryのクエリはすべて let ... in 構造でできている
  • ステップが多いときはlet式入れ子で整理できる
  • 短い処理は入れ子、複雑な処理はlet式が便利

長く複雑になってPowerQueryの処理をすっきり整理したい時に利用してみてください!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次