Apache Superset创建Big Number图表时自定义SQL报错求助
Apache Superset自定义SQL指标使用指南(解决Big Number图表报错)
问题原因
你在Metric的Custom SQL中编写了完整的SELECT查询语句,但Superset的自定义指标SQL仅允许写聚合表达式或单个字段计算逻辑,不能包含SELECT/FROM/GROUP BY这类完整查询结构——这就是报错提示“Custom SQL fields cannot contain sub-queries”的核心原因,完整查询会被系统识别为子查询。
正确用法与解决方案
Big Number图表需要单个聚合值(比如用电量最低城市的总消耗),可通过两种方式实现:
方式一:创建自定义SQL数据集(推荐)
如果需要先完成分组、排序、取TOP1这类复杂逻辑,建议先构建自定义数据集:
- 左侧菜单点击「数据」→「数据集」→「+ 数据集」
- 选择「SQL Lab查询」作为数据源,输入你的完整SQL:
SELECT City, SUM(`Conso (MWh)`) AS TotalConso FROM table1 GROUP BY City ORDER BY TotalConso ASC LIMIT 1;
- 保存数据集(例如命名为
city_min_total_conso) - 基于该数据集创建Big Number图表,直接选择
TotalConso作为指标,City作为维度即可
方式二:用窗口函数编写指标表达式
若不想额外创建数据集,可在Metric的Custom SQL中使用窗口函数直接计算单值:
FIRST_VALUE(SUM(`Conso (MWh)`)) OVER (ORDER BY SUM(`Conso (MWh)`) ASC)
- 该表达式会计算所有城市的总用电量,返回最小的那个值
- 注意:此方式仅能返回数值,无法同时展示对应城市名称,需展示城市仍建议用方式一
自定义SQL指标通用规则
- 仅支持单个表达式,不能包含完整的
SELECT/FROM/GROUP BY/ORDER BY语句 - 必须返回单个值(适配Big Number这类单值图表),或可被聚合的字段(适配其他图表)
- 可使用Superset支持的函数(聚合函数、窗口函数等),需匹配数据源数据库的语法规范
内容的提问来源于stack exchange,提问作者dia05
相关产品推荐
相关产品推荐

