こんにちは、blueです。
Power Queryでは「グループ化」というものがありますが
- グループごとのアイテムに連番を振りたい
- グループごとのリストを作りたい
ということはないでしょうか?
その場合は「カスタム列の追加」でTable.AddIndexColumn関数を使うことで可能です。
この方法を使えばPower Queryのグループ化をより使いこなすことができるようになりますのでぜひ学んでいってください。
今回は以下の質問に対する備忘録も含め記事にしています。@ksgiksg さん、@chabouz6676 さん、@marshal_dabaoさんありがとうございました)
Power Queryに関してどの書籍を買ったらいいの?と思われている方には以下がお勧めです。簡単なボタン操作から、関数を使った処理まで、サンプルデータを一式操作してみるだけでPower Queryが使えるようになります。購入して間違いのないお勧めの一冊です。
とりあえず標準機能だけでも使いこなせるようになりたいと思われている方には以下がお勧めです。関数などの難しい記載はほとんどなくボタン操作のみでPower Queryを扱えるようになります。
グループごとのアイテムをテーブル化する
まずはグループごとのアイテムをテーブル化します。
1 グループ化したい列を選択し、「変換」-[グループ化」をクリックします
2 操作を「すべての行」とします
こうすることで全てのアイテムをテーブル化できます。
ただこのままではTableを出力することができません。
そこでTable.AddIndexColumn関数を使ってTable内のアイテムにインデックスを付与していきます。
Table.AddIndexColumn関数を使って付与する
Table.AddindexColumn関数はPower Query内のTableに対してインデックス列を追加する関数です。
今回はグループ化してできたTable(ここでは商品テーブル列のTable)に対してインデックスを追加します。
1 Tableのある列に対して「列の追加」-「カスタム列を追加」をする
2 新しい列名はなんでもよいです。カスタム列の式に以下を代入します。
Table.AddIndexColumn([商品テーブル],”index”)
AddIndexColumn関数の第一引数にはテーブルのある列名を記載します。第二引数には付与されるインデックスの列名を記載します。
結果として以下の様にインデックスを追加した「テーブル」が作成されます。
カスタム列以外の列を削除してテーブルを展開すると・・・
グループ化された項目ごとにインデックスが付与されています。
グループごとのリストを作る
ここからグループごとのリストを作っていきます。
先ほどの処理によって項目ごとにインデックスを振った状態で行います。
1 グループ化する列を選択して「変換」-「列のピボット」を選択します
2 値列を「商品」とし詳細オプションにて値の集計関数を「集計しない」にします
これで各グループごとにリスト化された表を作成することができます。
列のピボットは重複する内容をグループ化した上でピボットテーブル(行と列のクロス集計表)にしてくれます。ちなみにインデックスを付与しない状態でやるとErrorになります。
ピボットはグループ化された列情報に対してグループ化された行情報もないと作成できないのでご注意ください。
今回のまとめ
グループ化されたTableに対してインデックスを付与する場合はTable.AddIndexColumn関数を使います。
列のピボット化とインデックス追加については@marshal_dabaoさんが詳しく説明してくださっています。ピボットについても詳しく理解されたい方はぜひクリックください。
グループ化とTable.AddIndexColumn関数については以下の書籍にも詳しく記載されていますので是非読んでみてください。サンプルデータを一式操作してみるだけでPower Queryが使えるようになります。購入して間違いのないお勧めの一冊です。
とりあえず標準機能だけでも使いこなせるようになりたいと思われている方には以下がお勧めです。関数などの難しい記載はほとんどなくボタン操作のみでPower Queryを扱えるようになります。
コメント