BI神器Power Query(27)-- 使用PQ实现表格多列转换(3/3)

实例需求:原始表格包含多列属性数据,现在需要将不同属性分列展示在不同的行中,att1、att3、att5为一组,att2、att3、att6为另一组,数据如下所示。

更新表格数据

原始数据表:

Col1 Col2 Att1 Att2 Att3 Att4 Att5 Att6
AAA DDD X O alpha delta 100 400
BBB EEE Y P beta vega 200 500

结果数据表:

Col1 Col2 cn1 cn3 cn3
AAA DDD X alpha 100
AAA DDD O delta 400
BBB EEE Y beta 200
BBB EEE P vega 500

示例代码

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    ChangedType = Table.TransformColumnTypes(Source,{{"Att1", type text}, {"Att2", type text}, {"Att3", type text}, {"Att4", type text}, {"Att5", type text}, {"Att6", type text}}),
    MergedPart1 = Table.CombineColumns(ChangedType,{"Att1", "Att3", "Att5"},Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Part1"),
    MergedPart2 = Table.CombineColumns(MergedPart1,{"Att2", "Att4", "Att6"},Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Part2"),
    UnpivotedOtherCol = Table.UnpivotOtherColumns(MergedPart2, {"Col2", "Col1"}, "Attribute", "Value"),
    RemovedColumns = Table.RemoveColumns(UnpivotedOtherCol,{"Attribute"}),
    Output = Table.SplitColumn(RemovedColumns, "Value", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"cn1", "cn2", "cn3"})
in
    Output    

代码解析:
第2行代码加载源表格,表格名称为Table1。
第3行代码使用Table.TransformColumnTypes函数将属性列的数据类型更改为文本类型。
第4行代码使用Table.CombineColumns函数将"Att1"、“Att3"和"Att5"合并为一个列"Part1”,用逗号分隔。

使用Table.AddColumn函数也可以增加一列"Part1",其值为"Att1"、"Att3"和"Att5"的合并结果,与第4行代码的区别在于,此代码并不能删除被合并的3列。

= Table.AddColumn(ChangedType, "Part1", each [Att1] & "," & [Att3] & "," & [Att5])

第5行代码使用Table.CombineColumns函数将"Att2"、“Att4"和"Att6"合并为一个列"Part2”,同样用逗号分隔。

BI神器Power Query(27)-- 使用PQ实现表格多列转换(3/3)_第1张图片

第6行代码使用Table.UnpivotOtherColumns函数,保留"Col2"和"Col1"列,将其他列转换成"Attribute"和"Value"列。

BI神器Power Query(27)-- 使用PQ实现表格多列转换(3/3)_第2张图片

第7行代码使用Table.RemoveColumns函数移除不再需要的"Attribute"列。
第8行代码使用Table.SplitColumn函数按逗号分隔"Value"列,分为"cn1"、"cn2"和"cn3"三列。

转换结果如下图所示。

在这里插入图片描述


总结:
使用Power Query函数和操作步骤来实现了将原始表格列数据按照指定规则转换成分列展示的目标格式,使用Table.CombineColumnsToRecord可将多列数据合并到一个记录中。

你可能感兴趣的:(数据清洗,表格,Power,Query,数据清洗,表格转换,数据转换,多列,PowerQuery)