總覽
透過 LookML 修飾,您可以調整現有的檢視區塊或探索,不必編輯包含這些項目的 LookML 檔案。非常適合:
- 使用預建 LookML 片段的Looker Blocks 專案
- 從其他專案匯入檔案的專案
- 您經常需要從資料庫中的表格產生檔案的專案
- 您想在模型或專案之間共用 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,最終結果會像是檢視的原始 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_filter
aggregate_table
extends
(詳情請參閱本頁的「精細度extends
是加法」一節)。join
query
舉例來說,以下是具有 link
維度和 link
參數的檢視區塊:name
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
}
}
在專案中加入多個檔案的邏輯也類似:以 includes 中列出的最後一個檔案為準。舉例來說,如果模型檔案包含下列檔案:
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 元素同時定義在「擴充」物件和「擴充中」物件中,系統會使用擴充中物件的版本,除非參數是「加法」。詳情請參閱「使用 extends 重複使用程式碼」說明文件頁面。 - 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
值現在是「Orders」。 - 物件精細化的值。最後,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
Explore 現在會同時擴充 orders_base
和 users_base
,就像這是 Explore 的原始 LookML 一樣:
explore: orders {
extends: [orders_base, users_base]
}
接著,如有任何衝突,系統會優先處理擴充鏈中的最後一個項目。在本例中,users_base
中的元素會覆寫 orders_base
中任何衝突的元素。
如要瞭解一次擴充多個物件的概念,請參閱「使用 extends 重複使用程式碼」說明頁面。
最後,請注意,在本範例中,explore
參數的順序並不重要。但如果對同一物件進行多次精修,精修順序就很重要。如本頁「依序套用修正」一節所述,檔案中的最後一項修正會覆寫先前的修正。
在 LookML 專案中使用精細化
以下是專案中精簡檢視區塊和探索的步驟:
- 找出要調整的檢視畫面或探索。
- 決定要將精修項目放在哪個位置。您可以在任何現有的 LookML 檔案中新增精細化項目,也可以為精細化項目建立個別的 LookML 檔案。(如需建立一般 LookML 檔案的範例,請參閱「瞭解其他專案檔案」說明文件頁面上的建立資料測試檔案程序)。
- 使用
include
參數將修正內容併入模型:- 在撰寫精修內容的檔案中,您必須納入要精修的 LookML 檔案。如果您嘗試修正未納入的物件,Looker IDE 會顯示警告。
- 在模型檔案中,加入定義精修項目的檔案。您可以合併檔案,並以極具創意的方式使用 include;詳情請參閱本頁的「使用精修功能為模型新增圖層」一節。
範例
只要調整 LookML 物件,就能輕鬆調整檢視區塊和 Explore,不必編輯原始 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
「探索」的修正項目:
最終結果會如同原始的「探索」和「檢視」aircraft
aircraft
:
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
的新衍生資料表範例,其中包含距離分析。這個範例顯示現有 flights
探索的修正內容,該探索來自 faa_basic.lkml
檔案,會將 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 模型本地化」說明文件頁面。