You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Grafana仪表盘中实现多时序信号的条件判断逻辑?

实现逻辑的两种最优方案

根据你的需求,分别查询A、B、C标签后在Grafana中实现状态计算,推荐以下两种方案:

方案一:Transform + 计算字段(适合可视化前的数据预处理)

  1. 调整查询语句:
    分别为A、B、C编写SQL查询,确保每个查询返回DateTime和对应标签的数值(重命名列避免冲突),示例:

    -- 查询标签A的时序数据
    SET NOCOUNT ON
    DECLARE @StartDate DateTime
    DECLARE @EndDate DateTime
    SET @StartDate = DateAdd(mi,-5,GetDate())
    SET @EndDate = GetDate()
    SET NOCOUNT OFF
    
    SELECT  DateTime, Value AS A_Value
    FROM (
        SELECT History.TagName, DateTime, Value, vValue, StartDateTime
        FROM History
        WHERE History.TagName IN ('A')
        AND wwRetrievalMode = 'Cyclic'
        AND wwCycleCount = 100
        AND wwVersion = 'Latest'
        AND DateTime >= @StartDate
        AND DateTime <= @EndDate) temp 
    WHERE temp.StartDateTime >= @StartDate
    

    同理修改B、C的查询,分别返回DateTime, B_Value和DateTime, C_Value。

  2. 合并时序数据:
    在Grafana的Transform面板中,添加Merge转换,将三个查询的结果按DateTime字段合并,生成包含DateTime、A_Value、B_Value、C_Value的统一数据集。

  3. 添加计算字段实现逻辑:
    继续添加Add field from calculation转换,设置:

    • 字段名称:Status
    • 表达式:if($A_Value > 0, if($B_Value > $C_Value, 1, 0), 0)
      该表达式会逐行计算状态值,完全匹配你需要的逻辑。

方案二:Grafana表达式(适合时序数据的实时计算)

如果你的数据是标准时序格式(带时间戳的数值序列),可以直接用Grafana的表达式功能实现逐点计算:

  1. 创建三个查询分别获取A、B、C的时序数据,记下每个查询的ID(比如Q0、Q1、Q2)。
  2. 新增一个Expression查询,输入以下表达式:
    $Q0 > 0 and $Q1 > $Q2 ? 1 : 0
    
    这里$Q0、$Q1、$Q2对应A、B、C的查询ID,表达式会自动对齐三个时序的时间戳,逐点输出状态值。

额外优化:SQL层面直接计算(性能更优)

如果允许在SQL中一次性处理,推荐用CTE关联三个标签的数据,直接计算Status,减少Grafana端的处理压力:

SET NOCOUNT ON
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
SET @StartDate = DateAdd(mi,-5,GetDate())
SET @EndDate = GetDate()
SET NOCOUNT OFF

WITH TagA AS (
    SELECT DateTime, Value AS A_Value
    FROM (
        SELECT DateTime, Value, StartDateTime
        FROM History
        WHERE TagName = 'A'
        AND wwRetrievalMode = 'Cyclic'
        AND wwCycleCount = 100
        AND wwVersion = 'Latest'
        AND DateTime >= @StartDate
        AND DateTime <= @EndDate
    ) temp
    WHERE temp.StartDateTime >= @StartDate
),
TagB AS (
    SELECT DateTime, Value AS B_Value
    FROM (
        SELECT DateTime, Value, StartDateTime
        FROM History
        WHERE TagName = 'B'
        AND wwRetrievalMode = 'Cyclic'
        AND wwCycleCount = 100
        AND wwVersion = 'Latest'
        AND DateTime >= @StartDate
        AND DateTime <= @EndDate
    ) temp
    WHERE temp.StartDateTime >= @StartDate
),
TagC AS (
    SELECT DateTime, Value AS C_Value
    FROM (
        SELECT DateTime, Value, StartDateTime
        FROM History
        WHERE TagName = 'C'
        AND wwRetrievalMode = 'Cyclic'
        AND wwCycleCount = 100
        AND wwVersion = 'Latest'
        AND DateTime >= @StartDate
        AND DateTime <= @EndDate
    ) temp
    WHERE temp.StartDateTime >= @StartDate
)
SELECT 
    COALESCE(a.DateTime, b.DateTime, c.DateTime) AS DateTime,
    CASE 
        WHEN a.A_Value > 0 AND b.B_Value > c.C_Value THEN 1
        ELSE 0
    END AS Status
FROM TagA a
FULL JOIN TagB b ON a.DateTime = b.DateTime
FULL JOIN TagC c ON COALESCE(a.DateTime, b.DateTime) = c.DateTime
ORDER BY DateTime

内容的提问来源于stack exchange,提问作者Nili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 00:11:30