自定义 Looker 块
本页概述了最佳实践,并提供了相关示例,说明如何根据您的具体业务需求调整以下 Cortex Framework Looker 模块:
安装
您可以采用多种方式安装 Cortex Framework Looker 模块,详情请参阅部署 Looker 模块文档。不过,我们建议您派生代码库,这是根据您的业务需求自定义代码块的最简单方法。
Cortex Framework Looker 模块采用分层方法创建,其中每一层都会在前一层的基础上添加一部分逻辑:
- 基础层:引用源表的机器生成的 LookML 视图。
- 核心层:添加新字段或修改基础层字段的手写更改。
- 逻辑层:探索不同视图中的定义和联接。
使用细化是实现这种分层方法和进行自定义的关键。为了遵循 DRY(不要重复自己)原则,我们利用了扩展和常量。标签、SQL 语句、HTML 和链接属性的动态内容是使用 Liquid 模板语言生成的。
Google 一般最佳实践:
文件和文件夹组织
在 Looker 组成块中,每个文件夹都代表一组对象类型(例如视图、探索、信息中心等)。每个单独的对象都在单独的文件中定义。项目根目录包含以下关键文件:
.model文件- 清单文件
- README 和其他 Markdown 文件
- Marketplace 文件(如果模块也在 Looker Marketplace 上提供)

模型
模块化文件管理使项目的 model 文件变得精简,并包含以下参数:
在 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,用于引用多个视图中的字段。

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

嵌套的重复记录
对于包含嵌套重复记录的基础表,Looker 会创建单独的视图来取消嵌套这些记录。例如,在 Oracle EBS Looker 组成块中,sales_orders 表有一个名为 lines 的嵌套重复结构体。Looker 会将这两个视图视为不同的视图:sales_orders 和 sales_orders__lines。
如需在“探索”中联接这些未嵌套的记录,您必须结合使用 sql 属性和 UNNEST 命令来定义联接。

如需了解详情,请参阅如何在 Looker 中对嵌套的 BigQuery 数据进行建模。
浏览和了解 Looker 组成块代码
Cortex Framework Looker 代码块在视图和其他对象中包含大量注释。为了增强代码导航和理解能力,建议您使用 LookML 开发环境中提供的“折叠 LookML”选项。



字段
术语 field 是指 dimension、measure、filter 或 parameter 等对象。在这些新版块中,我们遵循了以下原则:
- 维度采用snake_case(小写字母,单词之间用下划线分隔)。例如:
customer_name。 - 底层表中的列名称用于命名维度。您可以为维度应用标签,以便为维度提供便于业务人员理解的名称。
例如,名为
division_hdr_spart的维度可能会标记为“部门 ID”。 - 对于包含大量列的表,字段默认处于隐藏状态。使用视图的优化,将要在“探索”中显示的字段子集的
hidden属性设置为“否”。如果某个字段未按预期显示,修改此字段属性可以解决该问题。 View_label和group_label属性用于整理探索中的字段(如果适用)。- 对于在多个视图中使用的字段,标签等属性是在“通用”视图中确定的,随后会扩展到其他视图中。此方法可集中定义属性,从而提高可重用性。所有必要的修改都在“通用”视图中进行管理,确保更改反映在扩展“通用”视图的所有视图中。
- 在多个探索中使用的参数或引用多个视图的字段在带有
_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 文件。此视图显示了标签“🔍 过滤器”,该标签在清单文件中定义为常量。
如需修改此标签,请执行以下操作:
- 在清单文件中找到
label_view_for_filters常量。 - 将常量的值修改为您选择的标签。
- 保存清单文件。
无论在何处引用
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}
}
}
如需创建第二个细化文件,请执行以下操作:
- 创建新的优化文件:将其命名为
sales_orders_rfn2.view。 - 包含第一个优化文件:这会将
sales_orders_rfn中的所有定义纳入sales_orders_rfn2中。 - 修改标签属性:将
average_sales的label属性更改为“平均支出”或任何其他所选标签。 添加新维度:在
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}) } }在探索中包含第二个优化文件:这会将
sales_orders_rfn2中的所有定义和增强功能纳入探索中。include: "/views/core/sales_orders_rfn2.view" explore: sales_orders { }
创建新的精细化层
如果 Cortex Framework Looker 组成块中定义的任何基本视图不符合您的特定要求,都可以替换。您可以直接修改 _rfn 文件,以移除不必要的字段定义或添加新的字段定义。
或者,创建新的优化文件:
- 创建新的优化文件:将其命名为
sales_invoices_rfn并保存。 - 包含基本视图:这会将基本视图
sales_invoices中的所有定义纳入sales_invoices_rfn中。 添加所选的自定义设置:请务必同时将某个维度定义为主键。
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) ;; } }在探索中添加新的优化:在
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.dashboard 的 customer_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 信息中心。