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

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

本页提供了一个示例,展示了如何使用 LookML 精确化项自定义单个基本视图,并为贵公司中的两个不同团队创建不同的探索。此外,它还提供在优化内容中隐藏和添加字段的示例。

原料

前提条件

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

假设您有一个销售探索,其中包含有关客户、购买、运费和位置的数据。虽然贵公司的营销和物流团队都需要探索这些数据,但他们分别关注“销售”探索中的不同字段。

您想要在“探索”字段选择器中只显示对每个团队有用的字段,以便更轻松地进行探索。为此,您可以针对“销售”探索和作为其依据的 sales 视图定义两种不同的优化。营销团队的“探索”可以显示与客户和购买趋势相关的字段,而物流团队的“探索”可以显示与配送和地理位置相关的字段。您还可以为每个精细视图添加特定于各个团队需求的新字段。

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

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

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

“用户”视图包含年龄、城市、国家/地区、创建日期、电子邮件、名字和姓氏、ID、州、邮政编码和计数等字段。

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

  1. 创建一个新的 LookML 文件(在本例中为名为 base_analysis.lkml 的文件),其中包含基于 sales 视图和联接的 users 视图的销售探索的 LookML。由于您希望使用基本 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 的新文件中添加营销团队的销售分析标签。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} ;;
  }
}

您创建的物流探索除了会包含已联接的用户视图中的字段外,还会包含销售视图下的新字段。销售视图中的利润促销价平均售价字段以及用户探索中的年龄电子邮件名字姓氏已创建字段均处于隐藏状态,因为物流团队不需要这些字段。

现在,每个团队都有更符合其具体需求的“探索”页面。虽然这种方法需要预先进行一些设置,但通过将核心数据集中保存在一个位置,您可以更轻松地查找和使用这些数据。