總覽
使用 LookML 修正項,您不必編輯包含現有檢視區塊或探索的 LookML 檔案,即可調整這些項目。這非常適合用於:
- 使用 Looker Blocks 的專案,這類專案會使用預先建構的 LookML 片段
- 從其他專案匯入檔案的專案
- 您經常需要從資料庫中的表格生成檔案的專案
- 您想在模型或專案之間共用 LookML,同時在每個位置進行自訂 (中樞輻射式設定)
舉例來說,如果專案中有下列檢視表檔案:
view: flights {
sql_table_name: flightstats.accidents ;;
dimension: id {
label: "id"
primary_key: yes
type: number
sql: ${TABLE}.id ;;
}
}
您可以按照下列範例,調整 flights 檢視畫面:使用 view 參數,並採用相同的檢視畫面名稱,但在名稱前方加上加號 (+),表示這是現有檢視畫面的調整版本。
這項調整會在現有的 flights 檢視畫面中新增 air_carrier 維度:
view: +flights {
dimension: air_carrier {
type: string
sql: ${TABLE}.air_carrier ;;
}
}
這項修正項目可以放在專案中的任何 LookML 檔案,例如模型檔案、檢視表檔案,或專屬的 LookML 檔案。如要瞭解運作方式,請參閱「在 LookML 專案中使用修正項目」一節。
經過修正後,結合原始 LookML,最終結果會像是檢視區塊的原始 LookML:
view: flights {
sql_table_name: flightstats.accidents ;;
dimension: id {
label: "id"
primary_key: yes
type: number
sql: ${TABLE}.id ;;
}
dimension: air_carrier {
type: string
sql: ${TABLE}.air_carrier ;;
}
}
在 Looker 使用者介面中,使用者會看到「航空公司」維度,就像您已將該維度新增至原始檢視區塊檔案一樣。
如需更詳細的實作資訊,請參閱「範例」一節。
與擴展功能相比,精選功能有何不同
Looker 也支援擴充 LookML 物件。如果您想建立現有檢視區塊或探索的新副本,以便在其中新增物件,擴充功能就非常實用。舉例來說,您可以建立定義所有欄位的基本檢視區塊,然後建立多個擴充基本檢視區塊的新檢視區塊。接著,您可以修改這些新檢視區塊,隱藏基本檢視區塊中的特定欄位,或是變更基本檢視區塊中欄位的定義或標籤。
如果您想對現有檢視區塊或探索進行微調或調整特定物件,但不想建立檢視區塊或探索的副本,就可以使用精修功能。如果您無法或不想修改基本檢視區塊或探索,或是建立新檢視區塊或探索需要大幅變更其他 LookML 參照,就非常適合使用分類標籤。如需這個使用案例的範例,請參閱本頁的「範例」一節。
在大多數情況下,精細化是比 extends 更簡單明瞭的替代方案。
進階 LookML 開發人員可能會想在 LookML 修飾中,使用 extends 參數。詳情請參閱本頁的「修飾可包含擴充功能」一節。
微調功能會覆寫大部分的參數
請注意,在大多數情況下,精細化設定會覆寫物件的原始設定。在下列範例中,原始檢視區塊有隱藏維度 (hidden: yes):
view: faa_flights {
dimension: carrier {
hidden: yes
}
}
另一個檔案則使用 hidden: no 修正該維度:
include: "/views/faa_flights.view.lkml"
view: +faa_flights {
dimension: carrier {
hidden: no
}
}
最後的精細化作業會優先處理,因此系統會套用 hidden: no,且維度會顯示在最終檢視畫面中。
在某些情況下,精細調整是加成而非覆寫;詳情請參閱本頁的「部分參數為加成」一節。
部分參數為加法
在許多情況下,如果精細化項目包含與精細化物件相同的參數,精細化項目會覆寫精細化物件的參數值。
但部分參數的精細調整可以是加成,也就是說,系統會一併使用基本物件和精細調整物件的值。
下列參數為加法:
維度和測量指標:
參數:
衍生資料表:
觀看次數:
extends(詳情請參閱本頁的「精細度extends為加成效果」一節)。
探索:
access_filteraggregate_tableextends(詳情請參閱本頁的「精細度extends為加成效果」一節)。joinquery
舉例來說,以下是具有 name 維度和 link 參數的檢視區塊:
view: carriers {
sql_table_name: flightstats.carriers ;;
dimension: name {
sql: ${TABLE}.name ;;
type: string
link: {
label: "Google {{ value }}"
url: "http://www.google.com/search?q={{ value }}"
icon_url: "http://google.com/favicon.ico"
}
}
}
以下是 carriers 檢視區塊的精細程度,其中 name 維度具有 link 參數的不同值:
include: "/views/carriers.view.lkml"
view: +carriers {
label: "Refined carriers"
dimension: name {
sql: ${TABLE}.name ;;
type: string
link: {
label: "Dashboard for {{ value }}"
url: "https://docsexamples.dev.looker.com/dashboards/307?Carrier={{ value }}"
icon_url: "https://www.looker.com/favicon.ico"
}
}
}
在經過修正的 carriers 檢視畫面中,這兩個 link 參數是加法,因此 name 維度會顯示這兩個連結。

系統會依序套用分類標籤
物件可多次在多個位置進行精修,因此 Looker 開發人員可以透過許多創意方式使用精修項目。但這也表示開發人員必須非常注意套用精細化的順序:
- 在專案中,系統會按照檔案的納入順序套用修正內容。最後加入的檔案會覆寫先前加入檔案的修正內容。
- 在單一檔案中,系統會逐行套用精修內容,並以行號最高的精修內容為準,如果發生衝突,系統會覆寫先前的精修內容。
舉例來說,在下列檢視表檔案中,有兩個 faa_flights 檢視區塊的修改設定。第一個精簡項目會隱藏維度 (hidden: yes),第二個精簡項目則會顯示維度 (hidden: no)。如果發生這類衝突,檔案中位置較低的精簡項目會優先處理:
include: "//e_faa_original/views/faa_flights.view.lkml"
view: +faa_flights {
dimension: carrier {
hidden: yes
}
}
view: +faa_flights {
dimension: carrier {
hidden: no
}
}
在專案中納入多個檔案的邏輯也類似:以納入項目中列出的最後一個檔案為準。舉例來說,如果模型檔案包含下列檔案:
include: "/refinements/distance_analysis.lkml"
include: "/refinements/finishing_touches.lkml"
系統會先套用 distance_analysis.lkml 中的所有修正,然後套用 finishing_touches.lkml 檔案中的所有修正。如有任何衝突,系統會優先採用最後一個檔案 (finishing_touches.lkml) 中的修正內容。
使用 final: yes 避免進一步修正
如先前所述,您可以在多個位置多次修正同一物件,而最後一次修正會覆寫所有先前的修正。
如果想將某項精修視為檢視區塊或「探索」的最終精修,可以將 final: yes 旗標新增至該精修。如果現有精細化項目會在這個最終精細化項目後套用,或是開發人員嘗試新增會在這個最終精細化項目後套用的精細化項目,Looker IDE 就會傳回 LookML 錯誤。舉例來說,這個檢視表檔案中的第二個修改設定會產生 LookML 錯誤,因為前一個修改設定有 final: yes 旗標:
include: "//e_faa_original/views/faa_flights.view.lkml"
view: +faa_flights {
final: yes
dimension: carrier {
hidden: yes
}
}
view: +faa_flights {
dimension: carrier {
hidden: no
}
}
在精細化項目中加入 final: yes 標記,可有效驗證精細化項目是否按照預期順序套用。
精細化項目可以包含擴充功能
進階 LookML 開發人員可能會想在 LookML 修訂內容中使用 extends 參數,將擴充物件新增至修訂物件。
extends 和精細化作業的行為摘要如下:
- 擴充物件會建立物件的新副本,然後以該副本為基礎建構。舉例來說,您可以建立定義所有欄位的基础檢視畫面,然後建立多個擴充基礎檢視畫面的新檢視畫面。這些新檢視畫面都會納入基本檢視畫面的副本,開發人員可從中新增不同欄位、篩選器或其他屬性,藉此修改基本檢視畫面中的內容。這個概念是指您先從基礎物件著手,然後在多個其他物件中以不同方式使用該物件。(如要完整瞭解如何使用 extends,請參閱「使用 extends 重複使用程式碼」說明文件頁面)。
- 精修物件會為物件新增一層修改內容,但與擴展不同的是,精修不會製作物件的多個副本。概念是建構基礎物件,但不修改原始 LookML。
以下是精細化標準用法的範例,其中包含名為 orders 的探索,以及精細化該探索的 +orders 探索:
explore: orders {
view_name: orders
# other Explore parameters
}
explore: +orders {
label: "Orders Information"
# other Explore parameters to build on the original Explore
}
此外,您還可以新增包含 extends 的精簡項目。以這個範例為基礎,以下是相同的 orders 探索。但此外,還有一個名為 users_base 的基礎探索,而現在 +orders 精簡項目有 extends 參數,可帶入 users_base:
explore: users_base {
view_name: users
extension: required
# other Explore parameters
}
explore: orders {
view_name: orders
# other Explore parameters
}
explore: +orders {
label: "Orders Information"
extends: [users_base]
# other Explore parameters to build on the original Explore
}
這裡的特別之處在於,+orders 修正包含 extends。因此,+orders 檢視畫面現在會擴充 users_base 探索。
Looker 如何在精修項目中實作 extends
在精修內容中擴充物件是進階的 LookML 概念。在精修中使用 extends 前,請務必深入瞭解下列事項:
- Looker 實作
extends的方式:如果 LookML 元素同時定義在擴充物件和擴充物件中,系統會使用擴充物件中的版本,除非參數是加法。詳情請參閱「使用擴充功能重複使用程式碼」說明文件頁面。 - Looker 實作分類標籤的方式:如果 LookML 元素是在多個分類標籤中定義,最後一個分類標籤會覆寫先前的分類標籤。詳情請參閱本頁的「系統會依序套用精選條件」一節。
最後,您應瞭解 Looker 如何結合這些原則,實作用於精細調整的 extends。以下是 Looker 的實作順序,如果發生衝突,每個步驟都會覆寫前一個步驟:
- 物件中指定的
extends值 - 物件精細化設定中指定的
extends值 - 物件中的值
- 物件的精細化值
為說明這點,以下範例會追蹤 label 參數的值,瞭解實作過程的每個步驟:
explore: orders_base {
label: "Orders Base"
view_name: orders
extension: required
}
explore: users_base {
label: "Users Base"
view_name: users
extension: required
}
explore: orders {
label: "Orders"
extends: [orders_base]
}
explore: +orders {
label: "Orders Refined"
extends: [users_base]
}
以下說明 Looker 如何在本範例中,為 orders 探索實作 label 的值:
- 物件中指定的
extends值。由於orders探索具有extends參數,因此 Looker 會從要擴充的物件 (在本例中為orders_base探索) 開始使用 LookML 元素。此時,label值為「Orders Base」。 - 物件精細化設定中指定的
extends值。由於orders有精簡項目,且精簡項目有extends參數,因此 Looker 會套用精簡項目擴充功能的 LookML 元素,在本例中為users_base探索。此時label的值為「Users Base」。 - 物件中的值。解決所有擴充功能後,Looker 會套用擴充物件的元素,在本例中為「探索」。
orders如有任何衝突,則以擴充物件為準。因此,label值現在是「訂單」。 - 物件精細化的值。最後,Looker 會套用
orders探索的任何修正項目。如有任何衝突,則以精修物件為準。因此,label值現在是「Orders Refined」。
分類標籤 extends 是外加規則
如本頁「精細調整會覆寫參數」一節所述,精細調整通常會覆寫物件的原始設定。但 extends 參數並非如此。在精細化作業中使用 extends 時,extends 參數中的值會附加至原始物件或先前精細化作業中擴充的項目清單 (如有)。如有任何衝突,系統會優先處理擴充鏈中的最後一個項目。
舉例來說,以下是名為 orders_base 的基礎探索,以及擴充基礎探索的 orders 探索。此外,還有「探索」users_base和「精選」+orders,可擴充「探索」users_base:
explore: orders_base {
view_name: orders
extension: required
# other Explore parameters
}
explore: users_base {
view_name: users
extension: required
# other Explore parameters
}
explore: orders {
extends: [orders_base]
# other Explore parameters to build on the base Explore
}
explore: +orders {
extends: [users_base]
# other Explore parameters to build on the base Explores
}
orders 探索會擴充 orders_base,然後 +orders 修正項目會將 users_base 新增至 extends 清單。因此,+orders 探索現在會同時擴充 orders_base 和 users_base,就像這是探索的原始 LookML 一樣:
explore: orders {
extends: [orders_base, users_base]
}
如有任何衝突,系統會優先處理擴充鏈結中的最後一個項目。在本範例中,users_base 中的元素會覆寫 orders_base 中任何衝突的元素。
如要瞭解一次擴充多個物件的概念,請參閱「使用 extends 重複使用程式碼」說明文件頁面。
最後請注意,在本範例中,explore 參數的順序並不重要。但如果同一個物件經過多次修正,修正順序就很重要。如本頁「依序套用修正內容」一節所述,檔案中的最後一個修正內容會覆寫先前的修正內容。
在 LookML 專案中使用精細化
以下是專案中精簡檢視區塊和探索的步驟:
- 找出要調整的檢視畫面或探索。
- 決定要將精修內容放在哪裡。您可以在任何現有的 LookML 檔案中新增修正項目,也可以為修正項目建立個別的 LookML 檔案。(如需建立一般 LookML 檔案的範例,請參閱「瞭解其他專案檔案」說明文件頁面中的建立資料測試檔案程序)。
- 使用
include參數將微調內容併入模型:- 在撰寫精修內容的檔案中,您必須納入要精修的 LookML 檔案。如果您嘗試修正未納入的物件,Looker IDE 會顯示警告。
- 在模型檔案中,加入定義精細調整的檔案。您可以合併檔案,並以極具創意的方式使用 include;詳情請參閱本頁的「使用精細調整為模型新增圖層」一節。
範例
您可以使用 LookML 物件的分類標籤輕鬆調整檢視區塊和探索,不必編輯原始 LookML。如果專案中的檢視畫面和探索是唯讀狀態,例如從其他專案匯入的檔案,這項功能就特別實用。以下是修正探索的範例。
以下是 aircraft Explore 的 LookML:
explore: aircraft {
join: aircraft_types {
type: left_outer
sql_on: ${aircraft.id} = ${aircraft_types.id} ;;
relationship: many_to_one
}
join: aircraft_engine_types {
type: left_outer
sql_on: ${aircraft.id} = ${aircraft_engine_types.id} ;;
relationship: many_to_one
}
}
這個「探索」包含多個檢視畫面,每個檢視畫面都有許多維度。
現在,另一個名為 e_faa_refined 的 LookML 專案會匯入 aircraft「探索」檔案。在 e_faa_refined 專案中,您可以使用精簡功能大幅簡化 aircraft「探索」。
由於aircraft「探索」是匯入的檔案,因此無法直接編輯,但可以新增分類標籤。以下是名為 refinements.lkml 的獨立檔案範例,其中包含這個 LookML:
include: "//e_faa_original/Explores/aircraft.explore.lkml"
explore: +aircraft {
label: "Aircraft Simplified"
fields: [aircraft.aircraft_serial, aircraft.name, aircraft.count]
}
refinements.lkml 檔案包含下列項目:
include參數,可從匯入的專案中帶入原始aircraft.explore.lkml檔案 (如要瞭解如何參照匯入的專案檔案,請參閱「從其他專案匯入檔案」說明文件頁面)。aircraft「探索」的改良之處:
最終結果會如同原始的「探索」和「檢視」aircraftaircraft:
explore: aircraft {
label: "Aircraft Simplified"
}
view: aircraft {
sql_table_name: flightstats.aircraft ;;
dimension: aircraft_serial {
type: string
sql: ${TABLE}.aircraft_serial ;;
}
dimension: name {
type: string
sql: ${TABLE}.name ;;
}
measure: count {
type: count
}
}
如要瞭解如何使用精細調整功能,為多個用途自訂單一檢視區塊,請參閱這篇教戰手冊,瞭解如何運用 DRY LookML 盡量重複使用程式碼:為多個用途自訂單一基本檢視區塊。
其他微調用途
如先前所述,分類標籤非常適合用來調整唯讀的 LookML 物件,例如 Looker Blocks 或匯入的檔案。
但只要掌握新增精修內容並將其納入模型的方法,就能在專案中做出非常酷炫的成果,如下列範例所述。
使用精選項目新增分析
您可以使用分類標籤,在模型中新增分析,不必修改原始 LookML 檔案。舉例來說,如果專案中的檢視區塊和探索是從資料庫中的表格產生,並儲存在名為 faa_basic.lkml 的 LookML 檔案中,您可以建立 faa_analysis.lkml 檔案,並使用分類標籤新增分析。以下是名為 distance_stats 的新衍生資料表範例,其中包含距離分析。這個範例顯示 faa_basic.lkml 檔案中現有 flights「探索」的修訂內容,該檔案會將 distance_stats 衍生資料表彙整至 flights「探索」。此外,在範例底部,現有的 flights 檢視畫面經過修正,新增了分析中的欄位:
include: "faa_basic.lkml"
explore: +flights {
join: distance_stats {
relationship: one_to_one
type: cross
}
}
view: distance_stats {
derived_table: {
explore_source: flights {
bind_all_filters: yes
column: distance_avg {field:flights.distance_avg}
column: distance_stddev {field:flights.distance_stddev}
}
}
dimension: avg {
type:number
sql: CAST(${TABLE}.distance_avg as INT64) ;;
}
dimension: stddev {
type:number
sql: CAST(${TABLE}.distance_stddev as INT64) ;;
}
}
view: +flights {
measure: distance_avg {
type: average
sql: ${distance} ;;
}
measure: distance_stddev {
type: number
sql: STDDEV(${distance}) ;;
}
dimension: distance_tiered2 {
type: tier
sql: ${distance} ;;
tiers: [500,1300]
}
}
使用精修功能為模型新增圖層
另一項有趣的用途是為專案新增圖層。您可以建立多個精修檔案,然後策略性地納入這些檔案,新增圖層。
舉例來說,在 FAA 專案中,有一個 faa_raw.lkml 檔案包含從資料庫中的資料表產生的所有檢視區塊和探索。這個檔案包含資料庫中每個資料表的檢視畫面,每個檢視畫面都有對應的資料庫欄維度。
除了原始檔案,您也可以建立 faa_basic.lkml 檔案,新增含有基本修正內容的圖層,例如在探索中新增聯結,或在檢視畫面中新增指標,如下所示:
include: "faa_raw.lkml"
explore: +flights {
join: carriers {
sql_on: ${flights.carrier} = ${carriers.name} ;;
}
}
view: +flights {
measure: total_seats {
type: sum
sql: ${aircraft_models.seats} ;;
}
}
接著,您可以新增 faa_analysis.layer.lkml 檔案,加入含有分析的新圖層 (如需分析檔案範例,請參閱「使用精細調整新增分析」小節)。
接著,您只需要將所有精修檔案納入模型檔案即可。您也可以使用模型檔案新增精修項目,將檢視畫面指向要參照的資料庫表格:
connection: "publicdata_standard_sql"
include: "faa_raw.lkml"
include: "faa_basic.lkml"
include: "faa_analysis.lkml"
view: +flights {
sql_table_name: lookerdata.faa.flights;;
}
view: +airports {
sql_table_name: lookerdata.faa.airports;;
}
view: +aircraft {
sql_table_name: lookerdata.faa.aircraft;;
}
view: +aircraft_models{
sql_table_name: lookerdata.faa.aircraft_models;;
}
view: +carriers {
sql_table_name: lookerdata.faa.carriers;;
}
您可以複製這個模型檔案並指向不同的資料庫表格,也可以納入您建立的不同精修檔案,定義模型中所需的其他層。
使用 PDT 的精細化功能
如本頁「與擴充功能相比的改進項目」一節所述,擴充功能會建立所擴充物件的新副本。就永久衍生資料表 (PDT) 而言,您不應使用擴充功能,因為 PDT 的每個擴充功能都會在資料庫中建立資料表的新副本。
不過,您可以為 PDT 檢視畫面新增精細調整,因為精細調整不會建立經過精細調整的物件副本。
使用中繼資料查看物件的精細度
您可以在 Looker IDE 中點選 explore 或 view 參數,並使用中繼資料面板查看物件的任何修正。詳情請參閱「LookML 物件的中繼資料」說明文件頁面。
注意事項
已本地化的專案
請注意,微調物件時,本地化規則也適用於微調項目。如果您要修正物件,然後定義新的標籤或說明,請在專案的語言代碼字串檔案中提供本地化定義。詳情請參閱「將 LookML 模型本地化」說明文件頁面。