写点什么

使用 SQL 实现同比环比分析

  • 2022-12-30
    北京
  • 本文字数:1180 字

    阅读完需:约 4 分钟

使用 SQL 实现同比环比分析

场景描述

在做数据分析时,经常会需要展示同比和环比的数据,可以通过 SQL 来完成同比和环比的计算,再配合数据可视化工具进行展示,每个月都会自动展示当月数据与上月的对比(环比),以及当月数据与去年同期数据的对比(同比)。

效果展示

我先看一下将同比、环比的数据放到数据看板上的效果图:



上图是将某公司的销售数据做了同比和环比分析后,通过报表展示出来的效果,包含:线上线下销量的同比环比、各大区的销量月环比。

实现过程

测试数据预览

以下是我们分析的原始数据,数据来源于真实业务记录,所以部分数据进行了遮挡处理;


我们重点关注的数据:


  1. 每条数据代表一单销售业绩;

  2. “类型” 包含线上、线下;

  3. “成交日期” 是分析依据;

  4. “大区” 也是要分析的内容。


SQL 实现过程

我们以 “线上销量的月环比” 做 SQL 实现步骤讲解


先统计每个月的线上销量


select DATE_FORMAT(日期,'%Y-%m') as date, count(*) as 累计销量 from renwu where 类型 = '线上' GROUP BY date
复制代码



我们需要在每个月累计销量 后面 显示一列上月的销量:


select t.date tdate ,t.累计销量 本月销量 ,y.累计销量 上月销量
from
(select DATE_FORMAT(日期,'%Y-%m') as date, count(*) as 累计销量 from renwu where 类型 = '线上' GROUP BY date) t
left JOIN
(select DATE_FORMAT(DATE_ADD(日期,INTERVAL 1 MONTH),'%Y-%m') as date, count(*) as 累计销量 from renwu where 类型 = '线上' GROUP BY date) y
on t.date = y.date
复制代码



最后就可以通过 “本月销量” 和 “上月销量” 计算环比了;


计算公式为:(本月销量 - 上月销量) / 上月销量 *100%


select t.date tdate ,t.累计销量 本月销量 ,y.累计销量 上月销量,case
when y.累计销量 is null or y.累计销量 = 0 then 0.00
else round((t.累计销量 - y.累计销量) / y.累计销量, 4)
end ratio
from
(select DATE_FORMAT(日期,'%Y-%m') as date, count(*) as 累计销量 from renwu where 类型 = '线上' GROUP BY date) t
left JOIN
(select DATE_FORMAT(DATE_ADD(日期,INTERVAL 1 MONTH),'%Y-%m') as date, count(*) as 累计销量 from renwu where 类型 = '线上' GROUP BY date) y
on t.date = y.date
复制代码



计算结果中的 “ratio” 就是计算的环比,这里保留了 4 位小数,是为了在报表中转化为百分比再保留两位小数。


我们只需要展示最新月份的环比,所以不需要把所有数据都列出来,只需要展示最新月份的一条数据即可,做最后的优化:



以上是环比计算的过程,同比计算只需要将增加的 “上月数据” 改为 “去年数据“ 即可


”DATE_FORMAT(DATE_ADD(日期,INTERVAL 1 MONTH),'%Y-%m')” 改为 ”DATE_FORMAT(DATE_ADD(日期,INTERVAL 1 YEAR),'%Y-%m')”
复制代码

展示同比环比

在 DataEase 的仪表板编辑界面,将 SQL 的计算数据放到一个指标卡中显示即可,显示类型选择为 百分比显示,效果如下:


最终数据展示看板


以上看板展示工具为:DataEase

用户头像

还未添加个人签名 2022-12-26 加入

还未添加个人简介

评论

发布
暂无评论
使用 SQL 实现同比环比分析_数据可视化_搞大屏的小北_InfoQ写作社区