如何在Power Query中统计fruit工作表符合条件的记录并写入result工作表
需求说明
我有两个Excel工作表:fruit 和 result。其中result工作表包含fruit工作表里的唯一水果值,需要统计fruit中同时满足status = completed且ut/un = ut的各水果记录数量,并将结果输出到result工作表。
我尝试了以下Power Query代码,但未得到正确结果:
let Source = Excel.CurrentWorkbook(){[Name="result"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{"fruit", type text}}), #"Added Custom1" = Table.AddColumn(#"Changed Type", "completed", each "completed"), #"Added Custom" = Table.AddColumn(#"Added Custom1", "ut-completed", each List.Count( Table.SelectRows(#"fruit1", (ft1) => ft1[fruits] = [fruit] and ft1[status] = [completed] ))) in #"Added Custom"
修正方案
你的代码存在几个问题:
- 未正确引入fruit工作表的数据,代码中使用的
#"fruit1"未定义 - 缺少
ut/un = ut的条件判断 - 额外添加的
completed列属于冗余操作
以下是修正后的Power Query代码:
let // 加载result工作表数据 Source_Result = Excel.CurrentWorkbook(){[Name="result"]}[Content], // 加载fruit工作表数据并设置列类型 Source_Fruit = Excel.CurrentWorkbook(){[Name="fruit"]}[Content], #"Changed Type Fruit" = Table.TransformColumnTypes(Source_Fruit, { {"fruits", type text}, {"status", type text}, {"ut/un", type text} }), // 过滤fruit中符合条件的记录:status=completed且ut/un=ut #"Filtered Rows" = Table.SelectRows(#"Changed Type Fruit", each ([status] = "completed" and [ut/un] = "ut")), // 按水果分组统计数量 #"Grouped Rows" = Table.Group(#"Filtered Rows", {"fruits"}, {{"ut-completed", each Table.RowCount(_), Int64.Type}}), // 将统计结果与result表合并,匹配对应水果 #"Merged Queries" = Table.NestedJoin(Source_Result, {"fruit"}, #"Grouped Rows", {"fruits"}, "Grouped Rows", JoinKind.LeftOuter), // 提取统计数量,无匹配的显示0 #"Added Custom" = Table.AddColumn(#"Merged Queries", "ut-completed", each if [Grouped Rows] <> null then [Grouped Rows][ut-completed]{0} else 0), // 删除临时列 #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Grouped Rows"}) in #"Removed Columns"
代码说明
- 同时加载result和fruit两个工作表的数据
- 先对fruit数据进行条件过滤,只保留符合要求的记录
- 按水果名称分组,统计每组的行数
- 将统计结果与result表进行左连接,确保所有唯一水果都能显示
- 处理无匹配的情况,默认填充0,最后清理临时列
内容的提问来源于stack exchange,提问作者Srikanth
相关产品推荐
相关产品推荐

