转置到多列 wrap n
Transpose to multiple columns wrap n
我需要 transpose/pivot 学生编号和姓名从行到多列,但限制为 15 列,所以如果超过 15,我需要开始一个新行。这需要用于每个中心、主题和类型。我想转移到新的 sheet 或去掉多余的行。我一直无法成功地将两列重复 STEP 到新列中。
大约有 500,000 行。请帮助我卡住了!
例如:
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测试了100,000条记录,用了大约15秒;
500,000 条记录大约 2:15 分钟。
每行的学生人数是动态的。
参数 MaxStudentsPerRow:
2 meta [IsParameterQuery=true, Type="Number", IsParameterQueryRequired=true]
List ExpandList,导致嵌套列表:
"0", "Student1_Num", "Student1_Name"
"1", "Student2_Num", "Student2_Name"
等等
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
查询:
基本上为每个键组合添加一个索引(通过 Table.Group),添加一些具有模和整数除法计算的索引作为旋转的准备,num 和 name 组合在一个记录中,table是旋转的(使用高级选项 "Don't Aggregate"),嵌套记录(使用编号和名称)使用 List.Accumulate 和 ExpandList.
中的数据展开
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
我需要 transpose/pivot 学生编号和姓名从行到多列,但限制为 15 列,所以如果超过 15,我需要开始一个新行。这需要用于每个中心、主题和类型。我想转移到新的 sheet 或去掉多余的行。我一直无法成功地将两列重复 STEP 到新列中。 大约有 500,000 行。请帮助我卡住了!
例如:
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测试了100,000条记录,用了大约15秒;
500,000 条记录大约 2:15 分钟。
每行的学生人数是动态的。
参数 MaxStudentsPerRow:
2 meta [IsParameterQuery=true, Type="Number", IsParameterQueryRequired=true]
List ExpandList,导致嵌套列表:
"0", "Student1_Num", "Student1_Name"
"1", "Student2_Num", "Student2_Name"
等等
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
查询: 基本上为每个键组合添加一个索引(通过 Table.Group),添加一些具有模和整数除法计算的索引作为旋转的准备,num 和 name 组合在一个记录中,table是旋转的(使用高级选项 "Don't Aggregate"),嵌套记录(使用编号和名称)使用 List.Accumulate 和 ExpandList.
中的数据展开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