集計とピボット ― グループ化・ピボット・ピボット解除

このページのゴール

Power Queryの3大データ形状変換機能 ―「グループ化」「ピボット列」「ピボット列の解除」― を理解し、縦持ちデータ(トランザクション形式)と横持ちデータ(クロス集計形式)を自在に変換できるようになることです。

グループ化 ― カテゴリ別に集計する

ExcelのSUMIFS / COUNTIFS関数をテーブル全体に適用するイメージです。ピボットテーブルの「行ラベル+値」と同じ結果を、Power Query内で作れます。

サンプルデータ

部署商品売上
営業部A100000
営業部B50000
経理部A30000
営業部A80000
経理部B20000

基本グループ化(1列でグループ化・1列を集計)

操作手順

1. 変換 タブ → グループ化 をクリックします。
2. 「基本」タブのまま設定します:
・グループ化の列:部署
・新しい列名:売上合計
・操作:合計
・列:売上
3. 「OK」をクリック。

結果

部署売上合計
営業部230000
経理部50000

詳細グループ化(複数列でグループ化・複数の集計)

操作手順

1. グループ化ダイアログで「詳細」タブに切り替えます。
2. 「グループ化の追加」ボタンで列を増やします:部署、商品
3. 「集計の追加」ボタンで集計を増やします:
・売上合計(操作:合計、列:売上)
・件数(操作:行のカウント)
4. 「OK」をクリック。

結果

部署商品売上合計件数
営業部A1800002
営業部B500001
経理部A300001
経理部B200001

選べる集計操作

操作Excel関数相当
合計SUM
平均AVERAGE
中央値MEDIAN
最小MIN
最大MAX
行のカウントCOUNTA
個別の値のカウント(ユニークカウント)
すべての行―(グループごとにテーブルをネストする高度な操作)
「すべての行」は上級テクニック
集計操作で「すべての行」を選ぶと、グループごとの全行がテーブルとして1セルに格納されます。これを展開したり、M関数で加工したりすることで「グループ内の最大値の行だけ取り出す」「グループ内で連番を振る」などの高度な処理が可能です。M言語編で詳しく扱います。

ピボット列 ― 縦持ちデータを横持ちに変換する

グループ化で得た縦持ちの集計結果を、クロス集計表(横持ち)の形に変えたいときに使います。

サンプル(Before)

部署売上
営業部1月500000
営業部2月600000
経理部1月200000
経理部2月250000

操作手順

1. 横に展開したい列(「月」列)のヘッダーをクリックして選択します。
2. 変換 タブ → ピボット列 をクリックします。
3. 「値列」で集計する数値の列(「売上」)を選択します。
4. 「詳細オプション」で集計関数を選びます(合計、カウント、最小、最大、平均、集計しない)。通常は「合計」
5. 「OK」をクリック。

結果(After)

部署1月2月
営業部500000600000
経理部200000250000
「集計しない」を選ぶ場面
同じキーの組み合わせに対して値が1つだけの場合(たとえばアンケートの回答を縦→横に変えるとき)は、「詳細オプション → 値の集計関数 → 集計しない」を選択します。複数値があるのに「集計しない」を選ぶとエラーになります。

ピボット解除 ― 横持ちデータを縦持ちに変換する

これはピボット列の逆操作です。実務では横に月が並んだクロス集計表を受け取ることが多く、これを分析しやすい縦持ちデータに変換する場面で活躍します。Excelの関数だけでこれをやろうとすると INDEX + INT + MOD の難解な式が必要でしたが、Power Queryなら数クリックです。

サンプル(Before ― よくある月別クロス集計)

商品1月2月3月
商品A100150120
商品B8090110

操作手順(方法1:列を選んで「列のピボット解除」)

1. ピボット解除したい列(「1月」「2月」「3月」)をCtrl+クリックで選択します。
2. 変換 タブ → 列のピボット解除 をクリックします。
3. 選択した列が2つの列「属性」(元の列名)と「値」(元のデータ)に変換されます。

操作手順(方法2:固定列を選んで「その他の列のピボット解除」)★おすすめ

1. ピボット解除しない列(「商品」列)をクリックして選択します。
2. 変換 タブ → 列のピボット解除 → その他の列のピボット解除 をクリックします。
3. 「商品」以外のすべての列がピボット解除されます。

結果(After)

商品属性
商品A1月100
商品A2月150
商品A3月120
商品B1月80
商品B2月90
商品B3月110

あとは「属性」を「月」、「値」を「売上」に列名変更するだけで、きれいな縦持ちデータの完成です。

「その他の列のピボット解除」を使う理由
方法2のほうが将来の変更に強いです。たとえば元データに「4月」列が追加されても、固定列(商品)以外をすべてピボット解除するため、クエリの修正が不要です。方法1だと「4月」を手動で選び直す必要があります。
INDEX + INT + MOD 式との比較
Excelの関数だけでクロス集計を縦持ちに変換する場合、=INDEX($B$2:$D$3, INT((ROW()-2)/3)+1, MOD(ROW()-2,3)+1) のような式が必要です。列が増えるたびに式の修正が必要で、行数の計算も煩雑です。Power Queryの「ピボット解除」なら、列が増減しても「更新」するだけで自動対応します。

実践例 ― 月別クロス表を受け取ってピボットテーブル用に整形

Step 1:ピボット解除

「商品」列を選択 → 変換 → その他の列のピボット解除

Step 2:列名変更

「属性」→「月」、「値」→「売上」

Step 3:グループ化で商品別合計を確認

変換 → グループ化 → グループ列「商品」→ 集計「売上合計(合計、売上)」

たった3ステップで、横持ちのクロス表を縦持ちに変換し、さらに商品別の合計まで出せました。

まとめ

グループ化はSUMIFS的な集計をテーブル全体に適用する操作で、「詳細」モードなら複数キー×複数集計も可能です。ピボット列は縦持ちデータを横持ちに変換し、ピボット解除は横持ちを縦持ちに戻します。特にピボット解除では「その他の列のピボット解除」を使うことで、列の増減に自動対応できます。これら3機能を組み合わせれば、Excel上でのデータ形状変換の悩みはほぼ解消されます。