Grafana单查询返回两个绝对值如何转换为百分比值展示
Grafana单查询返回双绝对值转百分比的兼容方案(无需依赖
asPercents()函数) 以下方案全版本通用,按落地稳定性从高到低排序:
- 查询层直接计算(优先选,无版本兼容问题)
跳过Grafana侧的函数依赖,直接在对应数据源的查询语句里完成百分比计算,是最稳定的实现方式:- Prometheus类时序数据源:假设查询返回的两个绝对值序列分别为
value_1、value_2,如果要算单个值占总和的比例,直接写value_1 / (value_1 + value_2) * 100即可,返回结果直接为百分比数值;如果是部分值除以总值的场景,替换分母为对应总值序列就行。 - SQL类数据源(MySQL/PostgreSQL/ClickHouse等):直接在SELECT子句中做除法运算,例如
SELECT (success_count / total_count)*100 AS percentage FROM your_data_table,注意数值类型字段计算时做好浮点转换,避免整数除法丢精度。 - 其他数据源同理,只要支持基础四则运算,都可以直接在查询阶段输出最终需要的百分比值,不需要在Grafana侧做二次转换。
- Prometheus类时序数据源:假设查询返回的两个绝对值序列分别为
- Grafana内置转换功能实现(7.0及以上版本全支持)
如果数据源侧不方便改查询,可以用面板自带的转换功能实现,不需要依赖任何版本专属函数:- 打开面板编辑页,切换到「Transform」标签
- 先添加
Merge转换,将单条查询返回的2个独立结果合并为同一行的结构化数据 - 再添加
Add field from calculation转换,模式选择Binary operation - 按计算逻辑选对应字段做运算:分子选要计算占比的绝对值字段,分母选两个值的总和(或对应基准值字段),运算式最后乘100,给新生成的字段设置别名为「百分比」
- 最后添加
Organize fields转换,把原始的两个绝对值字段设置为隐藏,仅保留生成的百分比字段用于面板展示和绘图即可。
- 超旧版本兼容方案(6.x及更早无Transform功能的版本)
如果是没有内置转换功能的老版本,可以直接在查询编辑器里新增表达式序列:给两个原始绝对值设置固定别名后,新增一个表达式类型的查询项,直接引用两个别名做四则运算算百分比,把原始绝对值序列的绘图开关关掉,仅保留计算出的百分比序列用于展示即可。
计算注意:如果是要展示两个值各自占两者总和的比例,需要分别计算两个百分比序列:
值A/(值A+值B)*100、值B/(值A+值B)*100;如果是部分值相对于固定总值的占比,直接替换分母为对应总值即可,计算时注意处理分母为0的异常场景,避免面板出现无效空值。
内容的提问来源于stack exchange,提问作者Eugene Dobrovlskyi
相关产品推荐
相关产品推荐

