今回は「テーブルの組み換えA」の完全な逆パターン。
こういう縦並びのデータを組み換えて、
グループ別で横並びに組み替える。
普通に横並びにするだけなら「行のグループ化+連番追加&列のピボット」で済むけども、「品名」と「数量」のように複数の列が1セットになっている場合は、そう簡単にいかない。
というのも、グループ化の操作で「集計しない」を選択するとテーブルが返るが、このテーブルを展開(Table.ExpandTableColumn)しても縦方向にしか並ばない(要はグループ化する前に戻る)。横に展開したい時は、グループ化の際に一工夫が必要になる。
行のグループ化 = Table.Group(テーブル1, {"氏名"}, {"テーブル", each [ 列の選択 = Table.SelectColumns(_, {"品目", "数量"}), 列のピボット解除 = Table.UnpivotOtherColumns(列の選択, {}, "属性", "値"), 値レコード = Table.Transpose(列のピボット解除){1} ][値レコード], type record}),
このようにグループ化の結果を加工してレコードを作ってやる。この列を展開(Table.ExpandRecordColumn)すると……
こんな感じで横に並んでくれる。
見出し列にこだわりがないならこれで終了なんけど、「品名1」「数量1」「品名2」「数量2」……となって欲しい場合は、見出しを作ってから展開して列名変更が必要。
旧列名リスト = Record.FieldNames( Record.Combine(行のグループ化[レコード]) ), 新列名リスト = [ リスト = {1..List.Count(旧列名リスト)/2}, 編集 = List.Transform(リスト, each { Number.ToText(_, "品名0"), Number.ToText(_, "数量0") }), 結合 = List.Combine(編集) ][結合], 列の展開 = Table.ExpandRecordColumn( 行のグループ化, "テーブル", 旧列名リスト ), 列名の変更 = Table.RenameColumns( 列の展開, List.Zip({旧列名リスト, 新列名リスト}) )
これで見出しも含めて見やすくなった。