一、定义
1、环比
相邻时间段的数据对比,如4点和3点数据对比。
2、同比
相邻时段中某一相同时间点进行比较。如何今天的2月份销售数据,与去年的2月份销售数据对比。
二、Grafana 数据源
所谓报表,就需要有数据,数据从哪里来?
就是我们需要设置Grafana 数据源。
Grafana 数据源 支持多种。如:prometheus,ES,Clickhouse,MySQL等很多种。
本文主要讲解以MySQL作为数据源。
1、设置数据源
image.png如上,在Configuration 中,找到 Data sources,新增一个“ add data sources”
选择一个数据源类型,我们选择 MySQL,进入配置项。
根据提示,配置MySQL的地址、端口,用户密码登。(你的报表数据已提前生成在MySQL里)。
配置完成后,“save & test”,如果配置正确,数据库链接正常,则测试通过。
2、环比报表
环比,根据前面的定义,相邻时间段的数据对比,换句话实际就是每个时间段的连续的曲线变化,通常情况下一个实体就是一条曲线。
新建一个报表Panel,选择数据源为之前设置的数据源,“MySQL-dba”,编写SQL:
image.png
SELECT
unix_timestamp(pt) AS "time",
domain AS metric,
avg(total) AS "total"
FROM tbname
WHERE
$__timeFilter(pt) and domain='xxx公司'
GROUP BY 1,2
其中:
$__timeFilter(pt) ,是数据查询范围,根据右上角选择的时间范围,自动变化。
unix_timestamp(pt) AS "time", 是时间轴,这是曲线图必须要有的Time series。如果在MySQL中,字段类型不是timestamp 格式,还需要使用unix_timestamp进行转换。
domain AS metric, 为“xxx 曲线”,本例中这条曲线就是xxx公司,如果多个公司,则显示为多条曲线。
avg(total) AS "total",聚合字段,根据需要选择聚合函数。
3、同比报表
根据定义,相邻时段中某一相同时间点进行比较。在时间轴上同一个时间点要进行对比,那么最少得有2条曲线,也就是至少需要2个SQL来完成。
SQL1 - 本期数据:
同环比的sql一致,如下
SELECT
unix_timestamp(pt) AS "time",
avg(total) AS "本期销售 total"
FROM tbname
WHERE
$__timeFilter(pt) and domain='xxx公司'
GROUP BY 1,2
同理, $__timeFilter(pt) 限制了该同比图表显示数据的范围。
SQL2 - 上期数据(N天前):
这个N 可以为自定义变量,在报表的右上角,选择 dashboard settings,
找到变量设置variables下,新增一个变量。其中Type选择常量类型。
image.png
设置以后,回到报表页面,可以看到该变量下拉选择框。
image.png
编辑报表,增加一个Query。
由于SQL1已经限制了显示数据的时间范围,那么,对于这个上期数据的对比曲线,是否还需要增加时间范围的限制呢?
答案是不需要的。因为SQL2要显示的数据范围是固定的,就是N天前的数据,
所以:
SELECT
unix_timestamp(pt) AS "time",
avg(total) AS "上期销售total($days 天前)"
FROM tbname
WHERE
domain='xxx公司'
GROUP BY 1,2
那么这个sql 对不对?看看曲线,会发现两条曲线重合为一条曲线了,因为显示的数据是一样的。
image.png
再回想下,我们需要的是什么?
我们需要的是,比如时间轴的12点上,显示2个点数据,一个是本期数据,已经有了,另一个是上期数据,就是N天前的数据,那如何把N天前的12点这个数据显示在时间轴的今天的12点上呢?
我们需要对这个SQL2进行改造,把N天前的数据往后推迟,也就是时间加N天,如下:
SELECT
unix_timestamp(DATE_ADD(pt, INTERVAL $days day)) AS "time",
sum(total) AS "上期销售total($days 天前)"
FROM wifi_nginx_tj_hour
WHERE
domain='xxx公司'
GROUP BY 1
在Select 时候,把数据的日期强制增加N 天,DATE_ADD(pt, INTERVAL $days day)
$days 就是我们前面定义的变量。
再来看看曲线,会出现2条曲线,只是本期数据和N天前数据比较接近。
image.png
好了,这就是Grafana如何从MySQL,显示环比,同比的曲线方法。
网友评论