を正しい結果を与えることができる何かを見つけることができないんだけど
パラメータ、リスト、およびクエリを含むソリューション。
それは非常によく実行します。
私が100,000レコードをExcelでテストされ、それは約15秒かかりました。
約2分15秒で500,000レコード。
1行あたりの生徒数は動的です。
パラメータMaxStudentsPerRow:
2 meta [IsParameterQuery=true, Type="Number", IsParameterQueryRequired=true]
一覧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と名前の準備が組み合わされるように、モジュロ整数除算演算といくつかの指標が追加されレコードは、テーブルがピボットされ(高度なオプション「集計しない」)、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秒で854レコードを3414行に処理しました。ありがとう。 –