always_join

用法


explore: explore_name {
  always_join: [
    view_name,
    view_name,
    ...
  ]
}
层次结构
always_join
默认值

接受
包含以英文逗号分隔的视图名称列表的方括号

特殊规则
您必须先将视图联接到 explore,然后才能在 always_join 中使用该视图

定义

always_join 强制将一个或多个 join 纳入 Looker 生成的 SQL 中,即使用户未从该联接的视图中选择任何字段也是如此。您可以使用逗号分隔列表(例如 [view_name_a, view_name_b, etc])来指定多个联接。

当 Looker 为查询生成 SQL 时,会尝试创建尽可能简洁的 SQL,并且只会使用用户所选字段所需的联接。使用 always_join,您可以强制执行联接,无论如何。

当使用 type 参数执行联接且联接不是 LEFT JOIN 时,always_join 可能很有用。在这种情况下,联接对于正确限制返回的行至关重要。

示例

确保 member 始终与 event 联接,即使用户未从 member 中选择任何字段也是如此。这会将结果限制为仅查看会员生成的活动:

explore: event {
  always_join: [member]
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
    type: inner
  }
}

确保 memberpayment 始终与 event 联接,即使用户未从这两个视图中选择任何字段也是如此。此查询会将结果限制为仅查看会员已付费的会员生成的活动:

explore: event {
  always_join: [member, payment]
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
    type: inner
  }
  join: payment {
    sql_on: ${member.payment_id} = ${payment.id} ;;
    type: inner
  }
}

常见挑战

必须先将视图联接到探索,然后才能在 always_join 中引用该视图

如需将视图放置到 always_join 中,请确保该视图已联接到使用 always_join探索。例如,以下代码将无法正常运行:

explore: event {
  always_join: [member]
}

在此示例中,member 视图尚未与 event 联接,因此无法在 always_join 中使用。

注意事项

尽可能不在联接中应用业务逻辑

Looker 的标准联接方法是尽可能使用 LEFT JOIN。在前面的示例中,我们避免使用 LEFT JOIN,以便在联接本身中应用业务逻辑。在其中一个示例中,我们创建了一个仅包含与会员相关的事件的探索:

explore: event {
  always_join: [member]
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
    type: inner
  }
}

在 Looker 中执行此操作的首选方式是使用 LEFT JOIN 简单地将活动数据和会员数据合并在一起:

explore: event {
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
  }
}

然后,您可以创建一个维度,并将其设置为“是”或“否”,以便仅查看会员活动:

dimension: is_member_event {
  type: yesno
  sql: ${member.id} IS NOT NULL ;;
}

这种方法可让用户灵活地查看所有事件,或仅查看成员事件。您没有强制用户仅通过联接查看会员活动。

如果探索包含 always_join,则 full_suggestions 的默认值会切换为 yes

如果探索包含 always_join 参数,full_suggestions 的默认值会切换为 yes。这会导致建议查询使用探索逻辑运行,这意味着系统会应用 always_join 来缩小返回的建议范围,从而将建议列表限制为用户有权访问的数据。

如果您手动将 full_suggestions 设置为 no,则不会运行过滤条件建议查询。