【问题标题】:In InfluxDB: I am unable to convert an expression to an integerInfluxDB:我无法将表达式转换为整数
【发布时间】:2021-04-12 05:09:26
【问题描述】:

意图是Grafana 6.6.1 将从InfluxDb 1.8.2 查询这个

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

我在 CLI 中尝试了一些查询。在下面的 sn-ps 中,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() 不会返回整数。有关如何解决此问题的任何建议?


编辑

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

【问题讨论】:

    标签: grafana influxdb


    【解决方案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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 2019-10-30
      • 1970-01-01
      相关资源
      最近更新 更多