求助:Excel中按attribute分组统计unique orders及按status拆分的方法
解决Excel中按属性组合统计唯一订单的问题
我来帮你搞定这个统计需求!先把你的原始数据和需求明确下来,再给你两种实用的解决方法:
原始数据
| status | order | attribute |
|---|---|---|
| purchased | table | brown |
| purchased | table | yellow |
| purchased | table | |
| purchased | sofa | |
| purchased | sofa | green |
| purchased | sofa | |
| purchased | pillow | brown |
| purchased | pillow | yellow |
| purchased | pillow | |
| shipped | lamp | |
| shipped | lamp | |
| shipped | lamp | |
| shipped | desk | brown |
| shipped | desk | |
| shipped | desk |
你的统计需求
需要针对每个order的attribute组合做分类统计,同时支持按status拆分:
- 无
attribute的唯一orders数量 - 仅拥有
brown属性、无其他属性的唯一orders数量 - 同时拥有
brown和yellow属性的唯一orders数量
预期结果你已经明确:
- 无
attribute的唯一orders数量:1(lamp) - 仅拥有
brown属性的唯一orders数量:1(desk) - 同时拥有
brown和yellow属性的唯一orders数量:2(table和pillow)
方法1:Excel公式组合(适合小规模数据)
这个方法用Excel内置公式就能实现,适合数据量不大的情况:
步骤1:生成每个订单的唯一属性集合
在空白列(比如D列)的D2单元格输入以下公式,下拉填充到所有行:
=TEXTJOIN(",",TRUE,UNIQUE(FILTER($C$2:$C$16,($A$2:$A$16=A2)*($B$2:$B$16=B2)*($C$2:$C$16<>""))))
这个公式会为每个status+order组合提取所有非空的唯一属性,用逗号拼接成字符串。
步骤2:按需求统计各类订单
统计「无attribute的唯一orders」
=COUNTA(UNIQUE(FILTER($B$2:$B$16,($D$2:$D$16="")*(COUNTIFS($B$2:$B$16,$B$2:$B$16,$D$2:$D$16,"")>0))))
如果要按status拆分(比如只统计shipped状态),修改为:
=COUNTA(UNIQUE(FILTER($B$2:$B$16,($A$2:$A$16="shipped")*($D$2:$D$16="")*(COUNTIFS($B$2:$B$16,$B$2:$B$16,$A$2:$A$16,"shipped",$D$2:$D$16,"")>0))))
统计「仅拥有brown属性的唯一orders」
=COUNTA(UNIQUE(FILTER($B$2:$B$16,($D$2:$D$16="brown")*(COUNTIFS($B$2:$B$16,$B$2:$B$16,$D$2:$D$16,"brown")>0))))
统计「同时拥有brown和yellow属性的唯一orders」
=COUNTA(UNIQUE(FILTER($B$2:$B$16,(ISNUMBER(SEARCH("brown",$D$2:$D$16)))*(ISNUMBER(SEARCH("yellow",$D$2:$D$16)))*(COUNTIFS($B$2:$B$16,$B$2:$B$16,$D$2:$D$16,"*brown*yellow*")+COUNTIFS($B$2:$B$16,$B$2:$B$16,$D$2:$D$16,"*yellow*brown*")>0))))
方法2:Power Query(适合大规模数据,更灵活)
如果你的数据量比较大,或者需要频繁更新统计结果,Power Query是更高效的选择:
- 导入数据到Power Query:选中数据区域,点击「数据」选项卡 → 「从表格/区域」,确认数据包含表头,进入编辑器。
- 提取订单的唯一属性集合:
- 点击「转换」选项卡 → 「分组依据」,设置分组字段为
status和order,新列名设为UniqueAttributes,操作选择「所有行」。 - 添加自定义列,公式为:
=Text.Combine(List.Distinct([UniqueAttributes][attribute]), ","),这会把每个订单的唯一非空属性拼接成字符串。
- 点击「转换」选项卡 → 「分组依据」,设置分组字段为
- 标记订单的属性类别:
- 添加自定义列,用条件判断标记类别:
= if [UniqueAttributes] = "" then "无属性" else if [UniqueAttributes] = "brown" then "仅brown" else if List.ContainsAll(Splitter.SplitTextByDelimiter(",")([UniqueAttributes]), {"brown", "yellow"}) then "brown+yellow" else "其他属性"
- 添加自定义列,用条件判断标记类别:
- 统计结果:再次按
status和新添加的类别列分组,操作选择「计数行」,字段选择order,最后加载回Excel即可。
这个方法的好处是数据更新后,只需要点击「刷新」就能得到最新的统计结果,非常省心。
内容的提问来源于stack exchange,提问作者4lackof
相关产品推荐
相关产品推荐

