如何在Superset中实现按季度的滚动去重计数(Rolling COUNT_DISTINCT)?
在Superset中实现按季度滚动去重计数
需求背景
当前使用Superset的Big Number with Timetrend图表,基于create_date字段按季度(Quarter)统计唯一id的数量(COUNT_DISTINCT(id)),需要修改为滚动去重计数——即统计从最早季度到当前季度的所有唯一id总数,而非单季度的去重数量。
实现方案
由于原数据集被多个图表共用,推荐使用虚拟数据集的方式实现,避免修改原数据集影响其他图表;也可通过自定义SQL指标直接在原图表中修改。
方案一:创建虚拟数据集(推荐)
此方法生成独立的统计数据集,不影响原数据集的其他使用:
- 进入Superset的
Datasets页面,点击+ Dataset,选择SQL Query类型 - 输入以下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
- 保存虚拟数据集(如命名为
滚动季度唯一ID统计) - 基于该虚拟数据集创建Big Number with Timetrend图表:
- 时间轴选择
quarter_start_date - 时间粒度保持
Quarter - 指标选择
rolling_distinct_id_count
- 时间轴选择
方案二:自定义SQL指标(直接修改原图表)
如果不想创建新数据集,可直接在原图表的指标配置中替换为自定义SQL:
- 打开原图表的编辑页面,找到指标配置项
- 删除原有的
COUNT_DISTINCT(id)指标,添加Custom SQL类型的指标 - 输入以下SQL(替换
your_table_name为实际表名):
(SELECT COUNT(DISTINCT t2.id) FROM your_table_name t2 WHERE t2.quarter <= t1.quarter)
- 命名指标为
滚动去重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
相关产品推荐
相关产品推荐

