自定义 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,如果适用)
    • 探索(探索未在模型文件中定义)
    • 信息中心

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

connection: "@{CONNECTION_NAME}"

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

清单

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

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

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

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

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

用户属性

某些 Looker 块需要管理员在 Looker 实例中定义用户属性。借助这些默认语言或货币的用户属性,您可以自定义每个用户或群组的信息中心显示方式。如需详细了解必需的用户属性,请参阅每个屏幕块的概览

视图

在“Base”文件夹中找到的视图是使用“根据表创建视图”自动生成的。以下文件的更改很少:

  • 将项目 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 Blocks 在视图和其他对象中包含大量注释。为了提高代码导航和理解能力,建议使用 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 设置为“yes”,这意味着所有字段最初都处于隐藏状态。如需在视图中显示字段 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,然后将“label”属性修改为所选值。

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 查找器块中定义的任何基本视图不符合您的具体要求,您可以替换其优化。您可以直接修改 _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 Block 中提供的优化。

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

修改 LookML 信息中心过滤条件

在多个 LookML 信息中心中使用的一组通用信息中心过滤条件在使用 _template 后缀命名的信息中心中定义,并扩展到每个信息中心。扩展后,您可以根据特定信息中心的需要修改过滤条件对象。

修改所有信息中心

如需更改所有信息中心的过滤条件类型,请找到用于定义过滤条件的模板文件。将 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 信息中心