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

如何在Superset中实现按季度的滚动去重计数(Rolling COUNT_DISTINCT)?

在Superset中实现按季度滚动去重计数

需求背景

当前使用Superset的Big Number with Timetrend图表,基于create_date字段按季度(Quarter)统计唯一id的数量(COUNT_DISTINCT(id)),需要修改为滚动去重计数——即统计从最早季度到当前季度的所有唯一id总数,而非单季度的去重数量。

实现方案

由于原数据集被多个图表共用,推荐使用虚拟数据集的方式实现,避免修改原数据集影响其他图表;也可通过自定义SQL指标直接在原图表中修改。

方案一:创建虚拟数据集(推荐)

此方法生成独立的统计数据集,不影响原数据集的其他使用:

  1. 进入Superset的Datasets页面,点击+ Dataset,选择SQL Query类型
  2. 输入以下SQL(替换your_table_name为实际表名):
SELECT
  -- 将季度转换为标准日期格式,方便Superset识别时间轴
  TO_DATE(quarter || '-01', '"YYYY"Q"Q"-DD') AS quarter_start_date,
  quarter,
  -- 计算当前及之前所有季度的唯一id总数
  (SELECT COUNT(DISTINCT id) FROM your_table_name WHERE quarter <= t.quarter) AS rolling_distinct_id_count
FROM (
  -- 先提取所有唯一的季度
  SELECT DISTINCT quarter FROM your_table_name
) t
ORDER BY quarter_start_date
  1. 保存虚拟数据集(如命名为滚动季度唯一ID统计)
  2. 基于该虚拟数据集创建Big Number with Timetrend图表:
    • 时间轴选择quarter_start_date
    • 时间粒度保持Quarter
    • 指标选择rolling_distinct_id_count

方案二:自定义SQL指标(直接修改原图表)

如果不想创建新数据集,可直接在原图表的指标配置中替换为自定义SQL:

  1. 打开原图表的编辑页面,找到指标配置项
  2. 删除原有的COUNT_DISTINCT(id)指标,添加Custom SQL类型的指标
  3. 输入以下SQL(替换your_table_name为实际表名):
(SELECT COUNT(DISTINCT t2.id) FROM your_table_name t2 WHERE t2.quarter <= t1.quarter)
  1. 命名指标为滚动去重ID计数,保存后即可看到符合预期的结果

注意事项

  • 若数据库支持窗口函数中的DISTINCT(如PostgreSQL、BigQuery),可使用更简洁的SQL实现虚拟数据集:
SELECT
  TO_DATE(quarter || '-01', '"YYYY"Q"Q"-DD') AS quarter_start_date,
  DISTINCT quarter,
  COUNT(DISTINCT id) OVER (ORDER BY quarter RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS rolling_distinct_id_count
FROM your_table_name
ORDER BY quarter_start_date
  • 确保quarter字段的格式统一(如2024Q3),否则需调整日期转换逻辑适配实际格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:32:26