始终加入

用量

探索:discover_name {
always_join: [
view_name,
view_name,

...
]
}
层次结构
always_join
默认值


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

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

定义

always_join 会强制将一个或多个联接包含在 Looker 生成的 SQL 中,即使用户尚未从联接的视图中选择字段也是如此。可以通过使用英文逗号分隔列表(例如 [view_name_a, view_name_b, etc])来要求多次联接。

在为查询生成 SQL 时,Looker 会尝试尽可能创建最简洁的 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 ;;
}

此方法允许用户灵活查看所有事件,或仅查看成员事件。您没有通过联接强制用户查看成员事件。