在 InfluxDB 中:我无法将表达式转换为整数

In InfluxDB: I am unable to convert an expression to an integer

目的是Grafana 6.6.1将从InfluxDb 1.8.2

查询这个

我想根据在仪表板中选择的时间段 $timeFilter 使用 moving_average() 功能。

我在 CLI 中尝试了一些查询。在以下代码片段中,time > '2020-10-27' 将在 Grafana 中替换为 $timeFilter

查询 1:

SELECT  round(count("Temp")*0.1)  FROM "Consumption" WHERE time > '2020-10-27'

输出:

name: Consumption
time                           round
----                           -----
2020-10-27T00:00:00.000000001Z 7

查询 2:

SELECT moving_average("Temp", 7) FROM "Consumption" WHERE time > '2020-10-27'

输出:

name: Consumption
time                 moving_average
----                 --------------
2020-11-03T00:00:00Z 7.535714285714286
2020-11-04T00:00:00Z 7.184528571428571
2020-11-05T00:00:00Z 6.833342857142857
2020-11-06T00:00:00Z 7.303585714285714
.....etc

但是,我无法合并这些查询

查询 3:

SELECT moving_average("Temp", round(count("Temp")*0.1)) FROM "Consumption" WHERE time > '2020-10-27'

输出:

ERR: second argument for moving_average must be an integer, got *influxql.Call

所以我猜 round() 不是 return 整数。关于如何解决这个问题有什么建议吗?


编辑

奖金问题:如何确保 moving_average() 中的第二个参数永远不会低于 1。如果选择较短的时间跨度,则应为 1

好吧,我现在开始工作了。

在 Grafana 中,我向仪表板添加了一个变量。

变量

Name: MyRollingAvgValueType: QueryHide: VariableRefrech: on time range change

以及变量的查询本身:

SELECT mean(MyVal::integer) As MyRollingAvg FROM 
( SELECT 1+round(count("Temp")*0.1) as MyVal FROM "Consumption" WHERE $timeFilter )

仪表板中的面板

查询选项卡

SELECT moving_average("Temp", $MyRollingAvgValue) FROM "Consumption" WHERE $timeFilter

ALIAS BY: °C ($MyRollingAvgValue day avg)

可视化选项卡

  • Add series override

alias or regex --> /.*day avg/