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

如何在KQL的where子句中使用带多值与全部选项的Grafana变量

解决Grafana多值变量(含「全部」选项)在KQL中的适配问题

问题场景

配置了支持多值与「全部」选项的Grafana变量,变量展开后有两种形式:

  • 选择具体值时:'42','54'(带单引号的多值,可直接用于in子句)
  • 选择「全部」时:*(不带引号的星号)

之前的两种写法均存在问题:

  1. 直接使用x in($var),选「全部」时会生成x in(*),违反KQL语法
  2. 用x in("${var}"),选具体值时会生成x in("'42','54'"),被识别为单个字符串,无法匹配多值

解决方案

方案1:字符串处理适配原有变量格式

无需修改Grafana变量配置,直接通过KQL的字符串函数处理变量值:

foo
| where 
    "${var}" == "*" 
    or x in(split(replace_string("${var}", "'", ""), ","))

原理:

  • 选「全部」时,"${var}" == "*"条件成立,返回所有数据
  • 选具体值时,replace_string去掉所有单引号,将'42','54'转为42,54;split按逗号分割成数组["42","54"],x in即可匹配多个值

如果字段x是数字类型,需将数组转换为对应类型:

foo
| where 
    "${var}" == "*" 
    or x in(tolong(split(replace_string("${var}", "'", ""), ",")))

方案2:调整Grafana变量格式(更优雅)

修改Grafana变量的Multi-value format为JSON,并将「全部」选项的自定义替换值设为[](空数组):

  • 选具体值时,变量展开为["42","54"]
  • 选「全部」时,变量展开为[]

然后使用如下KQL查询:

let selected_values = dynamic(${var});
foo
| where array_length(selected_values) == 0 or x in(selected_values)

原理:

  • 选「全部」时,array_length(selected_values) == 0条件成立,返回所有数据
  • 选具体值时,dynamic(${var})直接解析为字符串数组,x in可直接匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:57:23