Kibana Vega如何通过单次Elasticsearch聚合请求实现多图层数据绑定
配置实现方案
要实现单请求下两个图层分别读取不同聚合路径的数据,你需要取消顶层数据的固定根路径绑定,再分别为两个图层配置独立的数据转换规则,修改后的完整代码如下:
{ "$schema": "https://vega.github.io/schema/vega-lite/v2.json", "title": "Hat Sales", "data": { "url": { "index": "hat-sales", "body": { "size": 0, "query": {"match_all": {}}, "aggs": { "stores": {"terms": {"field": "store.keyword", "size": 3}}, "global": { "filters": { "filters": {"all": {"exists": {"field": "store.keyword"}}} }, "aggs": { "count": {"value_count": {"field": "store.keyword"}}, "unique_count": {"cardinality": {"field": "store.keyword"}}, "global_average": { "bucket_script": { "buckets_path": {"total": "count", "unique": "unique_count"}, "script": "params.total / params.unique" } } } } } } } }, "layer": [ { "name": "Sales of top 3 stores", "mark": "bar", "transform": [ {"flatten": ["aggregations.stores.buckets"]}, {"calculate": "datum.aggregations.stores.buckets.key", "as": "store"}, {"calculate": "datum.aggregations.stores.buckets.doc_count", "as": "count"} ], "encoding": { "x": {"type": "nominal", "field": "store", "sort": "-y"}, "y": {"type": "quantitative", "field": "count"} } }, { "name": "Average number of sales over all stores", "mark": {"type": "rule", "color": "red"}, "transform": [ {"calculate": "datum.aggregations.global.buckets.all.global_average", "as": "global_avg"} ], "encoding": { "y": {"type": "quantitative", "field": "global_avg"} } } ] }
关键调整说明
- 移除了顶层
data.format.property配置,不再固定数据根路径为门店分桶结果,保证可以访问到单次请求返回的所有聚合数据,全程仅发起1次ES查询,性能最优 - 将原本顶层的字段转换逻辑迁移到柱状图层内部,新增
flatten转换展开Top3门店的分桶数组,提取门店名称和销量字段 - 参考线图层新增独立转换规则,直接从全局聚合路径中提取全门店平均销量值,绑定到y轴即可自动生成横跨全图的红色水平参考线
内容的提问来源于stack exchange,提问作者Sean Letendre
相关产品推荐
相关产品推荐

