如何在Apache Superset中添加临时动态过滤文本框?
在Apache Superset中实现自由文本输入过滤(参数化SQL查询)
核心方案:用Superset原生参数+Jinja模板实现自由文本搜索
你要的临时文本输入过滤框,完全可以通过Superset自带的参数功能实现,不用额外开发,步骤如下:
- 在SQL Lab编写带参数的查询
打开SQL Lab,写包含Jinja参数的SQL语句,用来接收用户输入的序列号(支持模糊匹配):
SELECT * FROM your_table_name WHERE serial_number LIKE CONCAT('%', {{ filter_values('serial_input', '') }}, '%')
filter_values('serial_input', ''):定义名为serial_input的参数,默认值为空字符串(空值时返回所有数据)CONCAT('%', ..., '%'):实现模糊匹配,用户输入部分序列号也能返回相关结果
保存为数据集
执行查询确认结果正常后,把查询保存为新数据集,参数会自动关联到这个数据集。创建可视化并配置文本输入控件
- 基于刚才的数据集创建可视化(比如表格/网格)
- 进入可视化的「过滤器」配置页,找到
serial_input参数 - 把该参数的控件类型从默认的「下拉框」改成「文本输入框(Text Input)」
- 可以设置输入框的提示文本(比如“输入或粘贴序列号”)
- 添加到仪表盘并使用
把配置好的可视化加到仪表盘,仪表盘上会显示对应的文本输入框:
- 用户输入或粘贴序列号(支持部分内容)
- 点击「应用过滤器」按钮,数据网格会自动执行参数化查询并更新结果
进阶优化建议
- 性能优化:给
serial_number列加索引,避免500万行数据的LIKE查询卡顿 - 批量匹配支持:如果需要支持多个序列号(逗号分隔),可以修改SQL为:
SELECT * FROM your_table_name WHERE serial_number IN ( SELECT TRIM(value) FROM STRING_TO_ARRAY({{ filter_values('serial_input', '') }}, ',') AS value )
注:该语法适用于PostgreSQL,其他数据库需调整字符串分割函数
内容的提问来源于stack exchange,提问作者Mzmrizu
相关产品推荐
相关产品推荐

