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

如何为Superset仪表板添加过滤器,对内部查询追加WHERE条件?

解决方案:在Superset中用Jinja模板实现Version过滤器关联双查询

步骤1:修改SQL查询,加入Jinja模板逻辑

把你原来的SQL查询改造为支持Superset过滤器变量的版本,核心是通过{{ filter_values('version') }}获取过滤器选中的Version值,同时将过滤条件同步应用到两个子查询中:

SELECT
  Date,
  -- 处理除数为0的情况,避免查询报错
  CASE WHEN valid_id_count = 0 THEN 0 ELSE total_count / valid_id_count END AS value
FROM (
  SELECT 
    Date, 
    COUNT(*) AS total_count 
  FROM your_table_name
  -- 第一个子查询的Version过滤条件
  {% if filter_values('version') %}
    WHERE version IN ({{ filter_values('version') | join(',') | replace('"', "'") }})
  {% endif %}
  GROUP BY Date
) t_total
JOIN (
  SELECT 
    Date, 
    COUNT(DISTINCT ID) AS valid_id_count 
  FROM your_table_name
  WHERE score > 0
  -- 第二个子查询的Version过滤条件(与score条件用AND连接)
  {% if filter_values('version') %}
    AND version IN ({{ filter_values('version') | join(',') | replace('"', "'") }})
  {% endif %}
  GROUP BY Date
) t_valid ON t_total.Date = t_valid.Date

关键细节说明:

  • filter_values('version'):Superset内置的Jinja变量,会返回仪表板上Version过滤器选中的所有值(列表格式)。
  • join(','):将列表转为逗号分隔的字符串,适配SQL的IN语法。
  • replace('"', "'"):如果Version是字符串类型,把Superset返回的双引号替换为SQL兼容的单引号;若为数值类型,可去掉该替换语句。
  • 新增CASE分支处理除数为0的场景,避免查询抛出异常。

步骤2:配置仪表板的Version过滤器

  1. 将修改后的SQL保存为Superset数据集(若已有对应数据集,直接更新SQL内容即可)。
  2. 确保你的折线图使用这个更新后的数据集。
  3. 进入仪表板编辑模式:
    • 点击顶部「添加组件」,选择「过滤器」类型。
    • 在过滤器配置面板中,选择Version字段作为过滤维度,关联你更新后的数据集。
    • 设置过滤器的交互样式(如下拉多选、单选等),保存配置。

步骤3:验证效果

回到仪表板视图,选择不同的Version值,检查折线图的计算逻辑是否符合预期:

  • 总记录数仅统计选中Version的数据。
  • 有效ID数(score>0的去重ID)也仅统计选中Version的数据。
  • 最终的value计算结果正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:05:29