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

Apache Superset饼图动态分类:Top10产品与Others分组及过滤问题

解决Apache Superset的两个饼图需求

一、实现动态Top10产品+Others的SQL(MariaDB)

你的原SQL存在三个问题:一是硬编码了销量阈值(还写错成30而非需求里的300),二是没筛选销量≥300的Top10产品,三是分组后丢失原始产品信息,导致无法过滤Others里的具体产品。以下是修正后的SQL,既满足不硬编码阈值的要求,又能保留原始产品字段供后续过滤使用:

WITH product_sales AS (
    -- 计算每个产品总销量,并标记是否达标(销量≥300)
    SELECT 
        product,
        SUM(sales_volume) AS total_sales, -- 请根据实际表结构替换销量字段名
        CASE WHEN SUM(sales_volume) >= 300 THEN 1 ELSE 0 END AS meets_threshold
    FROM Sales
    GROUP BY product
),
ranked_products AS (
    -- 对达标产品按销量降序排名,取Top10
    SELECT 
        product,
        total_sales,
        ROW_NUMBER() OVER (ORDER BY total_sales DESC) AS sales_rank
    FROM product_sales
    WHERE meets_threshold = 1
)
-- 最终分组:Top10保留原名,其余归为Others,同时保留原始产品字段
SELECT 
    CASE 
        WHEN rp.sales_rank <= 10 THEN rp.product
        ELSE 'Others'
    END AS grouped_product,
    ps.product AS original_product, -- 保留原始产品字段用于过滤
    ps.total_sales
FROM product_sales ps
LEFT JOIN ranked_products rp ON ps.product = rp.product

关键说明

  • 用CTE拆分逻辑,避免重复计算,提升可读性
  • 通过窗口函数ROW_NUMBER()动态获取达标Top10产品,无需硬编码阈值(若要让阈值可动态调整,可结合Superset参数化查询)
  • 保留original_product字段,为后续过滤Others中的具体产品提供数据支持

二、Superset中配置过滤功能

  1. 数据集导入:将上述SQL作为自定义SQL数据集导入Superset,确保grouped_product和original_product字段被正确识别
  2. 饼图可视化设置:
    • 维度选择grouped_product,度量选择total_sales(聚合方式设为SUM)
  3. 过滤配置:
    • 添加一个过滤器,字段选择original_product,类型设为“多选”或“下拉”
    • 当用户选择原属Others的产品时,Superset会自动筛选出对应产品的销量数据,因为original_product保留了完整的原始产品信息
    • 若要默认展示Top10+Others的汇总视图,可在数据集或可视化中添加默认过滤规则

额外优化建议

  • 若要让销量阈值(300)支持用户动态调整,可使用Superset的参数化查询,将SQL中的300替换为:sales_threshold,然后在数据集配置中设置该参数为数字类型,用户即可在可视化界面直接修改阈值
  • 若Others占比过高,可在Superset可视化设置中调整“合并小分组”的规则,进一步优化饼图展示效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:07:43