在Grafana单个面板中实现多维度筛选时序图是否可行?
单个Grafana面板实现动态分组的平均薪资时序图
完全可以在单个面板中实现这个需求,核心是通过Grafana自定义变量结合条件查询逻辑,让面板根据用户选择的筛选值自动切换分组维度和数据展示逻辑。以下是具体实现步骤:
1. 创建自定义筛选变量
进入仪表盘设置,添加一个自定义类型变量,命名为selected_filter:
- 手动填入所有需要的筛选选项,比如:
male、female、20-30、30-40、40-50 - 可选:给选项添加分组标签(如
[[性别筛选]]、[[年龄段筛选]]),方便用户快速区分选项类型
2. 编写带条件分支的查询
根据你使用的数据源编写条件查询,以下以SQL类数据源(如PostgreSQL)为例:
{{ if in $selected_filter "male" "female" }} -- 选择性别时:按时间+年龄段分组,计算对应性别的平均薪资 SELECT $__timeGroup(record_time, '1d'), -- 按天聚合,可根据需求调整时间粒度 age_range AS "series", AVG(salary) AS "avg_salary" FROM your_table WHERE sex = '$selected_filter' GROUP BY $__timeGroup(record_time, '1d'), age_range ORDER BY $__timeGroup(record_time, '1d') {{ else }} -- 选择年龄段时:按时间+性别分组,计算该年龄段的男女平均薪资 SELECT $__timeGroup(record_time, '1d'), sex AS "series", AVG(salary) AS "avg_salary" FROM your_table WHERE age_range = '$selected_filter' GROUP BY $__timeGroup(record_time, '1d'), sex ORDER BY $__timeGroup(record_time, '1d') {{ end }}
如果使用Prometheus等时序数据库,可通过label_match和条件聚合函数实现类似逻辑,核心思路是根据变量值切换聚合维度。
3. 面板配置优化
- 选择时序图作为面板类型,将查询返回的
avg_salary设为Y轴数值,时间字段设为X轴 - 在图例设置中,将
series字段设为图例名称,这样选择性别时图例显示各年龄段,选择年龄段时图例显示男女 - 可调整Y轴单位为薪资对应的货币单位(如
¥或$),提升可读性
关键注意事项
- 确保变量选项与数据中
sex、age_range的取值完全一致,避免查询无结果 - 时间聚合粒度(如示例中的
1d)可根据数据更新频率调整为1h、7d等 - 若需支持多值选择,可调整变量类型为“多选”,同时修改查询中的
WHERE条件为IN语句
内容的提问来源于stack exchange,提问作者Shiqi Cao
相关产品推荐
相关产品推荐

