required_joins

用法

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_joinsuser 加入到联接中。

请考虑使用 date_raw 类型,而不要使用 required_joins 来避免使用时间和日期字段进行转换。required_joins

常见挑战

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

如需将视图放置到 required_joins 中,您需要确保该视图已加入到使用 required_joinsexplore 中。例如,以下代码将无法正常运行:

explore: order_items {
  join: customer {
    sql_on: order.customer_id = customer.id ;;
    required_joins: [order]
  }
}

此处,order 尚未加入 order_items,因此无法在 required_joins 中使用。