【Power Query】グループの中でインデックスを付ける

Power Queryにて、グループ単位でインデックスを付与する方法です。ボタンポチポチだけだとテーブル全体にインデックスを付ける方法しかないので覚えておくと便利かと思います。

以下のサイトを参考にしました。

Number rows by group using Power Query
A reader asked if we can number rows by group in Power Query, similar to the PARTITION function in SQL of course there is, we just need a little code.

スポンサーリンク

[ad01]

やりたいこと

リボンにあるインデックス列はテーブル全体に連番が振られますが、特定のグループの中で採番したいときがあります。

↓このようなインデックスを作ります。

f:id:tomikiya:20200402233245p:plain

流れ

  • 一度グループ化
  • グループ化されたテーブルの中でインデックスを追加する
  • テーブルを展開する

詳細

group列でグループ化します。

f:id:tomikiya:20200402233324p:plain

列名は後で消すのでなんでもよいです。今回はwTableとしました。
操作は「すべての行」を選択します。

f:id:tomikiya:20200402233349p:plain

そうするとテーブルができます。

f:id:tomikiya:20200402233409p:plain

カスタム列の追加にてwTableにインデックスをつけた新たなテーブルを追加します。wTable自体にインデックスを追加するわけではないことに留意です。

f:id:tomikiya:20200402233429p:plain

= Table.AddIndexColumn([wTable], "index", 1, 1)

f:id:tomikiya:20200402233444p:plain

すると各テーブルにインデックスが登録されます。

f:id:tomikiya:20200402233505p:plain

f:id:tomikiya:20200402233517p:plain

最後に、wTable列を削除してvalueとindexをテーブルから展開すれば完了です。

以下を詳細エディタに張り付ければ手順を確認できます。

let
ソース = #table(type table [group = text,value = text],{{"a","q"},{"a","w"},{"a","e"},{"b","r"},{"b","t"},{"b","y"},{"b","t"}}),
グループ化された行 = Table.Group(ソース, {"group"}, {{"wTable", each _, type table}}),
追加されたカスタム = Table.AddColumn(グループ化された行, "indexTable", each Table.AddIndexColumn([wTable], "index", 1, 1)),
削除された列 = Table.RemoveColumns(追加されたカスタム,{"wTable"}),
#"展開された indexTable" = Table.ExpandTableColumn(削除された列, "indexTable", {"value", "index"}, {"value", "index"})
in
#"展開された indexTable"

お試しください。

コメント

タイトルとURLをコピーしました