利用 DRY LookML 最大限度地提高代码的可重用性:为多个用例自定义单个基本视图

假设您的许多用户都共用一个探索功能,但根据他们的团队或区域,使用不同的应用场景。每个用户都希望只查看适用于其独特用例的字段。为了满足用户的多样化需求,您可以使用 LookML 优化来自定义现有视图和探索,而无需修改原始 LookML。然后,您可以根据用户的不同需求,将这些经过优化的视图和“探索”添加到单独的专用模型文件中。

本页面提供了一个示例,展示了如何使用 LookML 优化来自定义单个基本视图,并为公司内的两个不同团队创建不同的探索。以及有关如何在优化内容中隐藏和添加字段的示例。

所需要素

前提条件

示例:从同一基本视图创建多个自定义探索

假设您有一个“销售”探索,其中包含有关客户、购买交易、配送和地理位置的数据。贵公司的营销和物流团队都需要对此数据进行探索,但他们分别会关注“销售”探索中的不同字段。

您希望在“探索”字段选择器中仅显示对每个团队有用的字段,以便更轻松地探索。为此,您可以为“销售”探索及其所基于的 sales 视图定义两种不同的优化条件。营销团队的“探索”部分可以显示与客户和购买趋势相关的字段,而物流团队的“探索”部分可以显示与配送和地点相关的字段。您还可以针对每个团队的具体需求向每个经过优化的数据视图添加新字段。

目前,“销售”探索的字段选择器会显示“销售”视图中的所有字段:

“销售”视图包含创建、已送达、退货和发货日期的字段,以及 ID、利润、状态、平均和总售价以及计数。

字段选择器还会显示联接的 Users 视图中的所有字段:

“用户”视图包含用于输入年龄、城市、国家/地区、创建日期、电子邮件地址、名字和姓氏、ID、州/省/自治区/直辖市、邮编和计数的字段。

您可以优化 sales 视图,创建两个仅包含营销和物流团队感兴趣的字段的单独探索:

  1. 创建一个新的 LookML 文件(在本示例中为名为 base_analysis.lkml 的文件),其中包含用于销售探索的 LookML,该探索基于 sales 视图和联接的 users 视图。由于您想使用基础 sales 探索及其相应视图为每个团队创建自定义探索,因此可以在单个位置(例如单个文件)中定义所有共享字段和属性。

    
    # base_analysis.lkml
    
    include: "views/sales.view.lkml"
    include: "views/inventory_items.view.lkml"
    include: "views/users.view.lkml"
    
    explore: sales {
      join: inventory_items {
        type: left_outer
        sql_on: ${sales.inventory_item_id} = ${inventory_items.id} ;;
        relationship: many_to_one
      }
    
      join: users {
        type: left_outer
        sql_on: ${sales.user_id} = ${users.id} ;;
        relationship: many_to_one
      }
    }
    
  2. 创建两个单独的文件,以存储您要为每个团队定义的销售探索的优化条件。将文件命名为 marketing_analysis.lkmllogistics_analysis.lkml。接下来显示的 LookML 代码会按照 base_analysis.lkml 文件中的定义优化基本 sales 探索,并在名为 marketing_analysis.lkml 的新文件中添加“Sales Analysis for Marketing Team”标签。include: "/base/base_analysis.lkml" 语句使 base_analysis.lkml 文件的内容可供在 marketing_analysis.lkml 文件中引用。

    
    # marketing_analysis.lkml
    
    include: "/base/base_analysis.lkml"
    
    explore: +sales {
      label: "Sales Analysis for Marketing Team"
    }
    
    
  3. 为每个团队创建一个单独的模型文件,例如 ecommerce_marketing.modelecommerce_logistics.model。通过为每个团队使用单独的专用模型进行不同的优化,您可以对同一组数据视图和“探索”功能多次进行优化,而无需覆盖您对一个团队的用例所做的自定义。如需了解详情,请参阅 LookML 优化文档页面。

  4. 使用 include 参数,在 ecommerce_marketing.model 模型中包含 marketing_analysis.lkml,并在 ecommerce_logistics.model 模型中包含 logistics_analysis.lkml

  5. 根据需要为 marketing_analysis.lkmllogistics_analysis.lkml 文件添加任何其他优化设置。例如,您可以隐藏不必要的字段 ,并向每个团队的优化探索中添加新字段

您可以选择让 Looker 管理员为每个专用模型配置模型访问权限,从而为特定团队提供“探索”级别的访问权限。

对经过优化的探索隐藏了不必要的字段

您可以在 marketing_analysis.lkml 文件中按如下所示优化 sales 视图,以隐藏“已退货”“已发货”“已送达”和“已创建”维度组以及“状态”维度,因为营销团队不会使用这些字段:


# marketing_analysis.lkml

include: "/base/base_analysis.lkml"

explore: +sales {
  label: "Sales Analysis for Marketing Team"
}

view: +sales
  dimension_group: returned {
    hidden: yes
  }

  dimension_group: shipped {
    hidden: yes
  }

  dimension_group: delivered {
    hidden: yes
  }

  dimension_group: created {
    hidden: yes
  }

  dimension: status {
    hidden: yes
  }
}

同样,您可以在 logistics_analysis.lkml 文件中使用以下 LookML 来隐藏物流团队不需要的字段(例如利润促销价平均售价):


# logistics_analysis.lkml

include: "/base/base_analysis.lkml"

explore: +sales {
  label: "Sales Analysis for Logistics Team"
}

view: +sales {
  dimension: profit {
    hidden: yes
  }

  dimension: sale_price {
    hidden: yes
  }

  measure: average_sale_price {
    hidden: yes
  }
}

由于物流团队不需要查看客户的个人信息,如姓名、年龄或电子邮件地址,因此您还可以在 logistics_analysis.lkml 文件中为联接的 users 视图添加优化,以从“探索”中隐藏这些字段:

  view: +users {
    dimension: age {
    hidden: yes
  }

  dimension: email {
    hidden: yes
  }

  dimension: first_name {
    hidden: yes
  }

  dimension: last_name {
    hidden: yes
  }

  dimension_group: created {
    hidden: yes
  }
}

向优化的探索中添加新字段

您还可以在优化的 sales 视图中创建营销团队感兴趣的新字段。例如,您可以在经过优化的 sales 视图中添加“平均售价”“总售价”和“每位用户的平均支出”字段:

“销售”视图列出了 ID、利润、促销价和数量,以及新的“平均促销价”“每位用户的平均支出”和“总促销价”字段。

您可以使用以下 LookML 将这些字段添加到 marketing_analysis.lkml 文件中的优化 sales 视图:


# marketing_analysis.lkml

view: +sales {
  measure: average_sale_price {
    type: average
    value_format_name: usd
    sql: ${sale_price} ;;
    drill_fields: [detail*]
  }

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

  measure: average_spend_per_user {
    type: number
    value_format_name: usd
    sql: 1.0 * ${total_sale_price} / NULLIF(${users.count},0) ;;
    drill_fields: [detail*]
  }
}

除了已加入的“用户”视图中的字段之外,您创建的营销探索将包含“销售”视图下的新字段。“已退货”“已发货”“已送达”和“已创建”维度组以及“状态”维度已隐藏,因为营销团队不需要这些维度组。

同样,对于物流团队,您也可以创建对物流团队有用的新字段,例如“送货时间段”和“平均配送时间”

物流团队的“探索”部分现在列出了新的“送货时间范围”和“平均送货时间”字段,以及其他“送货和用户位置”字段。

您可以使用以下 LookML 将这些字段添加到 logistics_analysis.lkml 文件中的优化 sales 视图:


# logistics_analysis.lkml

view: +sales {
  dimension: shipping_time_buckets {
    case: {
      when: {
        sql: ${shipping_time} <= 7 ;;
        label: "One Week"
      }
      when: {
        sql: ${shipping_time} > 7 AND ${shipping_time} <= 14 ;;
        label: "Two Weeks"
      }
      when: {
        sql:  ${shipping_time} > 14 ;;
        label: "Over Two Weeks"
      }
      else: "Note Shipped"
    }
  }

  measure: average_shipping_time {
    type: average
    value_format_name: decimal_4
    sql: ${shipping_time} ;;
  }
}

除了已加入的用户视图中的字段外,您创建的“物流探索”中还将包含销售视图下的新字段。由于物流团队不需要,因此隐藏了“销售”数据视图中的“利润”“促销价”和“平均售价”字段。

现在,每个团队都有一个更根据自身具体需求量身定制的“探索”功能。虽然这种方法需要一些额外的前期设置,但通过将核心数据保存在一个位置,您可以更轻松地查找和使用。