BI神器Power Query(26)-- 使用PQ实现表格多列转换(2/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],
    Part1 = Table.CombineColumnsToRecord(Source, "Part1Rec", {"Att1", "Att3", "Att5"}, [DisplayNameColumn="Att1", TypeName="CmbCol"]),
    Part2 = Table.CombineColumnsToRecord(Part1, "Part2Rec", {"Att2", "Att4", "Att6"}, [DisplayNameColumn="Att2", TypeName="CmbCol"]),
    AddTable = Table.AddColumn(Part2, "NewTab", each Table.FromRows({
            Record.FieldValues([Part1Rec]), 
            Record.FieldValues([Part2Rec])
    })),
    RemovedRec = Table.RemoveColumns(AddTable,{"Part1Rec", "Part2Rec"}),
    Output = Table.ExpandTableColumn(RemovedRec, "NewTab", {"Column1", "Column2", "Column3"}, {"cn1", "cn2", "cn3"})
in
    Output

代码解析:
第2行代码加载源表格,表格名称为Table1。
第3行代码使用Power Query函数Table.CombineColumnsToRecord将"Att1"、“Att3"和"Att5"合并为一个记录,并设置显示名称为"Att1”。
第4行代码与第3行代码类似,合并"Att2"、“Att4"和"Att6”。

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

第5~8行代码使用Table.AddColumn函数创建一个新列"NewTab",其中包含两个记录(Part1Rec和Part2Rec)的表格。

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

第9行代码使用Table.RemoveColumns函数移除不再需要的Part1Rec和Part2Rec列。
第10行代码使用Table.ExpandTableColumn函数展开"NewTab"列,以获取分列展示的属性值,并设置列名为"cn1"、“cn2"和"cn3”。

转换结果如下图所示。

在这里插入图片描述


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

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