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

Apache Superset中{{ filter_values() }}语法失效问题求助

解决Apache Superset连接MySQL时filter_values模板语法报错问题

问题详情

原可正常执行的SQL查询:

SELECT count(ce.id) 
FROM course_enrollments ce
LEFT JOIN course_batches as cb ON cb.id = ce.course_batch_id
WHERE cb.bn_title IN ('title1') AND ce.course_completeness=100.00
AND ce.created_at between '2021-7-01' AND '2022-3-14'

为实现动态过滤修改后的查询:

SELECT count(ce.id) 
FROM course_enrollments ce
LEFT JOIN course_batches as cb ON cb.id = ce.course_batch_id
WHERE cb.bn_title IN {{ filter_values('title')|where_in }} AND ce.course_completeness=100.00
AND ce.created_at between '2021-7-01' AND '2022-3-14'

执行后触发SQL语法错误:

Unexpected error
Error: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{{ filter_values('title')|where_in }}
AND ce.course_completeness=100.00
' at line 6")

解决方法

  • 确认模板语法适用场景:{{ filter_values() }}是Superset专属模板变量,仅在带参数的保存查询(Saved Query with Parameters)、创建图表时的自定义SQL数据源中生效。如果是在SQL Lab直接执行普通查询,需开启界面中的「Enable Template Processing」选项(部分版本在查询设置栏),否则Superset不会解析模板标签,直接传递给MySQL导致语法错误。
  • 检查过滤器配置:确保已在查询/图表配置中添加名为title的过滤器,且字段类型与cb.bn_title匹配(比如字符串类型的多选下拉过滤器)。filter_values('title')会获取该过滤器的选中值,|where_in过滤器会自动将其转换为MySQL支持的('val1','val2')格式。
  • 替代方案:使用原生过滤器
    1. 先创建关联数据集:将course_enrollments与course_batches做关联,包含ce.id、cb.bn_title、ce.course_completeness、ce.created_at等核心字段。
    2. 创建图表时,添加bn_title作为多选下拉过滤器,设置固定过滤条件course_completeness = 100.00,时间范围选择2021-07-01至2022-03-14,最后选择聚合指标count(id)。这种方式无需手动编写模板变量,稳定性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:51:15