グループ化とかインデックスとか聞いても、実用のイメージが沸かないかと思います。しかし、
- カテゴリごとのランキングをつけたい
- 顧客ごとの購入履歴の順番をつけたい
- プロジェクトごとの枝番をつけたい
このような使いかたをしたい時に、グループ化は避けて通れません。
逆にこれを覚えておけば、一気に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」をクリックします。
あとは、不要な列を選択し、「 列の削除 」をクリックします。
グループ化してインデックスした後に、クエリのマージ⇒展開をすると、インデックスが変わってしまうという謎の現象が発生することがあります。
逆の順番ならよいかと、クエリのマージしてから、グループ化インデックスをしてみましたが、やはり展開する段階でインデックスが変わってしまいました(泣)
とりあえず理屈がわかりませんが、TableBuffer関数を使い、マージする対象テーブル名を置き換えるとなぜか解決しました。
コメント