背景说明
做成本核算图表时需要统计每个月的总成本, 接口采集上来的数据是每个计费项一条数据, 所以需要按月进行分组统计成本.
InfluxDB FLUX语句
import "regexp"
from(bucket: "myCost")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "cost")
|> map(fn: (r) => ({r with billingMonth: regexp.replaceAllString(r: /-[0-9]{2}$/, v: r.billingDate, t: "")}))
|> group(columns: ["billingMonth"])
|> sum(column: "_value")
这里的billingMonth是个临时字段
Grafana配置
使用上列语句选择Bar chart模版无法正常出图, 显示的效果如下:
因为经过billingMonth分组所以需要选择分组信息才能查到对应月份的数据
使用Labels to fields将标签的时间序列结果转换为一个表格, 其中每个标签的键和值都包含在表格结果中, 处理结果如下图所示:
此时仍然需要选择不同的月份来查看数据, 可以使用merge工具将多个月份的数据合并到一个表格中, 效果如下图所示:
此时点击Table view取消查看表格, 可以看到图表已经可以正常展示, 如下:
但是还有个问题, 鼠标移动到图表位置显示的数值是0, 此时可以使用Organize fields进行重命名, 重新排序, 隐藏等操作
将_value列拖到下边最终Transform结果如下:
最终完成图表绘制
注意: 如果在绘制图表的过程中遇到grafana bar chart no numeric fields found这个提示, 且确认使用的是字段值是数字, 有可能是因为字段值是数字字符串, 可以使用Convert field type转换字段类型