1 场景需求 {#1-%E5%9C%BA%E6%99%AF%E9%9C%80%E6%B1%82}
DataEase 可以在柱状图中计算同环比,目前还不支持直接用指标卡来计算同环比展示下图的效果:
那么我们可以先通过 SQL 完成同环比计算,然后使用指标卡来展示数值。
2 实现方法 {#2-%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%B3%95}
2.1 准备演示数据 {#2.1-%E5%87%86%E5%A4%87%E6%BC%94%E7%A4%BA%E6%95%B0%E6%8D%AE}
以下数据是 记录每个月不同地区不同产品线的订单和月目标,我们将通过此数据表计算 "每月目标" 的月环比。
2.2 SQL计算过程 {#2.2-sql%E8%AE%A1%E7%AE%97%E8%BF%87%E7%A8%8B}
2.2.1 聚合日期 {#2.2.1-%E8%81%9A%E5%90%88%E6%97%A5%E6%9C%9F}
通过集合字段汇总每月目标总和:
select DATE_FORMAT(日期,'%Y-%m') as date, SUM(月目标) as 月目标 from xiaoshou GROUP BY date
2.2.2 增加字段参考计算 {#2.2.2-%E5%A2%9E%E5%8A%A0%E5%AD%97%E6%AE%B5%E5%8F%82%E8%80%83%E8%AE%A1%E7%AE%97}
我们在 "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 左连接整合数据 {#2.2.3-%E5%B7%A6%E8%BF%9E%E6%8E%A5%E6%95%B4%E5%90%88%E6%95%B0%E6%8D%AE}
然后将两个表左连接,展示 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 计算环比 {#2.2.4-%E8%AE%A1%E7%AE%97%E7%8E%AF%E6%AF%94}
最后计算环比,(当月数值-上月数值)/上月数值:
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 深度应用 {#3-%E6%B7%B1%E5%BA%A6%E5%BA%94%E7%94%A8}
通过以上方法,我们计算出"月目标"的环比,原表中还有"订单金额",可以使用同样的方法计算 "月订单金额" 的环比;
我们顺便再计算出 "订单完成率" 和 "完成率月环比",在一条 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 中展示效果 {#4-dataease-%E4%B8%AD%E5%B1%95%E7%A4%BA%E6%95%88%E6%9E%9C}
如下图所示:"订单金额"、"月目标"、"完成率",三个指标卡视图,直接关联我们最终制作的数据集,将对应字段显示即可;
"订单金额"、"月目标"、"完成率",三个指标卡视图下方的 "环比(月)" 关联我们最终制作的数据集对应的"月订单 ratio"、"月目标 ratio"、"完成率 ratio";
最后添加一个"时间过滤组件",这样选择月份,就可以显示当月的订单信息和月环比。
5 最终美化效果 {#5-%E6%9C%80%E7%BB%88%E7%BE%8E%E5%8C%96%E6%95%88%E6%9E%9C}
通过添加边框、添加图片、设置数值阈值、文本组合,调整一下布局,效果如下:
注:以上 SQL 方法只做了环比计算,若需要做同比计算,思路一致,可自行调整 SQL。