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

如何在Apache Superset Preset中用Jinja实现日期过滤?

解决Superset Preset日期范围过滤器适配问题

问题分析

你的原始SQL固定了日期值,需要改为适配Superset的created_date日期范围过滤器。之前的写法错误原因:

  • 直接用=匹配filter_values('created_date'):filter_values返回的是列表(如['2023-03-19', '2023-03-20']),SQL无法识别数组格式,导致语法错误。
  • 用IN拼接列表:当过滤器未选择任何值时,filter_values返回空列表,拼接后会生成IN(''),而日期类型不接受空字符串,引发类型错误。

正确的Jinja改写方案

Superset的日期范围过滤器始终返回包含两个元素的列表:第一个是起始日期,第二个是结束日期(选择单个日期时,结束日期为次日,对应≤ col < 结束日期的逻辑)。结合条件判断避免空过滤器的情况,写法如下:

SELECT    order_id, receipt_total,
          cast(created_at AS date) AS creation_date
FROM      order_details
{% if filter_values('created_date') %}
WHERE     cast(created_at AS date) >= '{{ filter_values('created_date')[0] }}'
  AND     cast(created_at AS date) < '{{ filter_values('created_date')[1] }}'
{% endif %}

说明

  • {% if filter_values('created_date') %}:判断过滤器是否有选中值,若未选中则不添加WHERE子句,返回所有数据。
  • >= '{{ filter_values('created_date')[0] }}' AND < '{{ filter_values('created_date')[1] }}':完美匹配Superset日期范围过滤器的左闭右开逻辑,不管用户选单个日期还是日期区间都能正确过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:18:25