首页 > 解决方案 > 在从 Vega(在 Kibana 中)到 ElasticSearch 的聚合查询中使用动态变量

问题描述

我们有一个报告,它从弹性搜索中获取数据并将它们显示为存储桶。我们想显示每个波段的波段、客户和利润金额。这个想法是我们应该给出一个带大小参数,然后 Vega 应该在查询数据时为此创建 5 个桶。如果我提到带大小为 50,那么 vega 将在查询中传递它并创建存储桶 0-50、51 到 100、101 到 150、151 到 200 和 200+。我真的很挣扎,无法让它发挥作用。我在这里粘贴了使用硬编码值的 vega 脚本,但是当涉及到通过信号进行操作时,我根本没有任何线索。我想使用信号中的值来定义波段参数。请帮忙。

{
   "$schema":"https://vega.github.io/schema/vega/v4.json",
   "data":[
      {
         "name":"SalesData",
         "url":{
            "index":"orderaggregates",
            "body":{
               "size":0,
               "aggs":{
                  "bands":{
                     "range":{
                        "field":"total_sales",
                        "ranges":[
                           {
                              "from":0,
                              "to":50
                           },
                           {
                              "from":50.01,
                              "to":100
                           },
                           {
                              "from":100.01,
                              "to":150
                           },
                           {
                              "from":150.01,
                              "to":200
                           },
                           {
                              "from":200.01
                           }
                        ]
                     },
                     "aggs":{
                        "total_sales":{
                           "sum":{
                              "field":"total_sales"
                           }
                        },
                        "customers":{
                           "cardinality":{
                              "field":"user_id"
                           }
                        },
                        "confirmed_orders":{
                           "sum":{
                              "field":"confirmedorders"
                           }
                        },
                        "cost_total":{
                           "sum":{
                              "field":"cost_total"
                           }
                        },
                        "shipping_collected":{
                           "sum":{
                              "field":"freightcollected"
                           }
                        },
                        "shipping_paid":{
                           "sum":{
                              "field":"freight_paid"
                           }
                        }
                     }
                  }
               }
            }
         },
         "format":{
            "property":"aggregations.bands.buckets"
         },
         "transform":[
            {
               "type":"project",
               "fields":[
                  "key",
                  "doc_count",
                  "customers.value",
                  "cost_total.value",
                  "total_sales.value"
               ],
               "as":[
                  "range",
                  "orders",
                  "customers",
                  "costs",
                  "sales"
               ]
            },
            {
               "type":"identifier",
               "as":"id"
            },
            {
               "type":"formula",
               "as":"y",
               "expr":"datum.id * 30"
            },
            {
               "type":"formula",
               "as":"orders",
               "expr":"format(datum.orders,',.0f')"
            },
            {
               "type":"formula",
               "as":"customers",
               "expr":"format(datum.customers,',.0f')"
            },
            {
               "type":"formula",
               "as":"costs",
               "expr":"format(datum.costs,'$,.0f')"
            },
            {
               "type":"formula",
               "as":"sales",
               "expr":"format(datum.sales,'$,.0f')"
            }
         ]
      }
   ],
   "signals":[
      {
         "name":"Group",
         "value":40,
         "bind":{
            "input":"range",
            "min":10,
            "max":100,
            "step":10
         }
      },
      {
         "name":"GroupSize",
         "update":"Group/2"
      }
   ],
   "marks":[
      {
         "from":{
            "data":"SalesData"
         },
         "type":"text",
         "encode":{
            "enter":{
               "fill":{
                  "value":"#000"
               },
               "text":{
                  "field":"range"
               },
               "x":{
                  "value":50
               },
               "y":{
                  "field":"y"
               }
            },
            "update":{
               "opacity":{
                  "value":1
               },
               "fontSize":{
                  "signal":"GroupSize"
               }
            },
            "hover":{
               "opacity":{
                  "value":0.5
               }
            }
         }
      },
      {
         "from":{
            "data":"SalesData"
         },
         "type":"text",
         "encode":{
            "enter":{
               "fill":{
                  "value":"#000"
               },
               "text":{
                  "field":"customers"
               },
               "x":{
                  "value":250
               },
               "y":{
                  "field":"y"
               }
            },
            "update":{
               "opacity":{
                  "value":1
               },
               "fontSize":{
                  "signal":"GroupSize"
               }
            },
            "hover":{
               "opacity":{
                  "value":0.5
               }
            }
         }
      },
      {
         "from":{
            "data":"SalesData"
         },
         "type":"text",
         "encode":{
            "enter":{
               "fill":{
                  "value":"#000"
               },
               "text":{
                  "field":"orders"
               },
               "x":{
                  "value":350
               },
               "y":{
                  "field":"y"
               }
            },
            "update":{
               "opacity":{
                  "value":1
               },
               "fontSize":{
                  "signal":"GroupSize"
               }
            },
            "hover":{
               "opacity":{
                  "value":0.5
               }
            }
         }
      },
      {
         "from":{
            "data":"SalesData"
         },
         "type":"text",
         "encode":{
            "enter":{
               "fill":{
                  "value":"#000"
               },
               "text":{
                  "field":"sales"
               },
               "x":{
                  "value":450
               },
               "y":{
                  "field":"y"
               }
            },
            "update":{
               "opacity":{
                  "value":1
               },
               "fontSize":{
                  "signal":"GroupSize"
               }
            },
            "hover":{
               "opacity":{
                  "value":0.5
               }
            }
         }
      }
   ]
}

标签: elasticsearchvega-litevegakibana-7

解决方案


推荐阅读