extends(适用于探索)

此页面涉及 探索的一部分 extends 参数。

extends 也可以用作视图的一部分,如 extends(适用于视图)参数文档页面中所述。

extends 还可以作为 LookML 信息中心的一部分使用,如信息中心参数文档页面中所述。

用法


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

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

定义

借助 extends 参数,您可以基于另一个探索的内容和设置进行构建,将另一个探索作为起点。如果存在任何冲突,扩展的探索将使用自己的设置,从而覆盖被扩展的探索的设置。如需详细了解 Looker 如何实现此目的,请参阅使用 extends 重用代码文档页面。

了解 LookML 细化。

如果您希望拥有视图或探索的多版本,那么扩展视图或探索是理想的选择。不过,如果您的目标只是修改视图或探索,而无需修改包含该视图或探索的 LookML 文件,则不妨改用优化。您还可以在优化中使用 extends 参数。如需了解详情和使用情形,请参阅 LookML 细化文档页面。

在扩展探索时,请务必在要扩展的探索中添加 view_name 参数。view_name 参数用于定义探索所基于的视图。其默认值为探索的名称。如果基本探索中未指定 view_name,则默认为探索名称。但这对扩展基本探索的其他探索不起作用,因此我们会收到“未知视图”错误。为了让 Looker 使用正确的视图文件,我们需要使用 view_name 参数指定该文件。由于任何扩展版本的探索都需要此字段,因此最佳实践是将此字段添加到基本探索中,以便在扩展探索时始终可以引用此字段。

如果您的基本探索中还没有 view_name 参数,您只需添加 view_name 参数,并指定与探索名称相同的值。

您可能还想在基本探索和扩展探索中使用 view_label 参数。view_label 参数用于确定字段选择器中视图字段的分组标签(有关示例,请参阅 view_label(适用于探索)参数文档页面)。如果您未为基本探索和扩展探索指定 view_label,则两者都将使用基本探索中的探索名称。

示例

以下是模型文件中定义的 Explore 的示例:

explore: orders {
  view_name: orders
  view_label: "Orders"
  # The normal contents of the Explore follow
}

下面我们添加了一个新的探索,它扩展了之前定义的 orders 探索:

explore: name_of_the_new_explore {
  extends: [orders]
  view_label: "Order Information"
  # The additional things you want to add or change
  # in the new Explore
}

如果您要扩展基于扩展视图的探索,还需要使用 from 参数。向扩展的探索添加 from,并为其分配扩展视图的名称。

explore: new_explore {
  extends: [orders]
  from: extended_orders_view
  #The normal contents of the Explore follow
}

使用 extends 限制不同用户的字段

扩展探索的一个非常实用的用例是仅向特定用户显示探索的部分字段。例如,假设您有一个包含联接表中所有可用字段的 products 探索:

explore: products {
  view_name: products
  from: products
  join: inventory_items {
    type: left_outer
    sql_on: ${products.id}=${inventory_items.product_id} ;;
    relationship: many_to_one
  }

  join: order_items {
    type: left_outer
    sql_on: ${order_items.inventory_item_id}=${inventory_items.id} ;;
    relationship: one_to_one
  }
}

如果您的团队只需要查看商品类别和退货信息,您可以扩展 products 并使用 fields 参数来指定仅包含商品类别和退货字段:


explore: products_extended {
  extends: [products]
  fields: [products.category,order_items.returned_date]
}

products_extended 探索将仅显示以下两个字段:products.categoryorder_items.returned_date

跨模型扩展 Explore

Explore 通常在模型文件中定义。如果您想扩展某个探索,只需在同一模型文件中定义扩展探索,如上例所示。

不过,如果您想在多个模型中扩展探索,则必须创建单独的探索文件作为基本文件。在单独的文件中定义基本探索后,您可以在模型文件中添加该探索文件,并在模型文件中扩展该探索。

由于您可以在一个探索文件中包含另一个探索文件,因此您还可以根据需要跨多个其他探索文件共享基本探索文件。

探索文件将监听其包含的模型中的连接。请注意,如果您在模型中包含探索文件,而该模型配置的连接与探索文件的父模型不同,则可能会出现这种情况。如果包含模型的连接所对应的架构与父模型的连接所对应的架构不同,可能会导致查询错误。

使用元数据查看对象的扩展名

您可以在 Looker IDE 中点击 exploreview 参数,然后使用元数据面板查看对象的任何扩展,或查看对象扩展了哪些内容。如需了解相关信息,请参阅 LookML 对象的元数据文档页面。

注意事项

某些形参是累加的

在许多情况下,如果扩展对象包含与被扩展对象相同的参数,则扩展对象的值会替换被扩展对象的参数值。但对于某些参数,扩展可以是相加的,这意味着扩展对象中的值会与被扩展对象中的值结合使用。

以下探索参数是累加的:

在以下示例中,aircraft_base 探索使用 join 参数将 aircraft 视图与 aircraft_types 视图联接起来:


explore: aircraft_base {
  view_name: aircraft
  label: "Aircraft"

  join: aircraft_types {
    type: left_outer
    sql_on: ${aircraft.aircraft_type_id} = ${aircraft_types.aircraft_type_id} ;;
    relationship: many_to_one
  }
}

aircraft_extended 探索会扩展 aircraft_base 探索。此外,aircraft_extended 探索还具有一个 join 参数,该参数在 aircraft_engine_types 视图中联接:


explore: aircraft_extended {
  extends: [aircraft_base]
  label: "Aircraft Extended"

  join: aircraft_engine_types {
    type: left_outer
    sql_on: ${aircraft.aircraft_engine_type_id} = ${aircraft_engine_types.aircraft_engine_type_id} ;;
    relationship: many_to_one
  }
}

join 参数是累加的,因此生成的探索将显示基本探索中联接的视图,以及扩展探索中联接的视图。在本例中,aircraft_extended 探索包含 aircraft 视图、aircraft_types 视图和 aircraft_engine_types 视图。

包含本地化的项目

扩展对象时,请注意本地化规则也适用于您的扩展。如果您要扩展某个对象,然后定义新的标签或说明,则应在项目的语言区域字符串文件中提供本地化定义。如需了解详情,请参阅本地化 LookML 模型文档页面。