Power Query - 根据唯一 ID 合并数据行
Power Query - Merging rows of data based on unique ID
我遇到了一个与详细 here 类似的问题,我正在使用 pivot-unpivot 解决方案,到目前为止效果很好。不过我的数据比较复杂,因为它是从多个来源提取的,所以有时会有不一致的值。
本质上 - 在应用 pivot/unpivot 之后,分组工作得很好,但我最终遇到了很多错误。它们看起来都一样:
Expression.Error: There were too many elements in the enumeration to complete the operation.
Details: List
为了解决这个问题,我在 Pivot.Column 命令中添加了第 5 个参数:
each Text.Combine(_, "#(lf)")
这会导致显示组合值的错误。但是,有时显示的值会完全相同。我怎样才能让这些实际合并,同时只在具有差异数据的单元格中显示 error/cell 值?我是 power query 的新手,不确定是否有比“Text.combine”
更好的解决方案
下面是一些示例...感谢您的帮助
合并后的 table 看起来像:
Unique ID
Data A
Data B
Data C
ABC
123
789
null
ABC
123
null
name2
BCD
234
null
null
BCD
null
null
null
BCD
1234
null
name2
EFG
333
222
name1
EFG
null
222
null
ABC
null
null
null
以下pivot/unpivot与文本合并(我不知道如何在这里显示换行符,所以用逗号划定):
Unique ID
Data A
Data B
Data C
ABC
123, 123
789
name2
BCD
234, 1234
null
name2
EGF
333
222, 222
name1
我想要的:
Unique ID
Data A
Data B
Data C
ABC
123
789
name2
BCD
234, 1234
null
name2
EGF
333
222
name1
BCD 的数据 A 点会出错,所以我可以看到源数据中有一些东西需要修复 tables。
右键单击 UniqueID 列并逆透视其他列
转换 .. 数据类型 ... 3 列的文本
单击 select 所有 3 列,右键单击,删除重复项
单击 select 唯一 ID 和属性列,右键单击,分组依据...保留默认选项,单击确定
在公式栏中更改分组公式的结尾
来自
each Table.RowCount(_), Int64.Type}})
到
each Text.Combine(List.Transform([Value], Text.From), ","), type text}})
或
each Text.Combine(List.Transform([Value], Text.From), "#(lf)"), type text}})
点击select属性栏
转换...数据透视列...值column:count,高级选项:不聚合
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Source, {"Unique ID"}, "Attribute", "Value"),
#"Changed Type1" = Table.TransformColumnTypes(#"Unpivoted Other Columns",{{"Unique ID", type text}, {"Attribute", type text}, {"Value", type text}}),
#"Removed Duplicates" = Table.Distinct(#"Changed Type1"),
#"Grouped Rows" = Table.Group(#"Removed Duplicates", {"Unique ID", "Attribute"}, {{"Count", each Text.Combine(List.Transform([Value], Text.From), ", "), type text}}),
#"Pivoted Column" = Table.Pivot(#"Grouped Rows", List.Distinct(#"Grouped Rows"[Attribute]), "Attribute", "Count")
in #"Pivoted Column"
你的数据是这样的:
Unique ID
Data A
Data B
Data C
ABC
123
789
null
ABC
123
null
name2
BCD
234
null
null
BCD
null
null
null
BCD
1234
null
name2
EFG
333
222
name1
EFG
null
222
null
ABC
null
null
null
右键单击“唯一 ID”列,select“逆透视其他列”
将生成的值列类型更改为“文本”
Select 所有列。右键单击,选择“删除重复项”。
Select 属性列。从“转换”选项卡中选择“枢轴”。从下拉列表中选择值列。在高级选项下选择不聚合。添加您现有的代码作为第五个参数 each Text.Combine(_, "#(lf)")
我遇到了一个与详细 here 类似的问题,我正在使用 pivot-unpivot 解决方案,到目前为止效果很好。不过我的数据比较复杂,因为它是从多个来源提取的,所以有时会有不一致的值。
本质上 - 在应用 pivot/unpivot 之后,分组工作得很好,但我最终遇到了很多错误。它们看起来都一样:
Expression.Error: There were too many elements in the enumeration to complete the operation.
Details: List
为了解决这个问题,我在 Pivot.Column 命令中添加了第 5 个参数:
each Text.Combine(_, "#(lf)")
这会导致显示组合值的错误。但是,有时显示的值会完全相同。我怎样才能让这些实际合并,同时只在具有差异数据的单元格中显示 error/cell 值?我是 power query 的新手,不确定是否有比“Text.combine”
更好的解决方案下面是一些示例...感谢您的帮助
合并后的 table 看起来像:
Unique ID | Data A | Data B | Data C |
---|---|---|---|
ABC | 123 | 789 | null |
ABC | 123 | null | name2 |
BCD | 234 | null | null |
BCD | null | null | null |
BCD | 1234 | null | name2 |
EFG | 333 | 222 | name1 |
EFG | null | 222 | null |
ABC | null | null | null |
以下pivot/unpivot与文本合并(我不知道如何在这里显示换行符,所以用逗号划定):
Unique ID | Data A | Data B | Data C |
---|---|---|---|
ABC | 123, 123 | 789 | name2 |
BCD | 234, 1234 | null | name2 |
EGF | 333 | 222, 222 | name1 |
我想要的:
Unique ID | Data A | Data B | Data C |
---|---|---|---|
ABC | 123 | 789 | name2 |
BCD | 234, 1234 | null | name2 |
EGF | 333 | 222 | name1 |
BCD 的数据 A 点会出错,所以我可以看到源数据中有一些东西需要修复 tables。
右键单击 UniqueID 列并逆透视其他列
转换 .. 数据类型 ... 3 列的文本
单击 select 所有 3 列,右键单击,删除重复项
单击 select 唯一 ID 和属性列,右键单击,分组依据...保留默认选项,单击确定
在公式栏中更改分组公式的结尾
来自
each Table.RowCount(_), Int64.Type}})
到
each Text.Combine(List.Transform([Value], Text.From), ","), type text}})
或
each Text.Combine(List.Transform([Value], Text.From), "#(lf)"), type text}})
点击select属性栏
转换...数据透视列...值column:count,高级选项:不聚合
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Source, {"Unique ID"}, "Attribute", "Value"),
#"Changed Type1" = Table.TransformColumnTypes(#"Unpivoted Other Columns",{{"Unique ID", type text}, {"Attribute", type text}, {"Value", type text}}),
#"Removed Duplicates" = Table.Distinct(#"Changed Type1"),
#"Grouped Rows" = Table.Group(#"Removed Duplicates", {"Unique ID", "Attribute"}, {{"Count", each Text.Combine(List.Transform([Value], Text.From), ", "), type text}}),
#"Pivoted Column" = Table.Pivot(#"Grouped Rows", List.Distinct(#"Grouped Rows"[Attribute]), "Attribute", "Count")
in #"Pivoted Column"
你的数据是这样的:
Unique ID | Data A | Data B | Data C |
---|---|---|---|
ABC | 123 | 789 | null |
ABC | 123 | null | name2 |
BCD | 234 | null | null |
BCD | null | null | null |
BCD | 1234 | null | name2 |
EFG | 333 | 222 | name1 |
EFG | null | 222 | null |
ABC | null | null | null |
右键单击“唯一 ID”列,select“逆透视其他列”
将生成的值列类型更改为“文本”
Select 所有列。右键单击,选择“删除重复项”。
Select 属性列。从“转换”选项卡中选择“枢轴”。从下拉列表中选择值列。在高级选项下选择不聚合。添加您现有的代码作为第五个参数 each Text.Combine(_, "#(lf)")