用量
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
}
}
确保 member
和 payment
始终联接到 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 ;;
}
此方法允许用户灵活查看所有事件,或仅查看成员事件。您没有通过联接强制用户查看成员事件。