日常运营数据统计实践

    科技2024-08-20  22

    日常运营需要大量的数据用作业务分析以及决策,涉及的指标众多,最常见的指标类似销售的环比和同比。我们常用来计算环比和同比的公式如下:

    环比增长率 =(当前周期数 - 上一周期数)/ 上一周期数 * 100% 同比增长率 =(当前周期数 - 历史同期数)/ 历史同期数 * 100%

    从以上公式可以看出,两个指标的计算需要知道当前周期数据、上一周期数据以及历史同期数。我们以月的维度来简单阐述下三个指标:当前周期的数据=当月1号至今的累计数据、上一周期数据=上月相同天数累计数据、历史同期数据=上一年同一月相同天数累计数据。如果是完整月份,则为两个满月的对比(注意存在大小月)。

    上面描述的概念性的东西,相信大家都已经明白。下面进入本期主要内容,环比同比指标统计的实现设计。从上面的概念描述,我们可以概况性的看到,其实当前周期数、环比和同比的共通点是,均为时间范围内的数据统计,差异点是统计数据时间范围的不同。由此,我们设计了以下的时间范围R表来描述需求,以周月为例。

    统计时间

    类型

    当前周期开始时间

    当前周期结束时间

    环比同期开始时间

    环比周期结束时间

    同比周期开始时间

    环比周期结束时间

    2020-10-02

    2020-09-28

    2020-10-02

    2020-09-21

    2020-09-25

    2019-09-30

    2019-10-04

    2020-10-02

    2020-10-01

    2020-10-02

    2020-09-01

    2020-09-02

    2019-10-01

    2019-10-02

    有了以上时间范围表,我们需要做的则是将业务数据根据不同的时间范围打宽,并且根据需求汇总。举实际栗子说明,我们有以下数据,需要汇总统计本周以及本月的累计数量。业务数据S表如下:

    业务时间

    业务编号

    数量

    2020-09-28

    0000092201

    50

    2020-10-01

    0000100101

    100

    2020-10-01

    0000100102

    200

    2020-10-02

    0000100201

    80

    2020-10-02

    0000100202

    60

    ……

    ……

    ……

    ……

    ……

    ……

    结合统计时间范围R表,我们可方便的统计当前周期、环比和同比的累计数量,当前周期累计数量参考以下脚本,环比和同比累计数量可类似统计。

    Select R.统计时间, R.类型, SUM(S.数量) AS 当前周期数量 FROM R LEFT JOIN S ON 1=1 Where R.统计时间=今日 AND S.业务时间 between R.当前周期开始时间 to R.当前周期结束时间 GROUP BY R.统计时间,R.类型

    数据统计完成后的下一步是呈现。在实际应用中,数据会达到亿级,为了提高读取性能,减少库表的关联聚合等操作,我们可将数据按如下库表设计存储,从实际应用场景统计,可满足90%以上的数据展示需求。

    统计时间

    类型

    当前周期数据

    环比周期数量

    同比周期数量

    2020-10-02

     

     

     

    2020-10-02

     

     

     

    回顾一下,以上描述的环比和同比数据统计思路,我们首先为批量业务数据打上相应的标记位,接着根据标志位做需求维度的汇总计算,最后按照大宽表的格式存储统计结果。数据标志位的思想,在一定程度上简化了数据统计思路,优雅的解决日常一些数据统计问题。

    作者:江沛

    Processed: 0.012, SQL: 8