用法
explore: view_name_1 {
join: view_name_2 { ... }
join: view_name_3 {
required_joins: [view_name_2, ...]
}
}
|
层次结构
required_joins |
默认值
无
接受
包含相应 Explore 的以英文逗号分隔的联接列表的方括号
特殊规则
视图必须先加入到探索中,然后才能在 required_joins 中引用
|
定义
required_joins 强制在 Looker 生成的 SQL 中包含一个或多个 joins,即使用户未从该联接视图中选择任何字段也是如此。每当用户从您指定的相关视图中选择某个字段时,系统都会触发此行为。您可以使用逗号分隔列表(例如 [join_name_a, join_name_b, ...])来指定多个联接。
当 Looker 为查询生成 SQL 时,它会尝试创建尽可能简洁的 SQL,并且只会使用用户选择的字段所需的联接。在本页顶部的语法图示例中:
- 如果用户仅从
view_name_2中选择了一个字段,则该字段将是唯一联接到探索的视图。 - 如果用户从
view_name_3中选择某个字段,相应联接的required_joins参数会导致view_name_2联接到探索。
required_joins 的主要使用场景:
使用 sql_on 的旧语法样式
当 sql_on 与 ${view_name.looker_dimension_name} 语法搭配使用时,不需要 required_joins。不过,部分旧型号仍使用 view_name.native_column_name 语法。例如:
explore: order_items {
join: order {
sql_on: order_items.order_id = order.id ;;
}
join: customer {
sql_on: order.customer_id = customer.id ;;
required_joins: [order]
}
}
在此示例中,每当用户从 customer 中选择某个字段时,也必须加入 order 视图,以保持正确的联接关系。如果您忘记要求此查询,可能仍然可以正常运行,前提是用户恰好从所有必需的视图中选择了字段。不过,其他查询可能会因错误的联接而默默地导致错误的数据。
建议您修改模型,使其使用 ${view_name.looker_dimension_name} 语法,而不是使用 required_joins。
需要或希望编写原始 SQL
在某些情况下,您无法或不想将 ${view_name.looker_dimension_name} 语法与 sql_on 搭配使用。通常,这是因为您想使用数据库中的原始值,并想避免使用 ${view_name.looker_dimension_name} 语法时发生的任何转换或其他操作。以下是使用示例:
explore: order {
join: user {
sql_on: ${order.user_id} = ${user.id} ;;
}
join: pre_sign_up_events {
from: event
sql_on:
${event.user_id} = ${user.id} AND
event.date BETWEEN user.creation_date AND user.sign_up_date ;;
required_joins: [user]
relationship: one_to_many
}
}
在此示例中,pre_sign_up_events 联接依赖于 user 中的日期。因此,请务必确保使用 required_joins 将 user 加入到联接中。
请考虑使用 date_raw 类型,而不要使用 required_joins 来避免使用时间和日期字段进行转换。required_joins
常见挑战
必须先将视图联接到探索,然后才能在 required_joins 中引用该视图
如需将视图放置到 required_joins 中,您需要确保该视图已加入到使用 required_joins 的 explore 中。例如,以下代码将无法正常运行:
explore: order_items {
join: customer {
sql_on: order.customer_id = customer.id ;;
required_joins: [order]
}
}
此处,order 尚未加入 order_items,因此无法在 required_joins 中使用。