自定义 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
文件通过以下参数变得精简:
代码块中使用的视图的 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
,用于从多个视图引用字段的视图。
每个视图定义都以注释开头,注释提供背景信息,包括说明、来源、参考文献、扩展字段和其他相关备注。
嵌套的重复记录
对于包含嵌套重复记录的底层表,Looker 会创建单独的视图来展开这些记录。例如,在 Oracle EBS Looker 分块中,sales_orders
表包含一个名为 lines
的嵌套重复结构体。Looker 会将它们视为两个不同的视图:sales_orders
和 sales_orders__lines
。
如需在“探索”中联接这些非嵌套记录,您必须将 sql
属性与 UNNEST 命令结合使用来定义联接。
如需了解详情,请参阅如何在 Looker 中对嵌套 BigQuery 数据进行建模。
浏览和了解 Looker 组成块代码
Cortex Framework Looker Blocks 在视图和其他对象中包含大量注释。为了提高代码导航和理解能力,建议使用 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
设置为“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
文件。此视图会显示标签“🔍 过滤条件”,该标签在清单文件中定义为常量。
如需修改此标签,请执行以下操作:
- 在清单文件中找到
label_view_for_filters
常量。 - 将常量的值修改为您选择的标签。
- 保存清单文件。
更改将自动反映在引用
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}
}
}
如需创建第二个优化文件,请执行以下操作:
- 创建新的优化文件:将其命名为
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 查找器块中定义的任何基本视图不符合您的具体要求,您可以替换其优化。您可以直接修改 _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 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.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 信息中心。