Excel 转置到多列换行n
我需要将学生编号和姓名从行转置/透视到多列,但限制为15列,因此如果超过15列,我需要开始一个新行。这需要针对每个中心、主题和类型。我想换张新床单,或者去掉多余的几行。我无法成功地将这两个列重复步进到新列中。 大约有50万行。请帮帮我,我卡住了 例如:Excel 转置到多列换行n,excel,powerquery,vba,Excel,Powerquery,Vba,我需要将学生编号和姓名从行转置/透视到多列,但限制为15列,因此如果超过15列,我需要开始一个新行。这需要针对每个中心、主题和类型。我想换张新床单,或者去掉多余的几行。我无法成功地将这两个列重复步进到新列中。 大约有50万行。请帮帮我,我卡住了 例如: Center Course Type Student_Num Student_Name 1001 Science 1 1 John 1001 Science 1 2 Linda 1001 Science
Center Course Type Student_Num Student_Name
1001 Science 1 1 John
1001 Science 1 2 Linda
1001 Science 1 3 Pete
1001 Science 2 1 Susan
1001 Science 2 2 Gary
1001 English 1 1 Bob
1001 English 1 2 Kate
1002 Science 1 1 Alice
1002 Science 1 2 Rick
1002 Science 1 3 Pat
1002 Science 1 4 Shanon
1002 Science 1 5 Louis
1002 English 1 1 Cathleen
转化:
Center Course Type Student1_Num Student1_Name Student2_Num Student2_Name
1001 Science 1 1 John 2 Linda
1001 Science 1 3 Pete
1001 Science 2 1 Susan 2 Gary
1001 English 1 1 Bob 2 Kate
1002 Science 1 1 Alice 2 Rick
1002 Science 1 3 Pat 4 Sharon
1002 Science 1 5 Louis
1002 English 1 1 Cathleen
希望这不是重复,但我无法找到任何可以给我正确结果的东西
感谢一个包含参数、列表和查询的解决方案 它的性能相当好: 我用Excel测试了100000条记录,大约用了15秒 大约2:15分钟内录制50万张唱片 就每行学生人数而言,这是动态的 参数MaxStudentsPerRow: List ExpandList,生成具有以下内容的嵌套列表: 0,Student1\u Num,Student1\u Name 1,Student2_Num,Student2_Name 等等 查询: 基本上,通过表为每个键组合添加一个索引。组,添加一些具有模和整数除法计算的索引作为数据透视的准备,num和name组合在一个记录中,表使用高级选项“不聚合”进行数据透视,使用List.Accumulate和ExpandList中的数据对num和name的嵌套记录进行展开
let
Source = Table1,
#"Grouped Rows" = Table.Group(Source, {"Center", "Course", "Type"}, {{"AllData", each Table.AddIndexColumn(_,"Index",0,1)}}),
#"Expanded AllData" = Table.ExpandTableColumn(#"Grouped Rows", "AllData", {"Student_Num", "Student_Name", "Index"}, {"Student_Num", "Student_Name", "Index"}),
#"Duplicated Column" = Table.DuplicateColumn(#"Expanded AllData", "Index", "Index - Copy"),
#"Calculated Modulo" = Table.TransformColumns(#"Duplicated Column", {{"Index", each Number.Mod(_, MaxStudentsPerRow), type number}}),
#"Integer-Divided Column" = Table.TransformColumns(#"Calculated Modulo", {{"Index - Copy", each Number.IntegerDivide(_, MaxStudentsPerRow), Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Integer-Divided Column", "NumAndName", each Record.FromList({[Student_Num],[Student_Name]},{"Num","Name"})),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Student_Num", "Student_Name"}),
#"Changed Type" = Table.TransformColumnTypes(#"Removed Columns",{{"Index", type text}}),
#"Pivoted Column" = Table.Pivot(#"Changed Type", List.Distinct(#"Changed Type"[Index]), "Index", "NumAndName"),
#"Removed Columns1" = Table.RemoveColumns(#"Pivoted Column",{"Index - Copy"}),
Expanded = List.Accumulate(ExpandList,#"Removed Columns1",(t,e) => Table.ExpandRecordColumn(t,e{0},{"Num","Name"},{e{1},e{2}}))
in
Expanded
明亮的马塞尔:你是个天才,超快的结果。花了1:20分钟将511853条记录处理为34144行。谢谢
let
Source = {1..MaxStudentsPerRow},
ToText = List.Transform(Source, each {Text.From(_-1), "Student"&Text.From(_)}),
AddedNumAndName = List.Transform(ToText,each {_{0},_{1}&"_Num",_{1}&"_Name"})
in
AddedNumAndName
let
Source = Table1,
#"Grouped Rows" = Table.Group(Source, {"Center", "Course", "Type"}, {{"AllData", each Table.AddIndexColumn(_,"Index",0,1)}}),
#"Expanded AllData" = Table.ExpandTableColumn(#"Grouped Rows", "AllData", {"Student_Num", "Student_Name", "Index"}, {"Student_Num", "Student_Name", "Index"}),
#"Duplicated Column" = Table.DuplicateColumn(#"Expanded AllData", "Index", "Index - Copy"),
#"Calculated Modulo" = Table.TransformColumns(#"Duplicated Column", {{"Index", each Number.Mod(_, MaxStudentsPerRow), type number}}),
#"Integer-Divided Column" = Table.TransformColumns(#"Calculated Modulo", {{"Index - Copy", each Number.IntegerDivide(_, MaxStudentsPerRow), Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Integer-Divided Column", "NumAndName", each Record.FromList({[Student_Num],[Student_Name]},{"Num","Name"})),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Student_Num", "Student_Name"}),
#"Changed Type" = Table.TransformColumnTypes(#"Removed Columns",{{"Index", type text}}),
#"Pivoted Column" = Table.Pivot(#"Changed Type", List.Distinct(#"Changed Type"[Index]), "Index", "NumAndName"),
#"Removed Columns1" = Table.RemoveColumns(#"Pivoted Column",{"Index - Copy"}),
Expanded = List.Accumulate(ExpandList,#"Removed Columns1",(t,e) => Table.ExpandRecordColumn(t,e{0},{"Num","Name"},{e{1},e{2}}))
in
Expanded