グループ化してインデックス

パワークエリ 応用

グループ化とかインデックスとか聞いても、実用のイメージが沸かないかと思います。しかし、

  • カテゴリごとのランキングをつけたい
  • 顧客ごとの購入履歴の順番をつけたい
  • プロジェクトごとの枝番をつけたい

このような使いかたをしたい時に、グループ化は避けて通れません。

逆にこれを覚えておけば、一気にPower Queryの活用の幅が増えます。

この記事では、グループ化してインデックスする方法を紹介します。

通常、次のような表で、列の追加 タブの「 インデックス列 」を使用すると、下図のように上段から順にインデックスがふられます。

日付商品コード商品名単価数量金額取引先インデックス
2024/01/01A001商品A100055000取引先X1
2024/01/02B002商品B150034500取引先Y2
2024/01/03C003商品C200024000取引先Z3
2024/01/04A001商品A10001010000取引先X4
2024/01/05B002商品B1500710500取引先Y5

しかし、今回は商品別のインデックスを振りたいので、最初にグループ化のひと手間が必要となります。

グループ化をする

ホームタブの「 グループ化 」をクリックします。

商品コードでグループ化し、二行目に「 すべての行 」を選択します。
(新しい列名は、何でもよいですが今回は「すべての行」としておきます)

「すべての行」というあたらしい列が出来上がります。

POINT

グループ化上段で指定する列は、商品別であれば「商品コード」、取引先別であれば「取引先コード」のようにグループのキーとなる列を一つだけ指定します。

それぞれのテーブルには、商品コードに対応したデータが入っています。

グループ化したテーブルにインデックスを付ける

続けて、「 列の追加 」タブを選択し、「 カスタム列 」をクリックします。

次の式を入力します。

= Table.AddIndexColumn([すべての行],"インデックス",1)

あたらしい列名は、一旦、「 カスタム 」のままで大丈夫です。

カスタム列が追加されました。

こちらのカスタム列のテーブル内は、先の式によりインデックス」列が加わったものになってます。

展開する

カスタム列を展開し、「元の列名をプレフィックスとして使用します」を外して「OK」をクリックします。

あとは、不要な列を選択し、「 列の削除 」をクリックします。

解説

カスタム列の追加をした際に、次のような式が作成されます。
そのM言語の中身について少し解説をします。

Table.AddColumn(テーブル,列名,処理)
新しい列を追加する関数です。
「カスタム列の追加」機能使うと自動で記述されます。テーブル名は直前のステップ名が指定されます。

Table.AddIndexColumn(テーブル,列名,インデックス開始値)
インデックス列を追加する関数です。
対象のテーブルが存在する列名を指定します。

グループ化してインデックスした後に、クエリのマージ⇒展開をすると、インデックスが変わってしまうという謎の現象が発生することがあります。

逆の順番ならよいかと、クエリのマージしてから、グループ化インデックスをしてみましたが、やはり展開する段階でインデックスが変わってしまいました(泣)

とりあえず理屈がわかりませんが、TableBuffer関数を使い、マージする対象テーブル名を置き換えるとなぜか解決しました。

コメント