我有一个数据集,其中包含数千行和多个水平扩展的问题和答案列。我想将所有“问题”列取消透视为一列,并对相应的“答案”列执行相同操作。
我的数据集如下:
Header1 Header2 Q1 A1 Q2 A2 560-19 Bill A A' B B' 560-33 Jay A A' B B' 560-34 Nick A A' B B' 490-31 Julia A A' B B' 490-32 Anna A A' B B' 490-33 Reed A A' B B' 900-87 Mick A A' B B'
我想把它变成这样:
Header1 Header2 Q A 560-19 Bill A A' 560-19 Bill B B' 560-33 Jay A A' 560-33 Jay B B' 560-34 Nick A A' 560-34 Nick B B' 490-31 Julia A A' 490-31 Julia B B' 490-32 Anna A A' 490-32 Anna B B' 490-33 Reed A A' 490-33 Reed B B' 900-87 Mick A A' 900-87 Mick B B'
我正在使用 Excel 365。
答案1
要在 Power Query 中执行此操作(大多数但不是全部步骤都可以在 UI 中完成),使用您的设置(并且可以使用多个 q/a 对列)尝试:
- 选择两个标题列,然后
Unpivot other columns
- 添加索引列
- 删除
Attribute
列 - 将 Index 列转换为整数除法列(除以 2),以创建一系列
{0,0,1,1,2,2,...}
- 根据转换后的索引列将行分组为一条记录这无法通过 UI 完成
- 删除索引列
- 展开分组列中的值并重命名新列
A
并Q
原始数据
M 代码
let
Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Source, {"Header1", "Header2"}, "Attribute", "Value"),
#"Added Index" = Table.AddIndexColumn(#"Unpivoted Other Columns", "Index", 0, 1),
#"Removed Columns" = Table.RemoveColumns(#"Added Index",{"Attribute"}),
#"Integer-Divided Column" = Table.TransformColumns(#"Removed Columns", {{"Index", each Number.IntegerDivide(_, 2), Int64.Type}}),
#"Grouped Rows" = Table.Group(#"Integer-Divided Column", {"Index", "Header1","Header2"},{{"Values", each Record.FromList([Value], {"Header1","Header2"}), type record}}),
RemIndex = Table.RemoveColumns(#"Grouped Rows",{"Index"}),
ExpandValues = Table.ExpandRecordColumn(RemIndex,"Values",{"Header1","Header2"},{"Q","A"}),
#"Changed Type" = Table.TransformColumnTypes(ExpandValues,{{"Header1", type text}, {"Header2", type text}, {"Q", type text}, {"A", type text}})
in
#"Changed Type"