先判断不一致发生在哪一层:是查询对象在生成阶段被重复写入,还是报告在分页、合并或导出时把同一对象拆成了多行。两种成因的去重位置不同,处理动作也不同。若对象表本身已有唯一标识,优先在对象层去重再查询;若对象表干净而报告多出页数,则应在报告合并层按对象标识归并,而不是删掉看起来重复的页。
对象重复的特征是:同一个查询单位在待查清单里出现两次以上,导致后续每个对象都各出一行结果,报告页数自然翻倍。页数膨胀的特征是:待查清单只有一个对象,但报告因为分页、多次导出或按条件拆分,把同一对象的结果散落在多页。前者要在查询前修清单,后者要在查询后做归并。
区分方法很直接:打开待查清单,按你定义的唯一标识排序,看是否存在相邻或分散的重复行。若清单无重复,而报告行数明显多于清单行数,问题就在报告侧。这个判断决定了你下一步是改输入还是改输出,做错方向会白费一轮查询。
去重的前提是能判断“什么算同一个对象”。批量查询里常见的对象是“关键词+地区+设备+语言”这样的组合,而不是单独一个关键词。若只按关键词去重,会把不同地区或设备的合法查询误删;若把时间条件也塞进唯一标识,又会让同一对象因日期不同而无法归并。
可执行的做法是:把稳定不变的维度放进唯一标识,把会变化的维度单独作为列记录。例如唯一标识用关键词、地区、设备、语言的组合,查询日期只作为附加列。这样既能去掉真正的重复对象,又不会把不同条件下的结果混为一谈。做完这一步,重新统计清单行数,若行数下降,说明原来的报告页数里有一部分来自重复对象,而不是查询本身出了问题。
如果清单已确认无重复,报告仍多出页数,处理顺序应是先合并再判断。把多份导出或多次分页的结果放在一起,按唯一标识分组,同一标识只保留一条最终记录。归并时要明确保留规则:是保留最新一次查询,还是保留条件最完整的一条。规则不写清楚,归并后会出现同一对象在不同页显示不同结果,反而更难解释。
一个假设例子:清单有 200 个对象,导出报告显示 260 行。按唯一标识分组后发现 40 行是同一批对象在两次导出中各出现一次。此时正确动作是保留其中一次并记录另一次的时间戳,而不是把 260 行直接当成 260 个对象去做后续分析。归并后行数回到 200,你才能继续判断剩余差异是否来自查询条件变化。
去重后不要直接进入下一轮,先抽几个对象核对。选取的对象应覆盖两类:一类是原本疑似重复的,一类是只出现一次的。核对内容是该对象在原始报告中的全部出现位置,以及去重后保留的那一条是否与预期条件一致。
抽样结果会直接决定下一步:核对通过就按去重后的清单继续查询或分析;核对不通过就回到唯一标识定义那一步修正,而不是在报告层反复删行。
这套判断值得固定下来,因为批量查询会反复发生。建议在流程里保留三个检查点:查询前统计清单唯一标识数量,查询后统计报告行数,归并后再统计一次。三个数字的差异能直接指向问题发生在哪一层。
需要说明的是,报告行数归零或某项统计突然变小,并不能单独证明去重正确。它也可能是导出中断、筛选条件误设或对象被错误过滤造成的。因此每次归并后仍要保留原始报告和归并日志,便于回溯。把去重当成一次有记录的处理动作,而不是一次性删行,后续再遇到页数与对象数量不一致时,你就能快速定位并选择正确的处理层。