利用 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 会打开一个窗口,其中包含对 ID城市国家/地区字段的查询。

若要更改有关深入分析字段的任何内容(例如添加或移除字段),您只需更新 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* 语法 -users.user_details* 从探索中排除 user_details 集,因此没有用户数据的订单探索中的订单视图会省略“探索”字段选择器的 users_user.info 集中列出的字段。

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