美文网首页
Grafana 设置同比、环比报表

Grafana 设置同比、环比报表

作者: 青水山 | 来源:发表于2023-03-22 16:22 被阅读0次

一、定义

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,显示环比,同比的曲线方法。

相关文章

  • 33 Pandas计算同比环比指标的3种方法

    33 Pandas计算同比环比指标的3种方法 同比和环比:环比和同比用于描述统计数据的变化情况 环比:表示本次统计...

  • 2019-04-12

    一、“三比” 同比 同比 =本期数据 / 上年同期数据 环比 环比 = 本期数据 / 上期数据 定比 定比 = 本...

  • 日志分析图表:同比环比场景和TreeMap

    一. 同比环比场景应用 同比环比是日志分析中十分常见的场景,日志服务于7月推出同比环比函数,我们可以利用其强大的分...

  • 同比与环比

    环比增长率,就是按照时间的顺序来进行比较,今年和去年比,去年和前年比,不可以跨着比。 (一)本期环比增长(下降)率...

  • Tableau 同比、环比

    1. 环比 以示例-超市为例: 在聚合字段上右键-添加表计算-百分比差异。 环比公式: (ZN(SUM([销售额 ...

  • “环比”和“同比”

    小白的我,看来需要学习的东西还有很多。比如说,昨日看百度热点,“猪肉价格同比下降多少多少的”。 今天,突然较真下,...

  • 同比与环比

    1.同比相似重复的流程可以同比。比如,时段相似同比。周内5天的上午下午或晚上、周末的上午下午或晚上,都可以同比。又...

  • 16 游戏报表的制作---趋势判断

    同比 环比 定基比 时间序列 渠道对比

  • SQL 求同比 环比

    一、要求 1、表结构如下: IDDepartName(部门) Sales(销售量) SalesDate(销售日期)...

  • 同比、环比的区别

    名词解释:同比 同比,统计学术语,同比全称“同期比较”,即比较同一时期内不同年份的数据。同比是表示连续2个统计周期...

网友评论

      本文标题:Grafana 设置同比、环比报表

      本文链接:https://www.haomeiwen.com/subject/vnqbrdtx.html