使用 DRY LookML 最大限度地提高代码可重复使用性:使用 set 参数定义可重复使用的字段列表

若要提高 LookML 项目的效率并简化维护工作,您可以使用 LookML set 参数。借助 set 参数,您可以在 fields 参数或展开式字段中对整个项目中可能经常重复的字段进行分组。如果您使用集合来对重复的字段进行分组,则可以在模型中创建一个位置来维护这组字段。

本页面包含以下使用 LookML 集来提高 LookML 项目效率和可维护性的示例:

成分

前提条件

示例:向多个测量添加相同的展开字段

假设您希望用户能够在探索、探索主题或信息中心中查看销售指标时,能够深入了解更精细的用户详细信息,因此在探索界面中为计数测量值选择一个值后,系统会针对 ID城市州/省/直辖市国家/地区字段打开查询:

为“计数”测量值选择一个值后,系统会打开一个针对 ID、城市、州/省/直辖市/自治区和国家/地区字段的查询。

您可以创建一个名为 user_details 的集合,其中包含 idcitystatecountry 字段,然后在多个衡量指标中引用这些字段,以便用户进行深入钻研:


set: user_details {
  fields: [id, city, state, country]
}

user_details 集可用于为 count 测量定义展开字段


measure: count {
  type: count
  drill_fields: [user_details*]
}

在此示例中,语法 [set_name*] 用于指定当您展开计数衡量标准时,user_details 中的字段将显示在查询结果中。

然后,您可以重复使用此集来创建其他展开字段。例如,您可以将 LookML 代码 drill_fields: [user_details*] 添加到 order_counttotal_sale_priceaverage_sale_price 测量值:


measure: order_count {
  view_label: "Orders"
  type: count_distinct
  description: "Number of orders"
  sql: ${order_id} ;;
  drill_fields: [user_details*]

}

measure: total_sale_price {
  type: sum
  value_format_name: usd
  sql: ${sale_price} ;;
  drill_fields: [user_details*]
}

measure: average_sale_price {
  type: average
  value_format_name: usd
  sql: ${sale_price} ;;
  drill_fields: [user_details*]
}

计数测量参数一样,当用户在“探索”界面中为订单数总销售金额平均销售价格选择值时,Looker 会打开一个窗口,其中包含对 IDCityStateCountry 字段的查询。

如果您想更改钻取字段的任何内容(例如添加或移除字段),只需更新 user_details 集即可。

您还可以在视图的 drill_fields 参数中引用集,为该视图中尚未在字段级别指定钻取字段的所有测量定义钻取字段。

示例:在探索中包含或省略一组字段

假设您希望通过排除对用户而言不重要的字段,为用户简化“探索”字段选择器。

例如,假设您有一个 users 视图,其中包含客户的相关信息,包括 IDFirst NameLast NameEmailAge 字段,以及 CityStateCountryZip 等位置字段。users 视图已联接到 orders“探索”:

“订单”视图的字段选择器包含“订单”和“用户”视图中的所有字段,包括您要忽略的字段。

如果您想从用户的“探索”中排除名字姓氏电子邮件地址年龄性别字段,该怎么办?您可以创建一个名为 user_info 的集,其中列出要从订单“探索”中排除的字段:

“不含用户数据的订单”探索会从“探索”字段选择器中排除“名字”“姓氏”“电子邮件地址”“年龄”和“性别”字段。

user_info 集的 LookML 如下所示:


set: user_info {
  fields: [first_name, last_name, email, age, gender]
}

若要定义标签为不含用户数据的订单订单探索,请将 users 视图联接到 orders 探索。将 LookML 代码 fields: [ALL_FIELDS*, -users.user_info*] 添加到 orders“探索”中,以包含 users 视图中 user_info 集的字段以外的所有字段:


explore: orders {
  fields: [ALL_FIELDS*, -users.user_info*]
  label: "Orders Without User Data"
  join: users {
    type: left_outer
    sql_on: ${orders.user_id} = ${users.id} ;;
    relationship: many_to_one
  }
}

由于 orders“探索”的 fields 参数中使用语法 -users.user_details*user_details 集从“探索”中排除,因此不含用户数据的订单“探索”中的订单视图会从“探索”字段选择器中省略 users_user.info 集中列出的字段。

您可以重复使用 user_info 集,以便在与 users 视图联接的任何其他探索的“探索”界面中忽略这些字段。如果您想更改 user_info 集的任何内容(例如添加或移除字段),只需更新 user_info 集即可。