彙整可讓您連結不同的檢視畫面,同時探索多個檢視畫面的資料,瞭解不同資料之間的關聯。
舉例來說,資料庫可能包含 order_items
、orders
和 users
等資料表。您可以使用彙整功能,同時探索所有資料表的資料。本頁面說明 LookML 中的彙整作業,包括特定彙整參數和彙整模式。
彙整作業會從「探索」開始
模型檔案會定義彙整,以建立探索與檢視畫面之間的關係。彙整作業可將一個或多個檢視畫面直接或透過另一個彙整的檢視畫面連結至單一「探索」檢視畫面。
請考慮兩個資料庫資料表:order_items
和 orders
。為兩個資料表產生檢視畫面後,請在模型檔案的 explore
參數下方宣告一或多個檢視畫面:
explore: order_items { ... }
從 order_items
Explore 執行查詢時,order_items
會顯示在產生 SQL 的 FROM
子句中:
SELECT ...
FROM order_items
您可以將其他資訊加入 order_items
「探索」頁面。舉例來說,您可以使用下列 LookML 範例,將 orders
檢視畫面與 order_items
探索畫面彙整:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
}
先前顯示的 LookML 可完成兩件事:首先,您可以在探索欄位挑選工具中,查看 orders
和 order_items
的欄位:
其次,LookML 會說明如何彙整 orders
和 order_items
。系統會將該 LookML 轉譯為下列 SQL:
SELECT ...
FROM order_items
LEFT JOIN orders
ON order_items.order_id = orders.id
下節將詳細說明這些 LookML 參數。
彙整參數
四個主要參數可用於彙整:join
、type
、relationship
和 sql_on
。
步驟 1:開始探索
首先,建立 order_items
探索:
explore: order_items { ... }
步驟 2:join
如要彙整資料表,您必須先在檢視畫面中宣告資料表。在本例中,假設 orders
是模型中現有的檢視畫面。
接著,請使用 join
參數宣告您要將 orders
檢視畫面加入 order_items
Explore:
explore: order_items {
join: orders { ... }
}
步驟 3:type
請考慮要執行哪種類型的彙整。Looker 支援 LEFT JOIN
、INNER JOIN
、FULL OUTER JOIN
和 CROSS JOIN
。這些值對應至 type
參數的 left_outer
、inner
、full_outer
和 cross
值。
explore: order_items {
join: orders {
type: left_outer
}
}
type
的預設值為 left_outer
。
步驟 4:relationship
定義 order_items
Explore 與 orders
檢視畫面之間的彙整關係。正確宣告彙整關係對於 Looker 計算正確的評估指標至關重要。這項關聯關係的定義是「從」order_items
「探索」「到」orders
檢視畫面。可能的選項包括 one_to_one
、many_to_one
、one_to_many
和 many_to_many
。
在這個範例中,單筆訂單可能包含多項訂單商品。order_items
「探索」與 orders
檢視畫面的關係為 many_to_one
:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
}
}
如果在彙整中未加入 relationship
參數,Looker 會預設為 many_to_one
。
如要進一步瞭解如何正確定義彙整作業的 relationship
參數,請參閱「正確使用 relationship
參數」。
步驟 5:sql_on
宣告如何彙整 order_items
資料表和 orders
資料表,以及 sql_on
參數或 foreign_key
參數。
sql_on
參數等同於查詢所產生 SQL 中的 ON
子句。您可以使用這個參數,宣告要比對哪些欄位以執行彙整作業:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
}
您也可以編寫更複雜的彙整作業。舉例來說,您可能只想彙整 id
大於 1000 的訂單:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} AND ${orders.id} > 1000 ;;
}
}
如要進一步瞭解這些範例中的 ${ ... }
語法,請參閱替換運算子說明文件。
步驟 6:測試
前往「訂購商品」探索,測試這項彙整作業是否正常運作。您應該會看到 order_items
和 orders
的欄位。
如要進一步瞭解如何在探索中測試 LookML 異動,請參閱「測試探索中的欄位」。
透過其他檢視畫面加入
您可以透過另一個檢視畫面,將檢視畫面加入探索。在參數彙整範例中,您透過 order_id
欄位將 orders
彙整至 order_items
。我們也可能想將來自名為 users
的檢視畫面資料彙整至 order_items
Explore,即使兩者沒有共用欄位也一樣。方法是透過 orders
檢視畫面進行彙整。
請使用 sql_on
參數或 foreign_key
參數,將 users
檢視畫面連結至 orders
檢視畫面,而非 order_items
「探索」檢視畫面。方法是將 orders
的欄位正確設定為 orders.user_id
。
以下是使用 sql_on
參數的範例:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
join: users {
type: left_outer
relationship: many_to_one
sql_on: ${orders.user_id} = ${users.id} ;;
}
}
重複加入檢視畫面
users
檢視畫面包含買家和賣家的資料。如要將此檢視畫面中的資料彙整至 order_items
,但要分別為買方和賣方彙整資料,您可以使用 from
參數,兩次彙整 users
,並使用不同的名稱。
from
參數可讓您指定在彙整中要使用的檢視畫面,並為彙整命名。例如:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
join: buyers {
from: users
type: left_outer
relationship: many_to_one
sql_on: ${orders.buyer_id} = ${buyers.id} ;;
}
join: sellers {
from: users
type: left_outer
relationship: many_to_one
sql_on: ${orders.seller_id} = ${sellers.id} ;;
}
}
在這種情況下,只有買方資料會以 buyers
的形式彙整,而賣方資料則會以 sellers
的形式彙整。
注意:users
檢視畫面現在必須在彙整中以別名名稱 buyers
和 sellers
參照。
限制彙整的欄位
您可以使用 fields
參數,指定要從彙整帶入探索的欄位。根據預設,彙整時會加入檢視畫面中的所有欄位。不過,您可能只想匯入部分欄位。
舉例來說,當 orders
與 order_items
彙整時,您可能只想透過彙整作業取得 shipping
和 tax
欄位:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
fields: [shipping, tax]
}
}
您也可以參照欄位集合,例如 [set_a*]
。每個集合都會在檢視畫面中使用 set
參數定義。假設您在 orders
檢視畫面中定義了下列集合:
set: orders_set {
fields: [created_date, shipping, tax]
}
將 orders
與 order_items
彙整時,您可以選擇只保留這三個欄位:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
fields: [orders_set*]
}
}
對稱式匯總函式
Looker 會使用名為「對稱匯總」的功能,正確計算匯總 (例如加總和平均值),即使彙整結果會產生分支也一樣。如要進一步瞭解對稱匯總,請參閱「瞭解對稱匯總」一文。SQL 扇形展開問題社群貼文說明瞭對稱匯總解決的扇形展開問題。
必須有主鍵
如要透過彙整 (匯總) 加入指標,您必須在所有參與彙整的資料檢視中定義主鍵。
方法是在每個檢視表的主鍵欄位定義中加入 primary_key
參數:
dimension: id {
type: number
primary_key: yes
}
支援的 SQL 方言
如要讓 Looker 在 Looker 專案中支援對稱匯總,資料庫方言也必須支援對稱匯總。下表列出哪些方言支援 Looker 最新版本的對稱匯總:
方言 | 是否支援? |
---|---|
Actian Avalanche | 是 |
Amazon Athena | 是 |
Amazon Aurora MySQL | 是 |
Amazon Redshift | 是 |
Amazon Redshift 2.1+ | 是 |
Amazon Redshift Serverless 2.1+ | 是 |
Apache Druid | 否 |
Apache Druid 0.13+ | 否 |
Apache Druid 0.18+ | 否 |
Apache Hive 2.3+ | 否 |
Apache Hive 3.1.2+ | 否 |
Apache Spark 3+ | 是 |
ClickHouse | 否 |
Cloudera Impala 3.1+ | 是 |
Cloudera Impala 3.1+ with Native Driver | 是 |
Cloudera Impala with Native Driver | 否 |
DataVirtuality | 是 |
Databricks | 是 |
Denodo 7 | 是 |
Denodo 8 | 是 |
Dremio | 否 |
Dremio 11+ | 是 |
Exasol | 是 |
Firebolt | 是 |
Google BigQuery Legacy SQL | 是 |
Google BigQuery Standard SQL | 是 |
Google Cloud PostgreSQL | 是 |
Google Cloud SQL | 是 |
Google Spanner | 是 |
Greenplum | 是 |
HyperSQL | 否 |
IBM Netezza | 是 |
MariaDB | 是 |
Microsoft Azure PostgreSQL | 是 |
Microsoft Azure SQL Database | 是 |
Microsoft Azure Synapse Analytics | 是 |
Microsoft SQL Server 2008+ | 是 |
Microsoft SQL Server 2012+ | 是 |
Microsoft SQL Server 2016 | 是 |
Microsoft SQL Server 2017+ | 是 |
MongoBI | 否 |
MySQL | 是 |
MySQL 8.0.12+ | 是 |
Oracle | 是 |
Oracle ADWC | 是 |
PostgreSQL 9.5+ | 是 |
PostgreSQL pre-9.5 | 是 |
PrestoDB | 是 |
PrestoSQL | 是 |
SAP HANA | 是 |
SAP HANA 2+ | 是 |
SingleStore | 是 |
SingleStore 7+ | 是 |
Snowflake | 是 |
Teradata | 是 |
Trino | 是 |
Vector | 是 |
Vertica | 是 |
如果方言不支援對稱匯總,請在 Looker 中執行彙整時小心操作,因為某些類型的彙整 (例如加總和平均值) 可能會導致匯總結果不準確。如要瞭解這個問題和解決方法,請參閱 SQL 扇形展開問題社群文章。
進一步瞭解彙整
如要進一步瞭解 LookML 中的彙整參數,請參閱彙整參考資料說明文件。