先给结论:报告页数大于实际对象数量,通常不是工具算错,而是同一对象被拆成了多个可计数的行。去重的正确起点不是删页,而是先确认“一个对象”在报告里由哪些字段共同定义,再把定义之外的差异折叠掉。如果直接按显示名称去重,你会误删同名的不同页面;如果直接按完整行去重,报告页数几乎不会下降。
把报告里多出来的行分成三类,处理方式完全不同。
判断依据很简单:取报告里页数最多的那个对象,看它多出来的行之间,哪些字段变了。只有时间、设备、地区在变,就是对象级;网址字符串本身在变,就是变体级;分组字段在变,就是归属级。
假设你手头有一份导出表,实际对象是120个,报告却有340行。按下面顺序处理。
做完这三步,再看页数。如果页数从340降到150,仍高于120,说明还有变体级重复没处理干净;如果降到118,说明规范化过度,把本该分开的对象合并了。这两个方向都能帮你定位下一步该改哪条规则。
去重最容易出错的地方,是把“看起来一样”当成“实际一样”。以下情况建议保留为不同对象,除非你的分析目标明确要求合并。
一个实用的边界测试:假设把这两行合并成一行,你还能不能回答原本要回答的问题。能,就合并;不能,就保留并加一列说明差异来源。
假设你导出了一份报告,实际对象是3个页面:/a、/b、/c。报告里出现5行:/a 出现两次,差异只在检测时间;/b 出现两次,一次是 /b,一次是 /b/;/c 出现一次。
如果你把末尾斜杠视为同一对象,去重后是3行,与120对340的场景一致。如果你把末尾斜杠视为不同对象,去重后是4行,多出来的那一行就是变体级重复。这个例子的意义不在于数字,而在于让你先在小样本上跑一遍规则,确认每个被合并和未被合并的行都有明确理由,再把这套规则套到全量数据上。直接在全量数据上试规则,你很难判断某一行消失是规则正确还是规则过宽。
去重不是把行删掉就结束。至少要留下三样东西:对象主键的定义、规范化时做了哪些转换、被合并的行原本有哪些差异字段。这样当别人问“为什么报告里少了200行”时,你能指出每一类消失的原因,而不是只能回答“去重了”。
如果去重后页数仍与预期不符,先检查是不是把归属级重复当成了对象级重复处理。归属级重复的特征是同一主键下分组字段不同,而对象级重复的分组字段相同。分清这一点,你就能决定是改报告还是改配置,而不是反复调整去重脚本。