本頁面是指欄位中的
sql參數。如
sql(適用於衍生資料表) 參數說明文件頁面所述,sql也可用於衍生資料表。
用量
view: view_name {
dimension: field_name {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
}
}
|
階層
sql |
可能的欄位類型
維度、維度群組、篩選器、指標
接受
SQL 運算式
特別規則
SQL 運算式,會因欄位的 type 而異 (詳情請參閱本說明文件頁面)
|
定義
sql 參數會採用多種 SQL 運算式,用於定義維度、測量指標或篩選器。您需要編寫的運算式會因建立的欄位類型而異。如要進一步瞭解維度和篩選器類型,請參閱「維度、篩選器和參數類型」說明文件頁面;如要進一步瞭解測量指標類型,請參閱「測量指標類型」說明文件頁面。另請參閱「併入 SQL 並參照 LookML 物件」說明文件頁面。
sql 代表維度
維度的 sql 區塊通常可採用任何有效的 SQL,填入 SELECT 陳述式的單一資料欄。這些陳述式通常會使用 Looker 的替代運算子,該運算子有幾種形式:
${TABLE}.column_name參照的資料表資料欄與您目前使用的檢視畫面相連。${dimension_name}參照您目前使用的檢視區塊中的維度。${view_name.dimension_name}參照其他檢視區塊的維度。${view_name.SQL_TABLE_NAME}參照其他檢視區塊或衍生資料表。(請注意,本參考資料中的SQL_TABLE_NAME是字串常值,您不需要將其替換為任何內容)。
如果未指定 sql,Looker 會假設基礎資料表中有一個與欄位同名的資料欄。舉例來說,選取名為 city 的欄位,但不提供 sql 參數,就等同於指定 sql: ${TABLE}.city。
維度的
sql參數不得包含任何匯總。也就是說,不得包含 SQL 匯總或 LookML 測量指標的參照。如要建立含有 SQL 匯總或參照 LookML 測量的sql欄位,請在測量中使用sql參數,而非維度。
如果維度非常簡單,直接從名為 revenue 的資料欄取得值,則可能如下所示:
dimension: revenue_in_cents {
sql: ${TABLE}.revenue ;;
type: number
}
如果維度依附於同一檢視區塊中的另一個維度,可能會像這樣:
dimension: revenue_in_dollars {
sql: ${revenue_in_cents} / 100 ;;
type: number
}
如果維度依附於不同檢視區塊中的另一個維度,可能會出現以下情況:
dimension: profit_in_dollars {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
type: number
}
依附於衍生資料表中另一個維度的維度可能如下所示:
dimension: average_margin {
sql: (SELECT avg(${gross_margin} FROM ${order_facts.SQL_TABLE_NAME})) ;;
type: number
}
進階 SQL 使用者可以執行相對進階的計算,包括相關子查詢 (注意:並非所有資料庫方言都支援相關子查詢):
dimension: user_order_sequence_number {
type: number
sql:
(
SELECT COUNT(*)
FROM orders AS o
WHERE o.id <= ${TABLE}.id
AND o.user_id = ${TABLE}.user_id
) ;;
}
詳情請參閱特定維度類型的說明文件。
sql 代表維度群組
dimension_group 的 sql 參數可接受任何有效的 SQL 運算式,其中包含時間戳記、日期時間、日期、紀元或 yyyymmdd 格式的資料。
sql 適用於度量
指標的 sql 區塊通常會採用下列兩種形式之一:
舉例來說,如要計算美元總收益,我們可能會使用:
measure: total_revenue_in_dollars {
sql: ${revenue_in_dollars} ;;
type: sum
}
如要計算總利潤,我們可能會使用:
measure: total_revenue_in_dollars {
sql: ${total_revenue_in_dollars} - ${inventory_item.total_cost_in_dollars} ;;
type: number
}
詳情請參閱特定指標類型的說明文件。
如果是 count 測量類型,可以省略 sql 參數。
如果是其他類型的指標,如果未指定 sql,Looker 會假設基礎資料表中有一個與欄位同名的資料欄。由於指標的名稱應指出這是基礎值集的匯總,因此在實務上,您應一律加入 sql 參數。
SQL 數學挑戰
sql 參數中的除法經常會遇到兩個問題。
首先,如果您在計算中使用除法,請防範除以零的可能性,否則會導致 SQL 錯誤。如要這麼做,請使用 SQL NULLIF 函式。舉例來說,這個範例表示「如果分母為零,請改為視為 NULL」:
measure: active_users_percent {
sql: ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
另一個問題是 SQL 處理整數運算的方式。如果將 5 除以 2,大多數人會預期結果為 2.5。不過,許多 SQL 方言只會傳回 2,因為當兩個整數相除時,結果也會是整數。如要解決這個問題,您可以將分子乘以十進位數字,強制 SQL 傳回十進位結果。例如:
measure: active_users_percent {
sql: 100.00 * ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
使用 sql 的 Liquid 變數
您也可以搭配 sql 參數使用 Liquid 變數。您可以使用 Liquid 變數存取資料,例如欄位中的值、欄位相關資料,以及套用至欄位的篩選條件。
舉例來說,這個維度會根據 Looker 使用者屬性遮蓋顧客密碼:
dimension: customer_password {
sql:
{% if _user_attributes['pw_access'] == 'yes' %}
${password}
{% else %}
"Password Hidden"
{% endif %} ;;
}