在 LookML 中使用彙整

彙整可讓您連結不同的檢視畫面,同時探索多個檢視畫面的資料,瞭解不同資料之間的關聯。

舉例來說,資料庫可能包含 order_itemsordersusers 等資料表。您可以使用彙整功能,同時探索所有資料表的資料。本頁面說明 LookML 中的彙整作業,包括特定彙整參數和彙整模式。

彙整作業會從「探索」開始

模型檔案會定義彙整,以建立探索檢視畫面之間的關係。彙整作業可將一個或多個檢視畫面直接或透過另一個彙整的檢視畫面連結至單一「探索」檢視畫面。

請考慮兩個資料庫資料表:order_itemsorders。為兩個資料表產生檢視畫面後,請在模型檔案的 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 可完成兩件事:首先,您可以在探索欄位挑選工具中,查看 ordersorder_items 的欄位:

「訂購商品」探索會納入「訂購商品」檢視畫面和已彙整「訂單」檢視畫面的欄位。

其次,LookML 會說明如何彙整 ordersorder_items。系統會將該 LookML 轉譯為下列 SQL:

SELECT ...
FROM order_items
LEFT JOIN orders
ON order_items.order_id = orders.id

下節將詳細說明這些 LookML 參數。

彙整參數

四個主要參數可用於彙整:jointyperelationshipsql_on

步驟 1:開始探索

首先,建立 order_items 探索:

explore: order_items { ... }

步驟 2:join

如要彙整資料表,您必須先在檢視畫面中宣告資料表。在本例中,假設 orders 是模型中現有的檢視畫面。

接著,請使用 join 參數宣告您要將 orders 檢視畫面加入 order_items Explore:

explore: order_items {
  join: orders { ... }
}

步驟 3:type

請考慮要執行哪種類型的彙整。Looker 支援 LEFT JOININNER JOINFULL OUTER JOINCROSS JOIN。這些值對應至 type 參數的 left_outerinnerfull_outercross 值。

explore: order_items {
  join: orders {
    type: left_outer
  }
}

type 的預設值為 left_outer

步驟 4:relationship

定義 order_items Explore 與 orders 檢視畫面之間的彙整關係。正確宣告彙整關係對於 Looker 計算正確的評估指標至關重要。這項關聯關係的定義是「從」order_items「探索」「到」orders 檢視畫面。可能的選項包括 one_to_onemany_to_oneone_to_manymany_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_itemsorders 的欄位。

如要進一步瞭解如何在探索中測試 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 檢視畫面現在必須在彙整中以別名名稱 buyerssellers 參照。

限制彙整的欄位

您可以使用 fields 參數,指定要從彙整帶入探索的欄位。根據預設,彙整時會加入檢視畫面中的所有欄位。不過,您可能只想匯入部分欄位。

舉例來說,當 ordersorder_items 彙整時,您可能只想透過彙整作業取得 shippingtax 欄位:

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]
}

ordersorder_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 中的彙整參數,請參閱彙整參考資料說明文件。