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')格式。 - 替代方案:使用原生过滤器
- 先创建关联数据集:将
course_enrollments与course_batches做关联,包含ce.id、cb.bn_title、ce.course_completeness、ce.created_at等核心字段。 - 创建图表时,添加
bn_title作为多选下拉过滤器,设置固定过滤条件course_completeness = 100.00,时间范围选择2021-07-01至2022-03-14,最后选择聚合指标count(id)。这种方式无需手动编写模板变量,稳定性更强。
- 先创建关联数据集:将
内容的提问来源于stack exchange,提问作者Ragib Shahriar
相关产品推荐
相关产品推荐

