如何实现单个Looker仪表板筛选器联动多视图姓名字段?
实现Looker单筛选器多视图字段同步过滤的两种方案
方案一:复用通用user视图,自定义跨维度筛选器
1. 创建可复用的user基础视图
新建user.view.lkml,通过参数动态绑定不同用户表:
view: user { sql_table_name: {% parameter user_table %} ;; parameter: user_table { type: unquoted } dimension: id { type: number sql: ${TABLE}.id ;; } dimension: name { type: string sql: ${TABLE}.name ;; } }
2. 在工单探索中关联三次user视图
假设工单表ticket包含opened_by_id、assigned_to_id、closed_by_id三个关联字段,在工单探索中分别绑定三个用户表:
explore: ticket { join: opened_by { view: user sql_on: ${ticket.opened_by_id} = ${opened_by.id} ;; parameters: { user_table: OpenedByTable ;; } } join: assigned_to { view: user sql_on: ${ticket.assigned_to_id} = ${assigned_to.id} ;; parameters: { user_table: AssignedTable ;; } } join: closed_by { view: user sql_on: ${ticket.closed_by_id} = ${closed_by.id} ;; parameters: { user_table: ClosedTable ;; } } }
3. 自定义跨维度筛选器
在ticket视图中添加一个支持多维度匹配的筛选器维度:
view: ticket { # 已有工单字段... dimension: target_user { type: string sql: null ;; filter: yes suggest_dimensions: [opened_by.name, assigned_to.name, closed_by.name] filterable: yes } }
在仪表板中使用target_user作为筛选器,设置筛选逻辑为匹配任意值,选择姓名后会自动关联三个视图的name字段,同步过滤所有可视化组件。
方案二:新增统一用户视图,聚合所有用户源
1. 创建unified_users视图
通过UNION合并三个用户表的去重数据:
view: unified_users { sql_table_name: ( SELECT id, name FROM OpenedByTable UNION SELECT id, name FROM AssignedTable UNION SELECT id, name FROM ClosedTable ) ;; dimension: id { type: number sql: ${TABLE}.id ;; } dimension: name { type: string sql: ${TABLE}.name ;; } }
2. 在工单探索中关联统一视图
将统一用户视图与工单表建立多条件关联:
explore: ticket { join: unified_users { sql_on: ${ticket.opened_by_id} = ${unified_users.id} OR ${ticket.assigned_to_id} = ${unified_users.id} OR ${ticket.closed_by_id} = ${unified_users.id} ;; relationship: many_to_one } }
3. 配置仪表板筛选器
直接使用unified_users.name作为仪表板筛选器。当选择某一姓名时,工单数据会自动匹配开单、经办、结单中任意一个为该用户的记录,三个可视化组件(分别基于opened_by.name、assigned_to.name、closed_by.name聚合统计)将同步展示对应数据。
注意事项
- 若存在重名用户,建议优先用
id作为筛选关联依据,再通过name显示,避免筛选混淆。 - 方案二中的
UNION会自动去重,确保筛选器的用户列表无重复项。
内容的提问来源于stack exchange,提问作者Dryko
相关产品推荐
相关产品推荐

