先看差异是“同一对象被重复计数”,还是“报告把非对象行也算进去了”。如果每个对象都有稳定标识(例如文件ID、分享ID、规范化后的完整链接),优先按标识去重,保留最早或最完整的一条记录,再核对总数;如果报告只有页码、标题或短链这类不稳定字段,去重会把不同对象误合并,这时应改写采集口径,而不是继续在旧报告上修修补补。若连对象边界都无法确认,退出这份报告、重新定义一行代表什么,通常比强行凑数更省事。
页数多于对象数,常见原因有三种。第一种是同一对象在多个页面出现,例如一个分享链接同时出现在目录页和详情页;第二种是报告把分页导航、表头、统计摘要也当成数据行;第三种是对象在两次采集之间发生了变化,旧行和新行同时留在报告里。三者的处理方式不同:前两种要去重,第三种要先决定以哪个时间点为准,再去重。
可以用一个假设例子来区分。假设某次导出得到120行,但按文件ID归并后只有96个不同ID。若这96个ID中有8个是同一文件的不同版本,那么“实际对象数量”到底算96还是88,取决于你的目标是统计文件还是统计版本。这个前提必须先写清楚,否则去重规则无论怎么定都会有人不服。
保留并去重适用于对象标识稳定、重复行只是展示层问题的场景。动作是:先选一个主键(如文件ID或规范化链接),按主键分组,每组保留字段最完整的一行,然后重新计数。结果是总数下降,但每个对象仍可追溯。下一步应把去重后的清单与原始行号做映射,方便复查。
改写采集口径适用于标识不稳定、重复与真实对象混杂的场景。动作是:在采集阶段就规定“一行代表什么”,例如只保留详情页的唯一条目,排除目录页和汇总行,并记录排除规则。结果是报告页数可能与对象数接近,但代价是丢失部分上下文。下一步要验证改写后是否漏掉了只在目录页出现的对象。
退出旧报告、重新生成适用于无法确认对象边界、或去重后仍无法解释差异的场景。动作是:停止在旧表上修补,重新定义字段和主键后再采集一次。代价是时间成本,但能避免把错误口径带入后续判断。若差异只涉及少量行,也可以先抽样人工核对,再决定是否重做。
这套流程的结果会直接影响下一步:如果展示重复占多数,说明问题在采集范围,改写口径即可;如果时间重复占多数,说明需要固定采集时点;如果两者都少但总数仍对不上,通常意味着对象标识本身不可靠,此时退出旧报告比继续去重更合理。
当对象标识唯一且稳定、重复只来自页面展示时,选保留并去重,代价是可能保留旧字段;当标识不稳定但你能控制采集入口时,选改写口径,代价是需要重新验证覆盖范围;当标识和边界都无法确认时,选退出并重做,代价是时间,但能避免后续判断建立在错误基数上。三种做法没有绝对优劣,关键是你能否说清“一行代表什么”以及“为什么保留这一行”。
最后提醒一点:去重后的数量只是你定义口径下的结果,不等同于对象的真实总量。若要把这个数字用于后续决策,应同时保留原始行数、去重规则和排除原因,这样下次出现差异时才能快速判断是规则变了还是对象变了。