先给有条件的结论:当报告页数大于实际对象数量时,优先怀疑“一个对象被拆成多行”而不是“工具算错了”,只有在确认导出字段里存在可唯一标识对象的列之后,去重才有意义。如果报告里没有任何一列能稳定区分两个同名对象,那么任何去重都会误删,此时正确动作是回到数据源补一个标识列,而不是在报告层反复清洗。
页数虚高通常有三种成因,它们的证据不同,处理方式也不同。
区分方法很直接:取一份小样本,按候选标识列分组计数。如果每组行数都大于一,且组内时间列或附属列有差异,就属于前两种;如果组内出现互相矛盾的属性值,就要警惕第三种。这一步的产出决定了后面用哪种去重键。
去重不是删掉多余行就结束,而是要回答“保留哪一行”。常见取舍如下。
选错键的代价不对称:把一对多关系强行去重,会静默丢掉附属信息,且事后难以发现;把真重复保留下来,只是数字偏大,容易在核对总量时暴露。所以拿不准时,宁可先聚合、不删除。
假设某次导出有 500 行,按“邮箱”分组后得到 320 组,其中 180 组只有一行,140 组有两行及以上。再检查这 140 组,发现组内“来源渠道”字段不同,而“邮箱”和“注册时间”相同。这说明是渠道维度被拉平,而不是重复写入。此时若按邮箱去重,会从 500 行降到 320 行,但每个对象的渠道信息只剩一个,后续按渠道统计就会失真。正确动作是保留 500 行明细,另建一张按邮箱计数或按渠道分组的汇总表。这个例子里 500 和 320 都是假设数字,只用于说明比较方法,不代表任何工具的实际表现。
上面“先补标识列再去重”的建议,在一个条件下不成立:当数据源本身就无法提供稳定标识,且业务上允许同名对象存在时。比如内容标题重复是正常现象,两个不同页面可以有相同标题。此时若强行用标题去重,会把合法对象合并。遇到这种情况,去重键必须换成系统生成的内部编号,或者接受页数大于对象数这一事实,改为在报表说明里注明口径,而不是修改数据。
确定去重键后,执行一次并核对两个数字:去重后的行数,以及按该键分组后的组数。两者应当相等。如果不相等,说明键里还有空值或格式差异,比如大小写、前后空格、全角半角。处理完这些再复核一次。只有这两个数字对齐,去重结果才可以进入下一环节;否则先回到数据源,而不是继续在报告层叠加清洗步骤。具体工具是否提供内置去重、以哪个字段为默认键,需要以你所用工具的当前说明为准。