常見的 LookML 模式

本頁面說明 LookML 中常見的下列模式:

標記欄位 (和 UI 中的名稱)

Looker 會將 LookML 欄位名稱轉換為 UI 顯示的字串,方法是將一般權重的檢視區塊名稱與粗體欄位簡稱合併。舉例來說,「訂單」檢視畫面中名為「金額」的欄位,在使用者介面中會顯示為「訂單金額」。為清楚說明,本頁面會將欄位名稱加粗,並將檢視區塊名稱大寫 (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"]
}

百分比

許多關鍵績效指標都會以百分比表示,例如「退貨商品百分比」、「促成銷售的電子郵件百分比」,或是其他「Y 的 X 百分比」的例子。在 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 最強大的功能之一,就是能夠深入瞭解資料,查看構成計數或其他指標的基礎實體。

在使用者介面中點選指標時,Looker 會建立新的查詢,以找出構成指標的資料集。表格中資料列的每個維度值都會新增至

如要顯示詳細資料,Looker 需要指定鑽取欄位清單,以便在點選指標值時顯示。產生模型時,產生器通常會為您建立一些初始的下鑽欄位。此外,您也可以自行新增下鑽欄位。舉例來說,假設您要評估上週的訂單數量 (依使用者狀態)。在 Looker 中,查詢會類似於下列內容:

使用者所在州/省訂單數
加州24
德州5
科羅拉多州4
佛羅里達州4
伊利諾州4

如果您按一下「加州」列中的「24」,您可能會看到來自加州的 24 筆訂單。雖然 Looker 會新增「USERS State: California」篩選器,但 Looker 不知道您要在訂單中顯示哪些欄位。您必須先使用集合在模型中宣告這些欄位。

在 LookML 中,「集合」是欄位 (維度、指標和篩選器) 名稱的清單。您可以使用集合向 Looker 提供下列資訊:

  • 您想在深入瞭解計數或其他指標時顯示的欄位
  • 在彙整檢視畫面時要匯入的欄位
  • 要在探索中建立索引的欄位

由於模型中的許多位置都可以使用同一組,因此 Looker 提供多種建立集合的方法。

常值集

定義 LookML 中的集合時,如果集合只會使用一次,建議採用字面值集合。如要建立字面值集,請將該集宣告為陣列。您可以使用 [] 宣告字面值集。

請見如下範例:

view: customers {
  dimension: id {
    primary_key: yes
  }
  measure: count {
    type: count
  }
  dimension: city {}
  dimension: state {}
  dimension: name {}
}

在本範例中,您要顯示的欄位是 idnamecity

在度量中,您可以宣告常值陣列,如下所示:

measure: count {
  type: count
  drill_fields: [id, name, city]
}

已命名的集合

假設 customers 檢視畫面中定義了兩個計數:countin_california_count。當使用者在「探索」中深入瞭解「Count」欄位或「In California Count」欄位時,您想要顯示 idnamecity 欄位。

一開始,直接宣告這些欄位似乎就足夠:

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 管理員已啟用「視覺化向下鑽取」實驗室功能,系統就不會一律以資料表顯示 Look 和探索的向下鑽取視覺化內容。在這種情況下,您可以在 link 參數中使用 Liquid 變數,自訂顯示的視覺化效果,如 link 參數說明文件和「更強大的資料鑽取功能」最佳做法頁面所示。

資訊主頁支援使用 link 參數進行視覺鑽取,不需啟用「視覺鑽取」實驗室功能。

篩選結果集

LookML 提供一組篩選作業,可套用至欄位和探索,在結果集傳回給使用者前進行篩選。

「探索」頁面上的 always_filter

使用 always_filter,對在探索中執行的任何查詢一律套用一組篩選器。篩選器會顯示在 Looker 使用者介面中,使用者可以變更您提供的預設篩選條件值,但無法移除篩選器。一般來說,這些篩選器是用來移除您通常不想納入的資料。舉例來說,假設您只想在「訂單」探索中查看已完成或待處理的訂單,您可以新增下列 LookML 程式碼:

explore: orders {
  view_name: order
    filters: [status: "complete,pending"]
  }
}

如果使用者想查看其他狀態值的訂單,可以在 UI 中將「ORDERS Status」(訂單狀態) 設為「%」。

「探索」頁面上的 sql_always_where

如要套用使用者無法變更的查詢限制,可以使用 sql_always_where。除了使用者執行的查詢外,這項限制也適用於資訊主頁、排程 Look 圖表,以及依據該探索建立的內嵌資訊。除非使用者查看自己建立的任何查詢的基礎 SQL,否則不會看到 sql_always_where 條件。

以下範例可防止使用者查看 2012 年 1 月 1 日之前的訂單:

# 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_dateshipped_timeshipped_dateorders.idcustomer.name。如果使用者未篩選任何這些欄位,Looker 會自動在 orders.created_time 上新增 1 天的篩選器。

  filters: [orders.created_time: "1 day"]
  unless: [created_date, shipped_time, shipped_date, orders.id, customer.name]
}