グループ化とかインデックスとか聞いても、実用のイメージが沸かないかと思います。しかし、
- カテゴリごとのランキングをつけたい
- 顧客ごとの購入履歴の順番をつけたい
- プロジェクトごとの枝番をつけたい
このような使いかたをしたい時に、グループ化は避けて通れません。
逆にこれを覚えておけば、一気にPower Queryの活用の幅が増えます。
この記事では、グループ化してインデックスする方法を紹介します。
通常、次のような表で、列の追加 タブの「 インデックス列 」を使用すると、下図のように上段から順にインデックスがふられます。

日付 | 商品コード | 商品名 | 単価 | 数量 | 金額 | 取引先 | インデックス |
---|---|---|---|---|---|---|---|
2024/01/01 | A001 | 商品A | 1000 | 5 | 5000 | 取引先X | 1 |
2024/01/02 | B002 | 商品B | 1500 | 3 | 4500 | 取引先Y | 2 |
2024/01/03 | C003 | 商品C | 2000 | 2 | 4000 | 取引先Z | 3 |
2024/01/04 | A001 | 商品A | 1000 | 10 | 10000 | 取引先X | 4 |
2024/01/05 | B002 | 商品B | 1500 | 7 | 10500 | 取引先Y | 5 |
しかし、今回は商品別のインデックスを振りたいので、最初にグループ化のひと手間が必要となります。
グループ化をする
ホームタブの「 グループ化 」をクリックします。

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

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

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

グループ化したテーブルにインデックスを付ける
続けて、「 列の追加 」タブを選択し、「 カスタム列 」をクリックします。

次の式を入力します。
= Table.AddIndexColumn([すべての行],"インデックス",1)
あたらしい列名は、一旦、「 カスタム 」のままで大丈夫です。

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

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

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


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

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

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

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

グループ化してインデックスした後に、クエリのマージ⇒展開をすると、インデックスが変わってしまうという謎の現象が発生することがあります。
逆の順番ならよいかと、クエリのマージしてから、グループ化インデックスをしてみましたが、やはり展開する段階でインデックスが変わってしまいました(泣)
とりあえず理屈がわかりませんが、TableBuffer関数を使い、マージする対象テーブル名を置き換えるとなぜか解決しました。
コメント