Excel 透视表怎么去重计数?
更新于 2026-09-29 · 阅读约 5 分钟
简短回答
Excel 透视表的去重计数叫「非重复计数」,但默认看不到:要在「插入 → 数据透视表」时勾选「将此数据添加到数据模型」,之后在「值字段设置」里才能选「非重复计数」。这只适用于 Windows 版 Excel,已经建好的普通透视表要重新创建。
代价是数据模型透视表不能再用「计算字段」。Mac 版 Excel 没有数据模型,WPS 表格的透视表也没有非重复计数,这时用辅助列,或者 Microsoft 365 的 UNIQUE / GROUPBY 公式。不管用哪种方法,都别拿「计数」当去重计数:计数数的是行,一张订单有几行商品,就会被数几次。
计数和去重计数差多少:一份真实数据
下面是一家超市 4 个多月的收银明细,共 65,535 行。一行是小票上的一条商品记录,所以一张单据号常常占好几行。按收银员分别用三种方式来数:
| 收银员 | 明细行数(计数) | 订单数(去重单据号) | 商品数(去重商品货号) |
|---|---|---|---|
| 司马婉清 | 21,297 | 10,340 | 1,941 |
| 周慧敏 | 10,044 | 4,835 | 1,527 |
| 林悦 | 31,521 | 15,353 | 2,089 |
| 许丽娟 | 297 | 155 | 185 |
| 赵雅琴 | 2,376 | 1,185 | 797 |
| 合计 | 65,535 | 31,868 | 2,240 |
还要注意,去重计数不能相加。5 位收银员的商品数加起来是 6,539,全店却只卖了 2,240 种商品,因为同一种商品会被好几个人卖过。订单数加起来刚好是 31,868,那是因为每张单只属于一个收银员。所以合计必须对全部数据重新去重,不能把各行相加。
在 Excel / WPS 里怎么去重计数
方法一:数据模型透视表(Windows 版 Excel)
- 1选中数据区域里的任意一个单元格,点「插入 → 数据透视表」。
- 2在创建对话框底部勾选「将此数据添加到数据模型」,确定。
- 3把「收银员名称」拖到「行」,把「单据号」拖到「值」。
- 4点值区域里的「计数项:单据号」→「值字段设置」,汇总方式选「非重复计数」,确定。
这是结果最可靠的办法,总计也是重新去重的。代价有三个:数据模型透视表不能用「计算字段」,想算「销售额 ÷ 订单数」得学 DAX 写度量;已有的普通透视表不能切换过去,要重建;Mac 版 Excel 没有数据模型,这一步做不了。
方法二:辅助列 + 普通透视表(Mac、WPS 都能用)
思路是给每个值「第一次出现」的那一行记 1,其余记 0,透视表再对这一列求和。数订单时最快:先按单据号排序,让同一张单连在一起,然后在空白列输入下面的公式并向下填充:
=IF(B2<>B1,1,0)要数的值分散在各处(比如商品)时,只能用 COUNTIF 回头查。这类公式要计算很久:只有一个条件的 =IF(COUNTIF($D$2:D2,D2)=1,1,0),在 65,535 行上用 Mac 版 Excel 实测算了约 25 秒。另外,「第一次出现」是按某种分组算的:上面这列数的是全店第一次出现的商品,按收银员拆开就少算了。要按收银员数,得把收银员也写进条件,改用 COUNTIFS,而这时透视表的合计又变成各组相加(上面的 6,539)。每换一种分组,就要重写一列。
网上常见的另一种写法,是不加辅助列、一个公式算出全表去重数:
=SUMPRODUCT(1/COUNTIF(D2:D65536,D2:D65536))方法三:UNIQUE / GROUPBY 公式(Microsoft 365)
不用透视表,直接用公式。全表订单数(Excel 2021 及以上可用):
=COUNTA(UNIQUE(B2:B65536))按收银员分组去重,底部带重新去重的总计(需要 Microsoft 365 的 GROUPBY):
=GROUPBY(A2:A65536,B2:B65536,LAMBDA(x,ROWS(UNIQUE(x))))两个公式在 Mac 版 Microsoft 365 上实测都是秒出,结果和上表一致。缺点是它只是一块公式区域,换个分组要改公式,不能像透视表那样拖字段。
WPS 表格
WPS 官方社区的答复是,数据透视表「暂时还不支持」非重复计数。用方法二的辅助列即可,思路完全相同。另一个办法是先「删除重复项」再透视,但删掉的行里的金额和数量也没了,一定要在副本上操作。
在数力里
在数力里:去重计数就是一种汇总方式
数力的度量有六种快速汇总:求和、平均值、最小值、最大值、计数和去重计数。不需要数据模型,也不用辅助列,Windows 和 Mac 上一样。合计行对全部数据重新去重,换什么分组都是对的。去重计数的度量还能直接参与加减乘除,比如「销售额 ÷ 订单数」。
- 1新建分析,导入 CSV 或 Excel 文件。
- 2点「度量值」旁的 ⊕,度量名称填「订单数」,「汇总」选「去重计数」,「字段」选「单据号」,保存。
- 3把「收银员名称」拖到「行」,把「订单数」拖到「度量」。想按月份、按商品看,把别的字段拖进「行」就行,度量不用改。
对数力AI 说
「按收银员统计订单数(单据号去重)和卖出的商品种数(商品货号去重)」

常见问题
- 值字段设置里为什么找不到「非重复计数」?
- 因为这张透视表没有加入数据模型。重新「插入 → 数据透视表」,勾选「将此数据添加到数据模型」再建。Mac 版 Excel 和 WPS 表格没有这个选项,只能用辅助列或公式。
- 加入数据模型后,「计算字段」为什么变灰了?
- 数据模型透视表不支持计算字段和计算项。需要算比值(比如销售额 ÷ 订单数),要在 Power Pivot 里用 DAX 的 `DISTINCTCOUNT` 函数新建度量。
- 去重计数的合计,为什么不等于各行加起来?
- 因为同一个值可能出现在好几组里。一种商品被 3 个收银员卖过,在每个人那里各算 1 种,全店却只算 1 种。合计小于各行相加是正常的,等于各行相加反而说明每个值只属于一组。
- 明明是同一个人,透视表里却出现了两行?
- 多半是名字前后有空格或全角、半角不同,Excel 会把它们当成两个值,去重计数也会各算各的。用 `TRIM` 函数或「查找和替换」清理后再透视。