在 Apache Superset 中向饼图添加动态类别?

问题描述 投票:0回答:1

在使用超集时,我有两件事需要帮助。

客户希望看到销售表中排名前10的产品(即:产品数量>300),其余的显示为“其他”(在饼图中)。如何将其他产品动态分组为“其他”?

如果他们按其中一种产品(属于“其他”类别)进行过滤,他们希望能够看到数据。有什么想法吗?

提前非常感谢。

我尝试了以下查询,但它没有达到我的预期:

SELECT
    CASE
        WHEN t.product IN (SELECT product FROM Sales GROUP BY product HAVING COUNT(*) >= 30) THEN t.product
        ELSE 'Others'
    END AS grouped_product,
    COUNT(*) AS product_count
FROM
    Sales AS t
GROUP BY
    grouped_product;

输出: 选择排名前 10 的产品,不硬编码 300,其余的将在“其他”中。 使用 Maria-DB

sql mariadb visualization apache-superset
1个回答
0
投票

您可以执行聚合来获取产品的数量,然后使用

ROW_NUMBER()
(或
DENSE_RANK()
,如果值相关)在每个分区内分配顺序排名编号 :

并且通过使用

DIV
进行整数除法,我们可以精确定位前 n 个产品(将 3 替换为任何所需的数字):

SELECT (CASE WHEN rn DIV 3 = 0 THEN product ELSE 'Others' END) AS product, 
       SUM(product_count) AS product_count
FROM (
  SELECT *, ROW_NUMBER() OVER (ORDER BY product_count DESC) - 1 AS rn
  FROM (
    SELECT product, COUNT(*) AS product_count
    FROM sales
    GROUP BY product
  ) AS s
) AS g
GROUP BY 1

对于这个数据集:

create table sales (
  product VARCHAR(20),
  order_id int
);

insert into sales values
('AA', 1),
('AA', 2),
('AA', 3),
('AA', 4),
('BB', 5),
('BB', 6),
('BB', 7),
('CC', 8),
('CC', 9),
('DD', 10);

结果 :

product product_count
AA      4
BB      3
CC      2
Others  1

演示在这里

© www.soinside.com 2019 - 2024. All rights reserved.