自訂 Looker Blocks
本頁面提供最佳做法和範例,說明如何根據特定業務需求調整下列 Cortex Framework Looker Blocks:
安裝
您可以透過幾種方式安裝 Cortex Framework Looker Blocks,詳情請參閱「部署 Looker Blocks」說明文件。不過,我們建議將存放區分叉,這是根據業務需求自訂區塊最簡單的方法。
Cortex Framework Looker 區塊採用分層方式建立,每一層都會在前一層的基礎上新增一小段邏輯:
- 基礎層:系統產生的 LookML 檢視表,參照來源資料表。
- 核心層:手寫變更,可新增欄位或修改基礎層欄位。
- 邏輯層:探索不同檢視區塊的定義和聯結。
使用精修是這個分層方法和自訂作業的關鍵。為遵循 DRY (不要重複) 原則,系統會運用 extends 和常數。標籤、SQL 陳述式、HTML 和連結屬性的動態內容,都是使用 Liquid 範本語言生成。
Google 一般最佳做法:
檔案和資料夾整理
在 Looker 模塊中,每個資料夾都代表一組物件類型 (例如檢視區塊、探索、資訊主頁等)。每個個別物件都是在獨立檔案中定義。專案根目錄包含下列重要檔案:
- 「
.model
」檔案 - 資訊清單檔案
- README 和其他 Markdown 檔案
- Marketplace 檔案 (如果該 Block 也可在 Looker Marketplace 中取得)
模型
模組化檔案管理可讓專案的 model
檔案保持精簡,並使用下列參數:
Block 中使用的檢視區塊 include
陳述式是在每個個別的探索檔案中定義,而不是在這個位置,如下列範例所示:
connection: "@{CONNECTION_NAME}"
include: "/components/**/*.lkml"
include: "/explores/**/*.explore"
include: "/dashboards/**/*.dashboard"
資訊清單
資訊清單檔案會指定整個專案中參照的常數。以下列舉幾個用於積木的常數範例:
- 連線名稱
- 專案 ID
- 報表資料集
Cortex Framework Looker Blocks 也會使用常數定義下列項目:
- 查看標籤
- 欄位標籤
- HTML 格式
- 網址連結
- 資訊主頁名稱
查看為 Looker Block 定義的常數,並視需要修改任何值。系統會對參照常數的所有位置套用變更。
使用者屬性
部分 Looker Blocks 需要管理員在 Looker 執行個體中定義使用者屬性。您可以根據預設語言或幣別等使用者屬性,自訂每個使用者或群組的資訊主頁顯示方式。如要進一步瞭解必要使用者屬性,請參閱每個區塊的總覽。
瀏覽次數
「Base」資料夾中的檢視畫面是使用「從資料表建立檢視畫面」自動產生。這些檔案的變更幅度很小:
- 以常數取代專案 ID 和資料集名稱。
- 根據巢狀記錄將檢視畫面移至個別檔案。
- 移除所有不必要的下鑽欄位定義。
這些檢視區塊的重大修改 (例如標籤、新維度和指標) 是在「核心」資料夾中,使用精修、擴充或衍生資料表建立。
在核心資料夾中,檢視畫面會加上後置字元,指出檢視畫面的類型:
_rfn
,以利改善。_ext
,需要擴充功能才能查看。_sdt
,適用於以 SQL 為基礎的衍生資料表。_ndt
適用於原生衍生資料表。_pdt
永久衍生資料表。_xvw
,用於從多個檢視區塊參照欄位。
每個檢視定義開頭都有註解,提供背景資訊,包括說明、來源、參照、擴充欄位和其他相關附註。
巢狀重複記錄
如果基礎資料表包含巢狀重複記錄,Looker 會建立個別檢視區塊,取消這些記錄的巢狀結構。舉例來說,在 Oracle EBS Looker Block 中,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
屬性設為「no」,即可在「探索」中顯示欄位子集。如果欄位未如預期顯示,編輯這個欄位屬性即可解決問題。 View_label
和group_label
屬性可用於整理 Explore 中的欄位 (如適用)。- 如果欄位用於多個檢視畫面,標籤等屬性會在「通用」檢視畫面中建立,然後擴充至其他檢視畫面。這種做法可集中定義屬性,提高重複使用率。所有必要修改作業都會在「common」檢視畫面中管理,確保變更會反映在所有擴充「common」檢視畫面的檢視畫面中。
- 在多個探索或參照多個檢視區塊的欄位中使用的參數,會定義在具有
_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 Blocks 會使用獨立檔案中定義的一組共用參數。舉例來說,Oracle EBS Block 會使用 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 Looker Block 中定義的任何基礎檢視畫面不符合特定需求,您可以替換該畫面。您可以直接編輯 _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
的標題、UI 類型和 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 資訊主頁」。