实例需求:原始表格包含多列属性数据,现在需要将不同属性分列展示在不同的行中,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”。
第5~8行代码使用Table.AddColumn
函数创建一个新列"NewTab",其中包含两个记录(Part1Rec和Part2Rec)的表格。
第9行代码使用Table.RemoveColumns
函数移除不再需要的Part1Rec和Part2Rec列。
第10行代码使用Table.ExpandTableColumn
函数展开"NewTab"列,以获取分列展示的属性值,并设置列名为"cn1"、“cn2"和"cn3”。
转换结果如下图所示。
总结:
使用Power Query函数和操作步骤来实现了将原始表格列数据按照指定规则转换成分列展示的目标格式,使用Table.CombineColumnsToRecord
可将多列数据合并到一个记录中。