Table.Sort(Table.Combine([A=Table.ToColumns(源),B=List.Transform({1..Table.ColumnCount(源)-2},(x)=>Table.SelectRows(Table.FromColumns({A{0}}&{A{x}}&{List.Last(A)},{"Date","作业人","作业量"}),each [作业人]<>null))][B]),{"Date"})
Table.Sort(Table.Combine([A=Table.ToColumns(源),B=List.Transform({1..Table.ColumnCount(源)-2},(x)=>Table.SelectRows(Table.FromColumns({A{0}}&{A{x}}&{List.Last(A)},{"Date","作业人","作业量"}),each [作业人]<>null))][B]),{"Date"})
只要1步逆透视就可以解决所有,
let
源 = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
更改的类型 = Table.TransformColumnTypes(源,{{"Date", type date}}),
逆透视的其他列 = Table.UnpivotOtherColumns(更改的类型, {"Date", "AVR"}, "属性", "值"),
重排序的列 = Table.ReorderColumns(逆透视的其他列,{"Date", "值", "AVR", "属性"}),
删除的列 = Table.RemoveColumns(重排序的列,{"属性"}),
重命名的列 = Table.RenameColumns(删除的列,{{"值", "作业员"}, {"AVR", "平均值"}})
in
重命名的列
新手不会发代码和图片, 将我代码中的列名对应的原表列作以下说明:
Date --> Date
AVR ---> 平均作业量
平均值---> 作业量
原来是旧版本IE不能直接粘贴图片,
Table.Sort(Table.Combine([A=Table.ToColumns(源),B=List.Transform({1..Table.ColumnCount(源)-2},(x)=>Table.SelectRows(Table.FromColumns({A{0}}&{A{x}}&{List.Last(A)},{"Date","作业人","作业量"}),each [作业人]<>null))][B]),{"Date"})
谢谢各位的回答,都很有启发。
我参考了其他问答,解决了这个问题。
#"Reordered Columns" = Table.ReorderColumns(源,{"日期", "平均作业量", "作业人1", "作业人2", "作业人3", "作业人4"}),
变形 = Table.CombineColumns(#"Reordered Columns",List.Skip(Table.ColumnNames(#"Reordered Columns"),6),each Table.FromRows(List.Select(List.Split(_,1),(x)=>not List.MatchesAll(x,(y)=>y is null))),"temp"),
展开 = Table.ExpandTableColumn(变形, "temp", {"Column1"}, {"作业人员"}),