彙整

用量


explore: explore_name {
  join: view_name { ... }
}
階層
join
預設值
無

接受
現有檢視畫面的名稱

特殊規則
  • 這個參數接受檢視表名稱,而非檢視表基礎資料表的名稱 (雖然兩者通常相同)
  • 如果您的方言不支援 symmetric_aggregates,則大多數測量指標類型都會從彙整檢視表中排除
  • 您可以使用 from 多次加入同一個檢視表

定義

join 可讓您定義探索和檢視表之間的彙整關係,以便合併多個檢視表的資料。您可以視需要為任何探索彙整多個檢視表。

請注意,每個檢視表都與資料庫中的資料表,或您在 Looker 中定義的衍生資料表相關聯。同樣地,由於探索與檢視表相關聯,因此也會連結至某種資料表。

與探索相關聯的資料表會放入 Looker 生成的 SQL FROM 子句中。與彙整檢視表相關聯的資料表,會放在 Looker 生成的 SQL JOIN 子句中。

主要彙整參數

如要定義探索和檢視表之間的彙整關係 (SQL ON 子句),您需要搭配使用 join 和其他參數。

您必須使用 sql_on 或 foreign_key 參數,才能建立 SQL ON 子句。

您也必須確保使用適當的彙整類型和關係,雖然不一定需要明確指定 type 和 relationship 參數。如果預設值 type: left_outer 和 relationship: many_to_one 適用於您的用途,則可排除這些參數。

這些重要參數及其與 Looker 生成 SQL 的關係,可歸納如下:

  • explore 參數會決定所產生 SQL 查詢中 FROM 子句的資料表。
  • 每個 join 參數都會決定所產生 SQL 查詢的 JOIN 子句。
    • type 參數會決定 SQL join 的類型。
    • sql_on 參數和 foreign_key 參數會決定生成的 SQL 查詢 ON 子句。

sql_on

sql_on 可讓您直接編寫 SQL ON 子句,建立彙整關係。foreign_key 可完成的彙整, 也能完成,但更容易閱讀和理解。

詳情請參閱 sql_on 參數說明文件頁面。

foreign_key

foreign_key 可讓您使用彙整檢視表的主鍵建立彙整關係,並將其與探索中的維度連結。這種模式在資料庫設計中非常常見,而 foreign_key 是在這些情況下表示彙整的簡潔方式。

如要完整瞭解,請參閱 foreign_key 參數說明文件頁面。

type

Looker 中的大多數彙整都是 LEFT JOIN,原因請參閱本頁「盡可能不要在彙整中套用商業邏輯」一節。因此,如果您未明確新增 type,Looker 會假設您要使用 LEFT JOIN。不過,如果基於某些原因需要其他類型的彙整,可以使用 type。

如需完整說明,請參閱 type 參數說明文件頁面。

relationship

relationship 不會直接影響 Looker 生成的 SQL,但對 Looker 的正常運作至關重要。如果您未明確新增 relationship,Looker 會將關係解讀為 many-to-one,也就是說,探索中的多個資料列可以對應到彙整檢視表中的一個資料列。並非所有 join 都有這類關係,其他關係的 join 必須正確宣告。

如要完整瞭解,請參閱 relationship 參數說明文件頁面。

範例

將名為 customer 的檢視表加入名為 order 的探索,其中彙整關係為

FROM order LEFT JOIN customer ON order.customer_id = customer.id:

explore: order {
  join: customer {
    foreign_key: customer_id
    relationship: many_to_one # Could be excluded since many_to_one is the default
    type: left_outer          # Could be excluded since left_outer is the default
  }
}

將名為 address 的檢視表加入名為 person 的探索,其中彙整關係為

FROM person LEFT JOIN address ON person.id = address.person_id AND address.type = 'permanent':

explore: person {
  join: address {
    sql_on: ${person.id} = ${address.person_id} AND ${address.type} = 'permanent' ;;
    relationship: one_to_many
    type: left_outer # Could be excluded since left_outer is the default
  }
}

將名為 member 的檢視表加入名為 event 的探索,其中彙整關係為

FROM event INNER JOIN member ON member.id = event.member_id:

explore: event {
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
    relationship: many_to_one # Could be excluded since many_to_one is the default
    type: inner
  }
}

常見挑戰

join 必須使用檢視表名稱,而非基礎資料表名稱

join 參數只會採用檢視表名稱,不會採用與該檢視表相關聯的資料表名稱。檢視表名稱和資料表名稱通常相同,因此可能會誤以為可以使用資料表名稱。

部分類型的測量指標需要對稱式匯總函式

如果未使用對稱式匯總函式,大多數測量指標類型都會從彙整檢視表中排除。如要讓 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.x - 0.17.x
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
ClickHouse 26+
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+
Dremio 26+ with Arrow Flight SQL
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud AlloyDB for PostgreSQL
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
MongoSQL
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 測量指標是匯總函式,因此只有 type: count (如 COUNT DISTINCT) 的測量指標會從彙整檢視表帶入探索。如果有一對一彙整關係,可以使用 relationship 參數強制納入其他測量指標類型,如下所示:

explore: person {
  join: dna {
    sql_on: ${person.dna_id} = ${dna.id} ;;
    relationship: one_to_one
  }
}

如要進一步瞭解 Looker 為何採用這種方式 (適用於不支援對稱式匯總函式的方言),請參閱社群貼文,瞭解 SQL 展開問題。

注意事項

您可以使用 from 多次彙整同一個資料表

如果單一資料表包含不同類型的實體,您可以將檢視表多次彙整至探索。如要這麼做,您必須使用 from 參數。假設您有一個 order 探索,且需要將 person 檢視表加入其中兩次:一次用於客戶,一次用於客服代表。您可以採取以下做法:

explore: order {
  join: customer {
    from: person
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
  join: representative {
    from: person
    sql_on: ${order.representative_id} = ${representative.id} ;;
  }
}

盡可能不要在彙整中套用商業邏輯

Looker 的標準彙整方法是盡可能使用 LEFT JOIN。如果您發現自己正在進行類似以下的操作,請考慮改用其他方法:

explore: member_event {
  from: event
  always_join: [member]
  join: member {
    sql_on: ${member_event.member_id} = ${member.id} ;;
    type: inner
  }
}

在這個範例中,我們建立的探索只會查看與已知會員相關聯的事件。不過,在 Looker 中執行這項操作的首選方法是使用 LEFT JOIN,將事件資料和成員資料結合在一起,如下所示:

explore: event {
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
  }
}

接著,您可以建立維度,並設為 yes 或 no,只查看會員事件,如下所示:

dimension: is_member_event {
  type: yesno
  sql: ${member.id} IS NOT NULL ;;
}

這種做法較為理想,因為使用者可以視需要靈活查看所有事件或僅查看成員事件。您並未強制他們只能透過 join 查看成員事件。

如果不使用對稱式匯總函式,請避免使用會導致扇出的彙整

本節僅適用於不支援對稱式匯總函式的資料庫方言。請參閱本頁「常見問題」一節中對稱式匯總函式的討論,判斷您的方言是否支援對稱式匯總函式。

如果資料庫方言不支援對稱式匯總函式,請避免使用會導致展開的彙整。換句話說,一般應避免在探索和檢視表之間建立一對多關係。請改為在衍生資料表中匯總檢視表的資料,與探索建立一對一關係,然後將該衍生資料表彙整至探索。

如要進一步瞭解這項重要概念,請參閱社群貼文「SQL 扇出問題」。