编辑:这将适用于没有表或命名范围的工作簿。
-
获取数据 > 从文件 > 从工作簿。选择工作簿名称,然后
选择转换数据
-
选择数据列。右键,删除其他列
-
单击双箭头展开列。取消选中“使用原始列名作为前缀”复选框。
-
主页选项卡 > 使用第一行作为标题
-
打开高级编辑器并添加这两个步骤:
#"RemovedColumnList" = List.Select(Table.ColumnNames(#"Changed Type"), each Text.StartsWith(_, "Column")),
#"RemovedColumns" = Table.RemoveColumns(#"Changed Type", RemovedColumnList),
-
将 ID 列过滤为不等于“ID”
-
转换选项卡 > 反透视列
-
选择属性列,从转换选项卡中选择提取。提取分隔符前的文本,使用“_”作为分隔符。
-
添加列>索引列>从1
-
打开高级编辑器,插入这一步:
#"Replaced Value" = Table.ReplaceValue(#"Added Index",each [Index], each Number.RoundUp([Index]/5),Replacer.ReplaceValue,{"Index"}),
- 选择属性列。变换选项卡 > 透视列。为值列选择值。点击高级,从下拉列表中选择不聚合。
- 选择索引列并删除。
完整的 M 代码:
let
Source = Excel.Workbook(File.Contents("C:\Users\Jody.Highroller\Documents\excel\Copy of ExampleFinal.xlsx"), null, true),
#"Removed Other Columns" = Table.SelectColumns(Source,{"Data"}),
#"Expanded Data" = Table.ExpandTableColumn(#"Removed Other Columns", "Data", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25", "Column26", "Column27", "Column28", "Column29", "Column30", "Column31"}, {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25", "Column26", "Column27", "Column28", "Column29", "Column30", "Column31"}),
#"Promoted Headers" = Table.PromoteHeaders(#"Expanded Data", [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"ID", type any}, {"Name", type text}, {"Status 1", type any}, {"Status 2", type any}, {"Collection", type text}, {"Column6", type any}, {"Column7", type any}, {"Column8", type any}, {"ID_1", type any}, {"Name_2", type text}, {"Status 1_3", type any}, {"Status 2_4", type any}, {"Collection_5", type text}, {"Column14", type any}, {"Column15", type any}, {"Column16", type any}, {"Column17", type any}, {"ID_6", type any}, {"Name_7", type text}, {"Status 1_8", type any}, {"Status 2_9", type any}, {"Collection_10", type text}, {"Column23", type any}, {"Column24", type any}, {"Column25", type any}, {"Column26", type any}, {"ID_11", Int64.Type}, {"Name_12", type text}, {"Status 1_13", Int64.Type}, {"Status 2_14", Int64.Type}, {"Collection_15", type text}}),
RemovedColumnList = List.Select(Table.ColumnNames(#"Changed Type"), each Text.StartsWith(_, "Column")),
#"RemovedColumns" = Table.RemoveColumns(#"Changed Type", RemovedColumnList),
#"Filtered Rows" = Table.SelectRows(RemovedColumns, each ([ID] <> "ID")),
#"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Filtered Rows", {}, "Attribute", "Value"),
#"Extracted Text Before Delimiter" = Table.TransformColumns(#"Unpivoted Columns", {{"Attribute", each Text.BeforeDelimiter(_, "_"), type text}}),
#"Added Index" = Table.AddIndexColumn(#"Extracted Text Before Delimiter", "Index", 1, 1, Int64.Type),
#"Replaced Value" = Table.ReplaceValue(#"Added Index",each [Index], each Number.RoundUp([Index]/5),Replacer.ReplaceValue,{"Index"}),
#"Pivoted Column" = Table.Pivot(#"Replaced Value", List.Distinct(#"Replaced Value"[Attribute]), "Attribute", "Value"),
#"Removed Columns" = Table.RemoveColumns(#"Pivoted Column",{"Index"})
in
#"Removed Columns"