You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Elasticsearch Kibana仪表板表格中获取全局字段唯一计数

问题描述

数据结构

我在Elasticsearch中存储的数据格式如下:

[
    {
        "name": "Alice",
        "fruit": "apple",
        "time": "13:00"
    },
    {
        "name": "Alice",
        "fruit": "apple",
        "time": "14:00"
    },
    {
        "name": "Alice",
        "fruit": "banana",
        "time": "15:00"
    },
    {
        "name": "Bob",
        "fruit": "apple",
        "time": "13:00"
    }
]

当前已实现的表格

我在Kibana仪表板中创建了表格,展示每个人食用的唯一水果数量:

NameUnique count of fruit
Alice2
Bob1

需求

我想计算每个人食用的水果占全局已知水果总数的比例,期望得到如下表格:

NameUnique count of fruitPortion of fruit
Alice21
Bob10.5

尝试的方法及错误结果

这需要获取所有记录中水果的全局唯一计数,我尝试在表格中添加指标,设置公式为:

unique_count(fruit) / overall_sum(unique_count(fruit))

但overall_sum只是将每行的唯一计数值相加,得到错误结果:

NameUnique count of fruitPortion of fruit
Alice20.67
Bob10.33

由于每行的唯一计数并非互斥,不能直接求和。但仪表板表格提供的公式均为行级或列级操作,我尚未找到获取整个数据视图唯一计数的方法。

解决方案

要实现这个需求,你需要在Kibana的表格可视化中使用管道聚合来获取全局唯一水果总数,具体步骤如下:

  1. 编辑目标表格可视化,进入「数据」配置界面
  2. 保留原有的unique_count(fruit)指标(可重命名为Unique count of fruit)
  3. 添加新的「指标」,选择聚合类型为Bucket script
    • 在「脚本」输入框中填写:params.user_unique / params.global_unique
    • 在「字段」区域添加两个参数:
      • 参数名设为user_unique,关联已有的unique_count(fruit)指标
      • 参数名设为global_unique,点击「添加指标」,选择聚合类型为Unique count,字段选fruit,并在「范围」选项中选择「全局(所有数据)」
  4. 将这个新指标重命名为Portion of fruit,按需调整小数位数
  5. 保存并更新可视化,即可得到预期结果

核心逻辑:通过全局范围的唯一计数聚合,获取所有数据中不重复的水果总数(示例中为2),再用每个人的唯一水果数除以这个全局值,得到正确的占比。

内容的提问来源于stack exchange,提问作者Zhaobo Ding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:43:35