基于布尔型外键值的Metabase动态过滤器配置问题
Metabase活跃项目过滤器配置方案
问题根源
你的SQL存在两个核心问题:
- 用了
LEFT JOIN却在WHERE里过滤ProjectSettings.active = 'ACTIVE',这会让左连接等价于内连接,逻辑冗余; - 过滤器
{{Project}}的选项没有限定为活跃项目,导致下拉列表里仍会出现非活跃项。
分步解决
1. 单独创建活跃项目选项数据源
在Metabase新建一个SQL查询,专门用来给过滤器提供选项,代码如下:
SELECT DISTINCT "ProjectSettings"."name" AS "project_name" FROM "public"."ProjectSettings" WHERE "ProjectSettings"."active" = 'ACTIVE'
保存这个查询,命名为「活跃项目列表」。
2. 调整原仪表盘的SQL查询
把原查询的LEFT JOIN改为INNER JOIN(因为你只需要关联到有活跃设置的项目),调整后代码:
SELECT "public"."Project"."status" AS "status", "ProjectSettings"."name" AS "ProjectSettings__name" FROM "public"."Project" INNER JOIN "public"."ProjectSettings" ON "public"."Project"."id" = "ProjectSettings"."projectId" WHERE "ProjectSettings"."active" = 'ACTIVE' AND "ProjectSettings"."name" = {{Project}}
3. 绑定过滤器与选项数据源
进入仪表盘的过滤器设置,找到{{Project}}过滤器,将它的「选项来源」设置为刚才创建的「活跃项目列表」,选择project_name作为选项展示字段。
完成以上步骤后,过滤器的下拉选项就只会显示活跃状态的项目了。
内容的提问来源于stack exchange,提问作者pixelboy
相关产品推荐
相关产品推荐

