月底要一张分票种的分日销售表,点开报表等了二十分钟,出来一张空表。这时候先别怀疑明细丢了。报表跑不出来,多数卡在三层:任务本身没落到终态、时间窗取不到那段明细、口径把三套数塞进同一行。三层各有各的判法,逐层往下排,比把整张表重跑一遍省时间,也更容易说清断在哪一步、该找谁处理。
一、任务这一层只看状态机。报表任务应该有四种状态:待跑、在跑、成功、失败,任何时刻只能落在其中一种。跑满三十分钟还停在在跑的,算异常,不算慢;不落终态就被默认成还在算,是报表最常见的假死。定时报表应在营业结束后一小时内出结果,连续两天没出就要人工追,等到月底再追已经来不及。失败要留开始时刻、结束时刻、错误码三栏,只写一句失败不行的表等于没记。
二、时间窗有两条线。一条是明细可取范围:近九十天在热存里直接取,超过九十天走归档,走归档的报表不该和日报同一个入口,同入口的后果是没人知道它为什么慢。另一条是营业日切点:夜里闭园之后的单归当天还是归次日,取决于日切定在凌晨几点。两种口径的表放在一起比,永远差一天。区间跨度也要分档,三十一天以内一次跑,超过九十二天分批跑,硬跑一整年只会撞在任务超时上。

三、口径是三套数不是一行。下单口径按支付完成时刻计,核销口径按通道通过时刻计,结算口径按对账归属日计。同一张表里三套数各占一列,不做合计、不相减,谁也不许盖住谁。预售期长的套票按售出那天还是按入园那天,要在表头写清并固定,改一次口径就给全年的表埋一个坑。跨日退、部分退同理,按退票发起日还是按退款到账日,只能二选一。
四、维度落空值的那部分不能丢。票种、渠道、窗口、时段四个维度,只要有一部分订单上是空的,按维度分组的报表就会悄悄少掉几行。判据很硬:跑完先取一次空值行数,大于零就把空值单独成一个分组列出来,不许静默过滤。少掉的往往正是人工放行、离线补传、接口写入那三类,越是需要盯的单越容易没有维度值。

五、验证从最小的一张表开始。取一天、一个渠道、一个票种,把订单数、核销数、退款数三个数拉出来,和当班窗口台账逐条对。差零笔算通过;差一到五笔逐笔查归属层,看落在票种、时间还是口径上;差六笔以上别再往下查数,先怀疑两套表的口径本就不一致。最小表跑通再放宽到一周、一个月,方向反过来只会一直查不完。
这三层的先后顺序不能倒。任务和时间窗是能不能出数的问题,口径是出出来的数究竟指什么的问题,把口径放在最后不是它不重要,而是口径一旦中途改过,前面跑的结果全部作废。报表台账上每次改口径要留一行:改了哪一列、从哪天生效、谁签的。三个月后有人问这张表为什么前后对不上,答案就在那一行里。
扫一扫官方微信号