省份维度合计 1,286 万,全国一行也是 1,286 万的两倍,城市维度再加一次变成三倍,越汇总越大。乍看像缓存或者权限的锅,追下去往往不是。
SELECT level, SUM(amount) FROM report_region WHERE dt='2026-03-01' GROUP BY level; SELECT SUM(amount) FROM report_region WHERE level='province' AND dt='2026-03-01';
追下去是这么回事:报表把省份、城市、全国放在同一列里,sum 时没有按层级过滤。全国行本身已经包含省份,再和省份相加就重复。维度表里层级字段也没有区分。
「维度层级重复汇总」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
具体做法是,层级用独立字段标记 全国、省、市各一层;汇总时按层级过滤 只取一层求和;全国行由省份上卷生成 不单独存明细;逐层核对 省合计等于全国 市合计等于省。
验收就看一点,全国、省份、城市三层合计一致,不再出现倍数放大。
