PowerQuery 中間テーブルを減らそう
はじめに
PowerQueryでデータを加工していると、表示したくない中間テーブルができてしまう時はないでしょうか?
例えば、AテーブルにBテーブルをグループ集計したbテーブルをLeftJoinしたい時、bテーブルが残ってしまうの邪魔だなみたいな感じです。
今回は、PowerQueryで発生する中間テーブル問題の解消法について書いていきたいと思います。
条件
下記売上テーブルを営業所コードでグループ集計し、営業所マスタにLeftJoinする場合について考えてみます。
営業所マスタテーブルと売上テーブルは別テーブルでも使用するため、このままのテーブルで残しておく必要があるとします。
オーソドックスな作成方法
どちらのテーブルもそのまま残しておく前提条件のため、売上テーブルを参照してグループ集計し、営業所マスタテーブルを参照したクエリにLeftJoinする記述になるかと思います。
/*Temporary_集計テーブル*/
/*売上集計テーブル*/
let
ソース = 売上テーブル,
グループ集計 = Table.Group(ソース, {"営業所コード"}, {{"売上", each List.Sum([売上]), type nullable number}})
in
グループ集計
/*目的テーブル*/
/*営業所マスタにLeftJoin*/
let
ソース = 営業所マスタ,
集計テーブルをLeftJoin = Table.NestedJoin(ソース, {"営業所コード"}, Temporary_集計テーブル, {"営業所コード"}, "Temporary_集計テーブル", JoinKind.LeftOuter),
集計テーブルを展開 = Table.ExpandTableColumn(集計テーブルをLeftJoin, "Temporary_集計テーブル", {"売上"}, {"売上"})
in
集計テーブルを展開
どうやってクエリを減らすか
答えは「クエリをネストする」です。
PowerQueryの記述は下記のようになっています。
let
Step1 = …… ,
Step2 = …… ,
…..
in
最後に適用するStep名
これはクエリ中にネストして書くことができます。
下記のコードを確認してください。
let
集計テーブル = let
グループ集計 = Table.Group(売上テーブル, {"営業所コード"}, {{"売上", each List.Sum([売上]), type nullable number}})
in
グループ集計,
ソース = 営業所マスタ,
集計テーブルをLeftJoin = Table.NestedJoin(ソース, {"営業所コード"}, 集計テーブル, {"営業所コード"}, "集計テーブル", JoinKind.LeftOuter),
集計テーブルを展開 = Table.ExpandTableColumn(集計テーブルをLeftJoin, "集計テーブル", {"売上"}, {"売上"})
in
集計テーブルを展開
集計テーブル(中間テーブル名) = let ~ でネストした集計クエリが1Stepとして適用されていることがわかります。
上記Queryであれば、中間テーブルは不要で一発で目的テーブルを導出できます。
他にも複数の列追加をする場合に、ステップ数が多くなりすぎてしまう場合なども、クエリをネストして記述することで問題解決できたりします。
おわりに
クエリをネストすると複数のステップを1ステップとして処理できる反面、1ステップ毎の動きが読みづらくなるデメリットもあります。
中間テーブルが多すぎて困っていたり、ステップ数が多すぎて見辛い場合など活用してみてください。
参考になれば幸いです。
最後までお読みいただき、ありがとうございました。
この記事が気に入ったらサポートをしてみませんか?