1 场景需求
DataEase 可以在柱状图中计算同环比,目前还不支持直接用指标卡来计算同环比展示下图的效果:
那么我们可以先通过 SQL 完成同环比计算,然后使用指标卡来展示数值。
2 实现方法
2.1 准备演示数据
以下数据是 记录每个月不同地区不同产品线的订单和月目标,我们将通过此数据表计算 ”每月目标“ 的月环比。
2.2 SQL计算过程
2.2.1 聚合日期
通过集合字段汇总每月目标总和:
select DATE_FORMAT(日期,'%Y-%m') as date, SUM(月目标) as 月目标 from xiaoshou GROUP BY date
2.2.2 增加字段参考计算
我们在 “date” 和 “月目标” 字段后面再增加两个字段,分别表示 4 月、5 月、6 月、7 月的 “月目标”,用来做环比计算:
select DATE_FORMAT(DATE_ADD(日期,INTERVAL 1 MONTH),'%Y-%m') as date, SUM(月目标) as 月目标 from xiaoshou GROUP BY date
2.2.3 左连接整合数据
然后将两个表左连接,展示 3 月、4 月、5 月、6 月 、当月数据和上月数据:
select CONCAT(t.date,'-01') tdate ,t.月目标 t月目标 ,y.月目标 y月目标
from
(select DATE_FORMAT(日期,'%Y-%m') as date, SUM(月目标) as 月目标 from xiaoshou GROUP BY date) t
left JOIN
(select DATE_FORMAT(DATE_ADD(日期,INTERVAL 1 MONTH),'%Y-%m') as date, SUM(月目标) as 月目标 from xiaoshou GROUP BY date) y
on t.date = y.date
说明:t 月目标为当月数值,y 月目标为上月数值
2.2.4 计算环比
最后计算环比,(当月数值-上月数值)/上月数值:
select CONCAT(t.date,'-01') tdate ,t.月目标 t月目标 , y.月目标 y月目标 ,
case
when y.月目标 is null or y.月目标 = 0 then 0.00
else round((t.月目标 - y.月目标) / y.月目标 * 100, 2)
end ratio
from
(select DATE_FORMAT(日期,'%Y-%m') as date, SUM(月目标) as 月目标 from xiaoshou GROUP BY date) t
left JOIN
(select DATE_FORMAT(DATE_ADD(日期,INTERVAL 1 MONTH),'%Y-%m') as date, SUM(月目标) as 月目标 from xiaoshou GROUP BY date) y
on t.date = y.date
说明:对于 tdate 字段我们拼接为“年月日”格式,只是用于后面方便展示
3 深度应用
通过以上方法,我们计算出“月目标”的环比,原表中还有“订单金额”,可以使用同样的方法计算 “月订单金额” 的环比;
我们顺便再计算出 “订单完成率” 和 “完成率月环比”,在一条 SQL 中完成以上计算:
select CONCAT(t.date,'-01') tdate ,t.月目标 t月目标 , y.月目标 y月目标 , t.月订单金额 t月订单金额 , y.月订单金额 y月订单金额 , t.完成率 t完成率 , y.完成率 y完成率,
case
when y.月目标 is null or y.月目标 = 0 then 0.00
else round((t.月目标 - y.月目标) / y.月目标 * 100, 2)
end 月目标ratio ,
case
when y.月订单金额 is null or y.月订单金额 = 0 then 0.00
else round((t.月订单金额 - y.月订单金额) / y.月订单金额 * 100, 2)
end 月订单ratio ,
case
when y.完成率 is null or y.完成率 = 0 then 0.00
else round((t.完成率 - y.完成率) / y.完成率 * 100, 2)
end 完成率ratio
from
(select DATE_FORMAT(日期,'%Y-%m') as date, SUM(月目标) as 月目标, sum(订单金额) as 月订单金额 ,ROUND(SUM(月目标)/sum(订单金额)*100,2) as 完成率 from xiaoshou GROUP BY date) t
left JOIN
(select DATE_FORMAT(DATE_ADD(日期,INTERVAL 1 MONTH),'%Y-%m') as date, SUM(月目标) as 月目标 ,sum(订单金额) as 月订单金额 ,ROUND(SUM(月目标)/sum(订单金额)*100,2) as 完成率 from xiaoshou GROUP BY date) y
on t.date = y.date
说明:
“t 月目标” “y 月目标” :分别代表当月目标和上月目标;
“t 月订单金额” “y 月订单金额” :分别代表当月订单和上月订单;
“t 完成率” “y 完成率” :分别代表当月完成率和上月完成率;
“月目标 ratio” “月订单 ratio” “完成率 ratio”:分别代表月目标环比、月订单环比、完成率环比。
4 DataEase 中展示效果
如下图所示:“订单金额”、“月目标”、“完成率”,三个指标卡视图,直接关联我们最终制作的数据集,将对应字段显示即可;
“订单金额”、“月目标”、“完成率”,三个指标卡视图下方的 “环比(月)” 关联我们最终制作的数据集对应的”月订单 ratio“、”月目标 ratio“、”完成率 ratio“;
最后添加一个”时间过滤组件“,这样选择月份,就可以显示当月的订单信息和月环比。
5 最终美化效果
通过添加边框、添加图片、设置数值阈值、文本组合,调整一下布局,效果如下:
注:以上 SQL 方法只做了环比计算,若需要做同比计算,思路一致,可自行调整 SQL。