目次
概要
横持ちのクロス集計表を、分析や集計に適した縦持ち形式へ変換する手順です。キー列を保持し、商品の列群を明細行へ展開します。テーブル名・列名・変数名は本記事専用に調整しております。
手順
- 対象範囲をテーブル化し、
Excel.CurrentWorkbook()
で読み込みます。 - 先頭行を見出しに昇格します。
- 欠損があるキー列を下方向に補完します。
- キー列を残し、その他の列をアンピボットします。
- 数値・日付・文字列の型を明示します。
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.RenameColumns
やTable.SelectColumns
を挟み、列見出しを統一します。
トラブルシューティング
- 期待どおりに並ばない、数値集計ができない
Table.TransformColumnTypes
で数値型・日付型を明示してください。 - キー列が途中で空白
アンピボット前にTable.FillDown
を実施してください。 - 列名のタイプミスでエラー
実データの見出しとコード内の列名が一致しているか再確認してください。
まとめ
変換後は型を確定し、不要行の除去や列名の正規化で後工程の安定性を高めます。
ヘッダー昇格、キー列の補完、Table.UnpivotOtherColumns
の順で縦持ちへ整形します。