自定义 Looker 块

本页概述了最佳实践,并提供了相关示例,说明如何根据您的具体业务需求调整以下 Cortex Framework Looker 模块:

安装

您可以采用多种方式安装 Cortex Framework Looker 模块,详情请参阅部署 Looker 模块文档。不过,我们建议您派生代码库,这是根据您的业务需求自定义代码块的最简单方法。

Cortex Framework Looker 模块采用分层方法创建,其中每一层都会在前一层的基础上添加一部分逻辑:

  • 基础层:引用源表的机器生成的 LookML 视图。
  • 核心层:添加新字段或修改基础层字段的手写更改。
  • 逻辑层:探索不同视图中的定义和联接。

使用细化是实现这种分层方法和进行自定义的关键。为了遵循 DRY(不要重复自己)原则,我们利用了扩展常量。标签、SQL 语句、HTML 和链接属性的动态内容是使用 Liquid 模板语言生成的。

Google 一般最佳实践:

文件和文件夹组织

在 Looker 组成块中,每个文件夹都代表一组对象类型(例如视图、探索、信息中心等)。每个单独的对象都在单独的文件中定义。项目根目录包含以下关键文件:

  • .model 文件
  • 清单文件
  • README 和其他 Markdown 文件
  • Marketplace 文件(如果模块也在 Looker Marketplace 上提供)

文件浏览器

图 1。Looker 组成块中的文件夹组织示例。

模型

模块化文件管理使项目的 model 文件变得精简,并包含以下参数:

  1. 连接
  2. 包括

    包含的文件类型如下:

    • 组件(数据组,相关时为 named_value_formats
    • 探索(模型文件中未定义探索)
    • 信息中心

在 Block 中使用的视图的 include 语句是在每个单独的探索文件中定义的,而不是在此位置定义的,如下例所示:

connection: "@{CONNECTION_NAME}"

include: "/components/**/*.lkml"
include: "/explores/**/*.explore"
include: "/dashboards/**/*.dashboard"

清单

清单文件指定了在整个项目中引用的常量。以下是用于我们代码块的一些常量示例:

  • 连接名称
  • 项目 ID
  • 报告数据集

Cortex Framework Looker 代码块还使用常量来定义以下内容:

  • 查看标签
  • 字段标签
  • HTML 格式
  • 网址链接
  • 信息中心名称

查看为 Looker 组成块定义的常量,并根据需要修改任何值。更改会应用于引用该常量的任何位置。

用户属性

部分 Looker 模块需要管理员在 Looker 实例中定义用户属性。通过这些默认语言或币种的用户属性,您可以针对每个用户或群组自定义信息中心的显示方式。如需详细了解所需的用户属性,请参阅每个块的概览

视图

“基础”文件夹中的视图是使用“根据表创建视图”自动生成的。以下文件仅发生了极少的更改:

  • 将项目 ID 和数据集名称替换为常量。
  • 将基于嵌套记录的视图移到了单独的文件中。
  • 移除了所有不必要的下钻字段定义。

这些视图的标签、新维度和新度量等重大修改已在 Core 文件夹中使用细化扩展派生表创建。

在核心文件夹中,视图的命名方式是在名称后添加一个后缀,用于指明视图的类型:

  • _rfn 用于优化。
  • _ext,表示需要扩展的视图。
  • _sdt(对于基于 SQL 的派生表)。
  • _ndt 用于原生派生表。
  • _pdt 用于永久性派生表。
  • _xvw,用于引用多个视图中的字段。

后缀示例

图 2。表示视图类型的后缀示例。

每个视图定义都以提供背景信息的注释开头,包括说明、来源、参考、扩展字段和其他相关备注。

注解

图 3。视图定义中的注释示例。

嵌套的重复记录

对于包含嵌套重复记录的基础表,Looker 会创建单独的视图来取消嵌套这些记录。例如,在 Oracle EBS Looker 组成块中,sales_orders 表有一个名为 lines 的嵌套重复结构体。Looker 会将这两个视图视为不同的视图:sales_orderssales_orders__lines

如需在“探索”中联接这些未嵌套的记录,您必须结合使用 sql 属性和 UNNEST 命令来定义联接。

UNNEST 命令

图 4。使用“sql”属性与 UNNEST 命令结合进行联接的示例。

如需了解详情,请参阅如何在 Looker 中对嵌套的 BigQuery 数据进行建模

Cortex Framework Looker 代码块在视图和其他对象中包含大量注释。为了增强代码导航和理解能力,建议您使用 LookML 开发环境中提供的“折叠 LookML”选项。

折叠 LookML

图 5。点击“折叠 LookML”。

展开 LookML

图 6. 点击即可展开 LookML。

再次折叠

图 7。点击可再次折叠 LookML。

字段

术语 field 是指 dimensionmeasurefilterparameter 等对象。在这些新版块中,我们遵循了以下原则:

  1. 维度采用snake_case(小写字母,单词之间用下划线分隔)。例如:customer_name
  2. 底层表中的列名称用于命名维度。您可以为维度应用标签,以便为维度提供便于业务人员理解的名称。 例如,名为 division_hdr_spart 的维度可能会标记为“部门 ID”。
  3. 对于包含大量列的表,字段默认处于隐藏状态。使用视图的优化,将要在“探索”中显示的字段子集的 hidden 属性设置为“否”。如果某个字段未按预期显示,修改此字段属性可以解决该问题。
  4. View_labelgroup_label 属性用于整理探索中的字段(如果适用)。
  5. 对于在多个视图中使用的字段,标签等属性是在“通用”视图中确定的,随后会扩展到其他视图中。此方法可集中定义属性,从而提高可重用性。所有必要的修改都在“通用”视图中进行管理,确保更改反映在扩展“通用”视图的所有视图中。
  6. 在多个探索中使用的参数或引用多个视图的字段在带有 _xvw 后缀的仅限字段的视图中定义。如需了解详情,请参阅避免不同探索之间出现不一致的情况

修改示例

本部分提供了常见自定义的示例。

取消隐藏字段

基本视图包含底层表中的所有维度。如果大多数维度都不需要显示,则可以使用优化功能默认隐藏所有字段。为此,请将 fields_hidden_by_default 属性设置为“yes”。已取消隐藏与所含 LookML 信息中心相关的一部分字段。以下示例考虑了一个名为 sales_orders 的基本视图,其中包含一个名为 item_posnr 的维度。

view: sales_order {
  sql_table_name: reporting.sales_order ;;

  dimension: item_posnr {
    type: string
    sql: ${TABLE}.Item_POSNR
  }
}

此视图的细化在带有 _rfn 后缀的文件中定义。细化设置将视图属性 fields_hidden_by_default 设置为“是”,这意味着所有字段最初都是隐藏的。如需在视图中显示字段 item_posnr,请将 hidden 属性设置为“no”。

view: +sales_order {
   fields_hidden_by_default: yes

   dimension: item_posnr {
     hidden: no
   }
}

更改参数视图的标签

多个 Looker 模块使用在独立文件中定义的一组共享参数。例如,Oracle EBS 块使用 otc_common_parameters_xvw 文件。此视图显示了标签“🔍 过滤器”,该标签在清单文件中定义为常量。

如需修改此标签,请执行以下操作:

  1. 在清单文件中找到 label_view_for_filters 常量。
  2. 将常量的值修改为您选择的标签。
  3. 保存清单文件。 无论在何处引用 label_view_for_filters 常量,相应更改都会自动反映出来。
Manifest

constant: label_view_for_filters {
  value: "My Filters"
}

或者,前往视图 otc_common_parameters_xvw,然后将“标签”属性修改为所选值。

view: otc_common_parameters_xvw {
  label: "My Filters"
}

添加新衡量指标

您可以直接向相关优化添加新衡量指标。以下示例展示了添加到销售订单优化中的新度量:

view: +sales_orders {

  measure: customer_count {
    type: count_distinct
    sql: ${customer_id}
   }
}

添加第二个优化层

新的优化可以基于现有优化构建。假设文件 sales_orders_rfn.view 中对 sales_orders 的优化会创建度量 average_sales,如以下示例所示:

include: "/views/base/sales_orders"
view: +sales_orders {
  measure: average_sales {
    type: average
    sql: ${order_value}
  }
}

如需创建第二个细化文件,请执行以下操作:

  1. 创建新的优化文件:将其命名为 sales_orders_rfn2.view
  2. 包含第一个优化文件:这会将 sales_orders_rfn 中的所有定义纳入 sales_orders_rfn2 中。
  3. 修改标签属性:将 average_saleslabel 属性更改为“平均支出”或任何其他所选标签。
  4. 添加新维度:在 sales_orders_rfn2.view 文件中添加新维度的代码。

    include: "/views/core/sales_orders_rfn.view"
    view: +sales_orders {
    
      measure: average_sales {
        label: "Average Spend"
      }
    
      dimension: customer_name_with_id {
        type: string
        sql: CONCAT(${customer_id},' ',${customer_name})
      }
    }
    
  5. 在探索中包含第二个优化文件:这会将 sales_orders_rfn2 中的所有定义和增强功能纳入探索中。

    include: "/views/core/sales_orders_rfn2.view"
    explore: sales_orders {
    }
    

创建新的精细化层

如果 Cortex Framework Looker 组成块中定义的任何基本视图不符合您的特定要求,都可以替换。您可以直接修改 _rfn 文件,以移除不必要的字段定义或添加新的字段定义。

或者,创建新的优化文件:

  1. 创建新的优化文件:将其命名为 sales_invoices_rfn 并保存。
  2. 包含基本视图:这会将基本视图 sales_invoices 中的所有定义纳入 sales_invoices_rfn 中。
  3. 添加所选的自定义设置:请务必同时将某个维度定义为主键。

    include: "/views/base/sales_invoices.view"
    
    view: +sales_invoices {
    
      fields_hidden_by_default: yes
    
      dimension: invoice_id {
        hidden: no
        primary_key: yes
        value_format_name: id
      }
    
      dimension: business_unit_name {
        hidden: no
        sql: CONCAT(${business_unit_id}, ":",${TABLE}.BUSINESS_UNIT_NAME) ;;
      }
    }
    
  4. 在探索中添加新的优化:在 include 属性中使用新文件,而不是 Cortex Framework Looker 组成块中提供的优化。

    include: "/views/my_customizations/sales_invoices_rfn.view"
    
    explore: sales_invoices {
    }
    

修改 LookML 信息中心过滤条件

在以 _template 为后缀的信息中心内定义了多个 LookML 信息中心共用的一组信息中心过滤条件,并将其扩展到每个信息中心。扩展后,您可以根据需要修改过滤条件对象,以适应特定信息中心。

针对所有信息中心进行编辑

如需更改所有信息中心的过滤条件类型,请找到定义过滤条件的模板文件。将 ui_config 类型和显示属性修改为所选设置。此更改将应用于扩展模板的所有信息中心。以下是 otc_template.dashboard 示例:

- dashboard: otc_template
  extension: required

  filters:
  - name: customer_country
    title: "Sold to Customer: Country"
    type: field_filter
    default_value: ''
    allow_multiple_values: true
    required: false
    ui_config:
      type: dropdown_menu
      display: popover
    explore: countries_md
    field: countries_md.country_name_landx

针对特定信息中心进行修改

如需修改特定信息中心上的过滤条件,请找到相应的信息中心文件,并添加过滤条件名称以及需要修改的选择属性。此变更仅限于单个信息中心。例如,如需更改 otc_order_status.dashboardcustomer_country 过滤器的标题、界面类型和显示,信息中心文件中将仅包含这些属性。其余属性将从扩展模板继承。

- dashboard: otc_order_status
  title: Order Status
  extends: otc_template

  filters:
  - name: customer_country
    title: "Customer Country"
    ui_config:
      type: dropdown_menu
      display: inline

如需详细了解如何创建和修改 LookML 信息中心,请参阅构建 LookML 信息中心