本頁面將說明 LookML 中的下列常見模式:
標示欄位 (以及 UI 中的名稱)
Looker 會將 LookML 欄位名稱轉換成 UI 顯示的字串,方法是將以一般粗細字體顯示的檢視畫面名稱,與以粗體顯示的欄位簡稱合併。舉例來說,Orders 檢視畫面中的「Amount」欄位會在 UI 中顯示為「Orders」欄位。為了讓討論內容更清楚,本頁會將兩個欄位名稱加粗,並將檢視名稱改為大寫 (ORDERS Amount)。
如果您希望欄位的名稱與資料表中的欄名稱不同,請變更欄位名稱,並使用 sql
參數將欄位連結至資料表中的適當欄。在以下範例中,airports
資料表包含 cntrl_twr
欄。Looker 會產生以下宣告:
view: airports {
dimension: cntrl_twr { # full name: airports.cntrl_twr
type: yesno # default name: AIRPORT Cntrl Twr (Yes/No)
sql: ${TABLE}.cntrl_twr ;; # the sql expression for this field
}
}
您可以將 cntrl_twr
維度重新命名為人類可讀的名稱:
view: airports {
dimension: has_control_tower { # full name: airports.has_control_tower
type: yesno # aliased name: AIRPORTS Has Control Tower (Yes/No)
sql: ${TABLE}.cntrl_twr ;; # the sql expression for this field
}
}
依據維度篩選計數
您可以依維度和實體計數進行分組,例如依「使用者國家/地區」和「訂單計數」分組,即可瞭解訂單來自哪些國家/地區。不過,建立以某些維度值篩選的計數值通常很有用。舉例來說,您可以建立新的評估指標並命名為「ORDERS France Count」:
view: users {
dimension: country {}
}
view: orders {
dimension: id {
primary_key: yes
sql: ${TABLE}.id ;;
}
measure: count {
type: count
drill_fields: [detail]
}
measure: france_count {
type: count # COUNT(CASE WHEN users.country = 'France' THEN 1 ELSE NULL END)
filters: [users.country: "France"]
}
}
篩選器可以使用任何運算式。如果您想要建立一個用來計算歐盟使用者的欄位,可以使用以下範例:
measure: eu_count {
type: count # COUNT(CASE WHEN users.countrycode IN 'UK','FR','ES' THEN 1 ELSE NULL END)
drill_fields: [detail]
filters: [users.countrycode: "UK,FR,ES"]
}
如要使用數學運算式進行篩選,請務必在運算式前後加上雙引號:
measure: total_orders_above_100_dollars {
type: sum # SUM(CASE WHEN order.value > 100 THEN order.value ELSE NULL END)
sql: ${order.value} ;;
drill_fields: [detail]
filters: [order.value: ">100"]
}
百分比
許多關鍵績效指標都是以百分比表示,例如「退貨百分比」、「促成銷售的電子郵件百分比」,或其他「X 與 Y 的百分比」等。在 LookML 中,設計模式是為這兩個條件建立計數,並建立第三個欄位,計算這兩者之間的百分比。
dimension: returned {
type: yesno
}
measure: count { # total count of items
type: count_distinct
sql: ${TABLE}.id ;;
drill_fields: [detail]
}
measure: returned_count { # count of returned items
type: count_distinct
sql: ${TABLE}.id ;;
drill_fields: [detail]
filters: [returned: "Yes"]
}
measure: percent_returned {
type: number
sql: 100.0 * ${returned_count} / NULLIF(${count}, 0) ;;
value_format: "0.00"
}
請使用下列格式計算百分比。在 Postgres 中,計數為整數,整數之間的除法結果為整數。乘以 100.0 會將第一個計數轉換為浮點數,進而將運算式的其餘部分轉換為浮點數。為避免除以零錯誤,NULLIF(value, 0)
會將零值轉換為空值,讓結果為空值並避免發生錯誤。
100.0 * ${returned_count} / NULLIF(${count}, 0)
使用集合來查看詳細資料
Looker 最強大的功能之一,就是能夠深入探討資料,查看構成計數或其他評量指標的基礎實體。
當您在 UI 中按一下評估指標時,Looker 會建立新查詢,以便將組成評估指標的資料集本地化。表格中每列每個維度的每個值都會加進
如要顯示詳細資料,Looker 需要指定的鑽研欄位清單,以便在點選評量值時顯示。產生模型時,產生器通常會為您建立一些初始鑽研欄位。此外,您也可以自行新增鑽研欄位。舉例來說,假設您要根據過去一週的使用者狀態評估訂單數量。在 Looker 中,查詢會如下所示:
USERS 狀態 | 訂單數量 |
---|---|
加州 | 24 |
德州 | 5 |
科羅拉多州 | 4 |
佛羅里達州 | 4 |
伊利諾州 | 4 |
如果您在「加州」資料列中按一下「24」,系統可能會顯示來自加州的 24 筆訂單。雖然 Looker 會新增「使用者所在州:加州」篩選器,但它不知道您想在訂單中顯示哪些欄位。您必須先使用集合,在模型中宣告這些欄位。
在 LookML 中,「集合」是指欄位 (維度、評估項目和篩選器) 名稱的清單。您可以使用集合向 Looker 提供下列資訊:
- 在深入查看計數或其他評量時要顯示的欄位
- 彙整檢視畫面時要匯入的欄位
- 您希望在探索中建立索引的欄位
同一個集合可用於模型的多個位置,因此 Looker 提供多種建立集合的方法。
文字集
在 LookML 中定義集合的簡單方法是使用字面值集,尤其是當集合只使用一次時。您可以將集合宣告為陣列,藉此建立文字集。您可以使用 []
宣告文字常值集。
請見如下範例:
view: customers {
dimension: id {
primary_key: yes
}
measure: count {
type: count
}
dimension: city {}
dimension: state {}
dimension: name {}
}
在本範例中,您要顯示的欄位是 id
、name
和 city
。
在評估指標中,您可以宣告常值陣列,如下所示:
measure: count {
type: count
drill_fields: [id, name, city]
}
命名集合
假設 customers
檢視畫面中定義了兩個計數:count
和 in_california_count
。當使用者在探索中深入查看「Count」欄位或「In California Count」欄位時,您想顯示 id
、name
和 city
欄位。
一開始,宣告這些欄位的值似乎就足夠了:
view: customers {
measure: count {
type: count
drill_fields: [id, name, city]
}
measure: in_california_count {
type: count
filters: [state: "California"]
drill_fields: [id, name, city]
}
}
不過,如果您想新增欄位 (例如 customers.state
),就必須編輯這兩份清單,除非您使用 set
參數建立命名集,這樣就能在一個位置維護資料,並在多個位置使用。
以下程式碼會建立一組 customers.detail
,並將兩個計數指向相同的欄位組合。
view: customers {
set: detail {
fields: [id, name, city] # creates named set customers.detail
}
measure: count {
type: count
drill_fields: [detail*] # show fields in the set "customers.detail"
}
measure: in_california_count {
type: count
filters: [state: "California"]
drill_fields: [detail*] # show fields in the set "customers.detail"
}
}
LookML 集合具有下列強大功能:
- 重新宣告集合時,會以累加方式進行。如果您在多個位置宣告集合,Looker 就會在所有位置納入為該集合宣告的所有欄位。
- 如要將集合嵌入其他集合中,請輸入其他集合名稱後加上星號,例如
setname*
。 - 如要從集合中移除元素,請在欄位名稱前面加上連字號,例如
-fieldname
。
自訂細查視覺化效果
如果 Looker 管理員已啟用視覺鑽研 Labs 功能,Look 和 Explore 的鑽研圖表視覺化效果不會一律預設為資料表。在這種情況下,您可以使用 link
參數中的 Liquid 變數自訂要顯示的圖表,如 link
參數說明文件和更強大的資料鑽研最佳做法頁面所示。
資訊主頁支援使用 link
參數的視覺鑽研功能,無須啟用視覺鑽研 Labs 功能。
篩選結果集
LookML 提供一組篩選運算,可套用至欄位和探索,在將結果集傳回使用者前進行篩選。
在「探索」中按下 always_filter
使用 always_filter
一律將一組篩選器套用至在探索中執行的任何查詢。篩選器會顯示在 Looker UI 中,雖然使用者可以變更您提供的預設篩選器值,但無法移除篩選器。一般來說,這些篩選器可用來移除您平常不想納入的資料。舉例來說,假設你只想在「訂單」探索中查看已完成或待處理的訂單。您可以加入下列 LookML 程式碼:
explore: orders {
view_name: order
filters: [status: "complete,pending"]
}
}
如果使用者想查看其他狀態值的訂單,可以在 UI 中將「訂單狀態」設為 %。
在「探索」中按下 sql_always_where
如果您想套用使用者無法變更的查詢限制,可以使用 sql_always_where
。除了由人類使用者執行的查詢,這項限制也適用於資訊主頁、排程設定的 Look 圖表,以及依賴該 Explore 的內嵌資訊。除非使用者查看所建立查詢的基礎 SQL,否則系統不會向使用者顯示 sql_always_where
條件。
以下範例會禁止使用者查看 2012-01-01 之前的訂單:
# Using Looker references
explore: order {
sql_always_where: ${created_date} >= '2012-01-01' ;;
}
# Using raw SQL
explore: order {
sql_always_where: DATE(created_time) >= '2012-01-01' ;;
}
在「探索」中按下 conditionally_filter
查詢非常大型的資料表時,請三思而後行,因為無限的查詢很快就會對資料庫造成負擔。LookML 提供 conditionally_filter
的形式,可解決這項問題。
除非使用者已為 unless
區段中列出的其中一個欄位新增篩選器,否則您可以使用 conditionally_filter
參數為查詢套用篩選器。
如果使用者對下列任一或多個欄位套用篩選器 (created_date
、shipped_time
、shipped_date
、orders.id
或 customer.name
),下列範例就不會對使用者的查詢進行任何變更。如果使用者未針對任何欄位套用篩選條件,Looker 會自動在 orders.created_time
上新增 1 天的篩選器。
filters: [orders.created_time: "1 day"]
unless: [created_date, shipped_time, shipped_date, orders.id, customer.name]
}