运营的每日一问——昨天多少人在线、收了多少、流失了多少——曾经靠人肉拉库跑查询。自动化报表把日周月三级的指标定时生成、定时投递:凌晨 00:05 日报进运营邮箱,周一上午周报、每月首日月报按同一管道出去,人只看结论不跑数据。
---全局定时器 40 号:每分钟检查报表时刻
setontimerex(40, 60)
function Report.tick()
local hm = os.date("%H%M")
if hm ~= "0005" or Report.doneToday() then return end
Report.markToday()
local rows = Report.collectDaily()
local body = Report.render(rows)
sendmail("运营组", 8001, "每日运营报表 " .. os.date("%Y-%m-%d"), body, "")
end
全局定时器每分钟对表:跨过 00:05 的门槛且当日未生成则触发生成,markToday 的幂等标志防止重复投递。日报的核心指标一屏十行:日活跃、峰值在线(grobalinfo 取实时在线的快照历史)、新增、次留、充值与 ARPU、流出金币与装备产出,每行带前一日对比。
---日报数据落表,周月报从日报聚合
function Report.weekly()
local days = {}
for i = 1, 7 do
days[i] = Report.loadDaily(os.time() - i * 86400)
end
local sum = Report.aggregate(days)
sendmail("运营组", 8002, "周运营报表", Report.render(sum), "")
end
周报与月报不复算原始数据:日报落库后,周报聚合 7 天、月报聚合当月日报,口径天然一致。同比与环比双列:本周比上周、本周比四周均值,异常的斜率自己跳出来。报表的指标定义集中在一个字典文件,活跃的定义、留存的口径写死一处,三个报表引用同一份字典,口径打架的争论就此绝迹。
报表任务的成功与耗时监控,生成超过 5 分钟即告警;指标的抽样人工复核每周一次,机器算数与人工抽查的偏差必须为零。
幂等标志曾经存内存,进程重启后日报发两遍,标志落库后修复。跨天定时器曾经在 00:00 整点抢跑,当日的实时数据还没切日,生成时刻移到 00:05 错开切换窗口。月报的聚合曾经把 31 号的日报漏掉,按日遍历的边界写成了 30,日期边界改为按月首末取值。
报表的收件人清单进配置,运营、发行、开发各取所需分渠道投递。指标的字典文件与埋点文档同源维护,新增指标先定义后采集。月报附一个月的异常事件时间轴:回档、封禁批量、支付波动标在同一根时间轴上,数据的异常与事件对得上才算看懂了报表。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 行会福利只有加成和宝库,缺少可成长的实体。行会技能塔给行会一座可以逐层点亮的塔:全行会捐献建材升级塔层,…
实战应用:用在哪里 新手玩家的第一次长途旅行总在比奇到沃玛的路上迷路或被怪打死。新手护送教学线把这段路变成有老玩家护航的成人…
实战应用:用在哪里 行会招新全靠世界频道刷屏,招募信息水贴一样沉底。行会招募接口给招新一个正式渠道:行会发布结构化招募信息(…
实战应用:用在哪里 拍卖行商品上万件,翻页找裁决之杖像大海捞针。商城搜索给拍卖行装上联想与筛选:输入前两个字即时联想候选关键…
实战应用:用在哪里 桃源之门是传奇最有韵味的隐藏地图:条件不明、入口隐秘,找到即是传说。隐藏地图的触发设计要把开启条件做成可…
实战应用:用在哪里 行会年度战报打包后仍有五百 KB,分包下发到第九包时玩家掉线,前功尽弃重来。分包进阶方案叠加断点续传与压…