通过 SQL 实现在指标卡视图中展示同比和环比数值


Administrator
飞致云 发布于 2022-06-24 / 1528 阅读 / 0 评论 /
1 场景需求DataEase可以在柱状图中计算同环比,目前还不支持直接用指标卡来计算同环比展示下图的效果:那么我们可以先通过SQL完成同环比计算,然后使用指标卡来展示数值。2 实现方法2.1 准备演示数据以下数据是 记录每个月不同地区不同产品线的订单和月目标,我们将通过此数据表计算 ”每月目标“ 的

1 场景需求

DataEase 可以在柱状图中计算同环比,目前还不支持直接用指标卡来计算同环比展示下图的效果:
image-1656058777956

那么我们可以先通过 SQL 完成同环比计算,然后使用指标卡来展示数值。

2 实现方法

2.1 准备演示数据

以下数据是 记录每个月不同地区不同产品线的订单和月目标,我们将通过此数据表计算 ”每月目标“ 的月环比。
image-1656058786238

2.2 SQL计算过程

2.2.1 聚合日期

通过集合字段汇总每月目标总和:

select DATE_FORMAT(日期,'%Y-%m') as date, SUM(月目标) as 月目标 from xiaoshou GROUP BY date

image-1656058838081

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

image-1656058858805

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

image-1656058878417

说明: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

image-1656058904689

说明:对于 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

image-1656058931770

说明:

“t 月目标” “y 月目标” :分别代表当月目标和上月目标;

“t 月订单金额” “y 月订单金额” :分别代表当月订单和上月订单;

“t 完成率” “y 完成率” :分别代表当月完成率和上月完成率;

“月目标 ratio” “月订单 ratio” “完成率 ratio”:分别代表月目标环比、月订单环比、完成率环比。

4 DataEase 中展示效果

如下图所示:“订单金额”、“月目标”、“完成率”,三个指标卡视图,直接关联我们最终制作的数据集,将对应字段显示即可;

“订单金额”、“月目标”、“完成率”,三个指标卡视图下方的 “环比(月)” 关联我们最终制作的数据集对应的”月订单 ratio“、”月目标 ratio“、”完成率 ratio“;

最后添加一个”时间过滤组件“,这样选择月份,就可以显示当月的订单信息和月环比。

image-1656058997673

5 最终美化效果

通过添加边框、添加图片、设置数值阈值、文本组合,调整一下布局,效果如下:

image-1656059002590

注:以上 SQL 方法只做了环比计算,若需要做同比计算,思路一致,可自行调整 SQL。



是否对你有帮助?