【Power Query】CHOOSE関数は不要?

昨日、CHOOSE関数は使えるヤツ的なことを書き、更に、そんなにデキる子がPower Queryファミリーには入っていない、と軽く嘆いたのだけど、その直後、「だってPower Queryなんだから」という話を聞いて、すぐさま意見を変えようとしている。


 

今のエクセルは数年前よりずっと優秀

確かに、言われてみるとそのとおりだ。私の考え方は、従来のエクセルの使い方に即したもの。ピボットテーブルを作成するためにわざわざデータを一つのテーブルにまとめなくちゃいけないって誰が言った?

まずは昨日のおさらい

昨日の《CHOOSE関数》の使用例は、日本の一般的な事業年度に合わせた四半期の設定をする、というものだった。 昨日のエクセルでの解決方法は、(1)下のように元データの隣にカラムを追加して数式を入力する方法。

A B C D E
日付 商品コード 商品名 金額 四半期
06/26 12 A 12,345 1Q
06/26 34 B 54,321 =CHOOSE(MONTH(A1),4,4,4,1,1,1,2,2,2,3,3,3,4,4,4) & "Q"

(2)もう一つは、元データをPower Queryで加工していくというもの。そして、その加工のために、《CHOOSE関数》のような関数を自作する、という話だった。もっとスマートな書き方がありそうだけど、とりあえず例として↓。

let fnChoose_JPQtr = (input) => 
let values = { 
{1, "4Q"}, {2, "4Q"}, {3, "4Q"}, 
{4, "1Q"}, {5, "1Q"}, {6, "1Q"}, 
{7, "2Q"}, {8, "2Q"}, {9, "2Q"}, 
{10, "3Q"}, {11, "3Q"}, {12, "3Q"}, 
{input, "Undefined"} 
}, 
Result = List.First(List.Select(values, each _{0}=input)){1} 
in fn_Choose_JPQtr 

参照テーブルを作れば済む話

出発点が(1)の《CHOOSE関数》だったため、一つのカラムで一発でという考えに陥ってしまったけど、letList.Firstだと慣れないM functionを使うよりも簡単な方法がある。

参照テーブルの作成だ。以下のようなテーブルを一つ作り、Queryに取り込んでしまえばいい。

四半期
1 4Q
2 4Q
3 4Q
4 1Q
5 1Q
6 1Q

その後、2つのテーブルを結合すると、同じ結果を得ることができる。(結合前に元テーブルには、カスタムカラムを追加しておく必要がある(=Date.Month([日付]))。)

結合の手順すら省略可能

以上が、自作関数で何とか解決しようとしていたことの別解。でも、最終目的を考えた時、結合するというステップもいらないということに気がついた。

昨日のレポートは、最終的にはピボットテーブルが出来上がればいい、というものだったので、テーブルを一つにしていようが、バラバラだろうが関係ないのだ。

今朝、シャワーを浴びながらこのことに気づき、なんでこんな簡単なことに気づけなかったんだ、と軽く落ち込んでしまった。

一つのテーブルにまとめることが重要な場合もある

シャワーを浴びて、頭をスッキリさせて仕事に行った後、早速、反対のケースにぶち当たった。

「昨日の反省、昨日の反省」と、今日もまた《Power Query》を使ってデータをまとめようとせっせとUnpivotとかしてたら、全く無意味なテーブル群を作り出していたのだ。

今日の作業は、数値の集計ではなく、複数テーブルの情報を1つのテーブルにまとめることがゴール。目的を忘れると、いくら生産性の高い道具を使おうが無意味。

《Power Query》から作業を始める際には、データの整形だけでいいのか、それともクロス集計が必要なのかを十分確認してから取り掛かる!(当たり前すぎることだけど・・・。)

Advertisements

This site uses Akismet to reduce spam. Learn how your comment data is processed.