Power Queryでクロス集計を縦持ちへ整形する(アンピボット)

目次

概要

横持ちのクロス集計表を、分析や集計に適した縦持ち形式へ変換する手順です。キー列を保持し、商品の列群を明細行へ展開します。テーブル名・列名・変数名は本記事専用に調整しております。

手順

  1. 対象範囲をテーブル化し、Excel.CurrentWorkbook() で読み込みます。
  2. 先頭行を見出しに昇格します。
  3. 欠損があるキー列を下方向に補完します。
  4. キー列を残し、その他の列をアンピボットします。
  5. 数値・日付・文字列の型を明示します。

Mコード(「詳細エディター」に記述)

let
    // 1) ブック内テーブルの読み込み
    Source   = Excel.CurrentWorkbook(){[Name = "CrosstabRange"]}[Content],

    // 2) 先頭行をヘッダーへ昇格
    Promoted = Table.PromoteHeaders(Source, [PromoteAllScalars = true]),

    // 3) キー列(例:Owner)を下方向に埋める
    Filled   = Table.FillDown(Promoted, {"Owner"}),

    // 4) Owner と InvoiceId を残し、その他列を縦持ちへ
    Unpivoted = Table.UnpivotOtherColumns(
        Filled,
        {"Owner", "InvoiceId"},
        "Product",
        "Quantity"
    ),

    // 5) 型を明示
    Typed = Table.TransformColumnTypes(
        Unpivoted,
        {
            {"Owner", type text},
            {"InvoiceId", Int64.Type},
            {"Product", type text},
            {"Quantity", type number}
        }
    )
in
    Typed

応用

  • 特定列だけを展開したい場合 powerqueryコピーする編集する// 例:ProductA, ProductB だけをアンピボット OnlyTwo = Table.Unpivot( Filled, {"ProductA","ProductB"}, "Product", "Quantity" )
  • 補助列の追加(ゼロや空値の除外、合計の計算など) powerqueryコピーする編集するCleaned = Table.SelectRows(Typed, each [Quantity] <> null and [Quantity] <> 0)
  • 列名がばらつく場合の正規化
    アンピボット前に Table.RenameColumnsTable.SelectColumns を挟み、列見出しを統一します。

トラブルシューティング

  • 期待どおりに並ばない、数値集計ができない
    Table.TransformColumnTypes で数値型・日付型を明示してください。
  • キー列が途中で空白
    アンピボット前に Table.FillDown を実施してください。
  • 列名のタイプミスでエラー
    実データの見出しとコード内の列名が一致しているか再確認してください。

まとめ

変換後は型を確定し、不要行の除去や列名の正規化で後工程の安定性を高めます。

ヘッダー昇格、キー列の補完、Table.UnpivotOtherColumns の順で縦持ちへ整形します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次