Grafana需求:按A分组展示B的最大值及对应C、D字段
解决Grafana+Elasticsearch分组取最大值并关联对应字段的问题
方法一:直接用Elasticsearch的Top Hits聚合(推荐)
这种方法无需依赖Grafana转换,直接在查询层面获取目标数据,效率更高:
- 在Grafana的Elasticsearch查询面板,先添加Terms聚合,字段选择
A作为分组依据 - 在该Terms聚合下,添加Top Hits子聚合:
- 设置
Size为1(仅取每个分组的第一条数据) - 排序规则选择字段
B,排序方向设为降序(这样就能拿到每个A分组下B值最大的完整文档)
- 设置
- 返回Grafana字段配置界面,勾选需要展示的
A、B、C、D字段,即可直接得到按A分组、显示最大B值及对应C/D的表格
方法二:调整Grafana转换逻辑适配Join
如果坚持使用Join By Field转换,可通过以下步骤解决列名不匹配问题:
- 第一步完成分组聚合:按
A分组,计算B的最大值,此时会得到A和Max两列 - 添加Add Field from calculation转换:
- 新增字段名设为
B,计算公式填写${Max},将Max列的值复制到新的B列中
- 新增字段名设为
- 添加Join By Field转换:
- 左数据源选择分组后的结果,右数据源选择原始Elasticsearch数据
- 关联字段两边均选择
A和B(此时两边都有B字段,可正常匹配)
- 最后用Organize fields转换移除多余的
Max列,再通过Filter data by query过滤重复行(例如保留B等于Max的行)
内容的提问来源于stack exchange,提问作者martha.j.p
相关产品推荐
相关产品推荐

