在 LookML 中使用彙整

您可以透過聯結功能連結不同的檢視,同時探索多個檢視的資料,並瞭解資料不同部分之間的關聯。

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

加入「探索」功能

聯結是在模型檔案中定義,用於建立「探索」與「檢視」之間的關係。聯結會將一或多個資料檢視直接或透過其他已聯結的資料檢視,連結至單一「探索」。

假設有兩個資料庫資料表:order_itemsorders。為兩個資料表產生檢視區塊後,請在模型檔案的 explore 參數下宣告一或多個檢視區塊:

explore: order_items { ... }

從「探索」order_items執行查詢時,產生的 SQL 的 FROM 子句中會顯示 order_items

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: order_items {
  join: orders { ... }
}

步驟 3:type

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

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

type 的預設值為 left_outer

步驟 4:relationship

定義「order_items 探索」和「orders」檢視畫面之間的聯結關係。正確宣告聯結關係對 Looker 計算準確的指標非常重要。關係是從「探索」「檢視」order_itemsorders 定義。可能選項為 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

使用 sql_on 參數或 foreign_key 參數,宣告如何將 order_items 資料表和 orders 資料表彙整在一起。

sql_on 參數等同於查詢所產生 SQL 中的 ON 子句。您可以使用這個參數宣告要比對哪些欄位,以執行聯結:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} ;;
  }
}

您也可以撰寫更複雜的聯結。舉例來說,您可能只想彙整訂單數量大於 1000 的訂單:id

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」探索,測試這個聯結是否正常運作。您應該會看到 order_itemsorders 的欄位。

如要進一步瞭解如何在「探索」中測試 LookML 變更,請參閱「測試『探索』中的欄位」。

透過其他檢視畫面加入

您可以透過其他檢視畫面,將檢視畫面加入探索。在聯結參數範例中,您透過 order_id 欄位將 orders 聯結至 order_items。即使兩個資料檢視區塊沒有共用欄位,我們可能也想將其中一個資料檢視區塊 (稱為 users) 的資料併入 order_items 探索。只要透過 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 形式彙整。

注意:現在必須在聯結中,以別名 buyerssellers 參照 users 檢視區塊。

限制聯結中的欄位

fields 參數可讓您指定要從聯結帶入探索的欄位。根據預設,系統會匯入檢視畫面中的所有欄位。不過,您可能只想帶入部分欄位。

舉例來說,當 orders 加入 order_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]
}

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 也能使用「對稱匯總」功能正確計算匯總 (例如總和和平均值)。如要進一步瞭解對稱匯總,請參閱「瞭解對稱匯總」。如要瞭解對稱式匯總解決的扇出問題,請參閱這篇社群貼文

必須提供主鍵

如要透過聯結取得指標 (匯總),您必須在所有參與聯結的檢視區塊中定義主鍵。

方法是在每個檢視表的主鍵欄位定義中加入 primary_key 參數:

dimension: id {
  type: number
  primary_key: yes
}

支援的 SQL 方言

如要讓 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 & 9
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 中執行聯結時請務必小心,因為某些類型的聯結可能會導致匯總 (例如總和和平均值) 不準確。如要瞭解這個問題和解決方法,請參閱這篇社群貼文

進一步瞭解聯結

如要進一步瞭解 LookML 中的彙整參數,請參閱彙整參考資料說明文件。