foreign_key

用量

explore: view_name_1 {
  join: view_name_2 {
    foreign_key: dimension_name
  }
}
階層
foreign_key
預設值

接受
Looker 維度名稱

特別規則
  • 這個欄位需要維度名稱,而不是基礎資料表中的資料欄名稱 (雖然有時兩者相同)
  • foreign_keysql_foreign_keysql_on 可能無法在同一個 join 中同時使用
  • 使用 primary_key 參數,將彙整檢視表中的其中一個維度定義為檢視表的主鍵

定義

foreign_key 會在檢視畫面和探索之間建立聯結關係。Looker 會將 foreign_key 參照的維度與已聯結檢視區塊的主鍵相符。如要設定已聯結檢視區塊的主鍵,請針對做為主鍵的欄位開啟 primary_key

使用 foreign_key 時,檢視區塊可直接加入探索,也可以透過已加入該探索的第二個檢視區塊加入。

第一個案例的範例 (資料檢視表直接彙整至探索) 如下所示:

explore: order {
  join: customer {
    foreign_key: customer_id
  }
}

假設 customer 的主鍵名為 id,Looker 生成的 SQL 會是:

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

在第二種情況中,檢視表會透過已加入該探索的中間檢視表,加入探索。舉例來說:

explore: order_items {
  join: order {
    foreign_key: order_id
  }
  join: customer {
    foreign_key: order.customer_id
  }
}

在這裡,customer 無法直接加入 order_items。而是必須透過 order 加入。假設 ordercustomer 的主鍵都命名為 id,Looker 產生的 SQL 會是:

SELECT    ...
FROM      order_items
LEFT JOIN order
ON        order_items.order_id = order.id
LEFT JOIN customer
ON        order.customer_id = customer.id

如要讓這項功能正常運作,您會發現我們在加入 customer 時,使用的是完整範圍的欄位參照 order.customer_id,而不是單純的 customer_id。如果只使用 customer_id,Looker 會嘗試直接將 customer 加入 order_items.customer_id,而不是透過 order.customer_id

範例

將名為 customer 的檢視區塊與名為 order 的探索聯結,方法是比對 customer 的主鍵與 order.customer_id

explore: order {
  join: customer {
    foreign_key: customer_id
  }
}

透過名為 order 的檢視區塊,將名為 customer 的檢視區塊加入名為 order_items 的探索。將 customer 的主鍵與 order.customer_id 配對,並將 order 的主鍵與 order_items.order_id 配對:

explore: order_items {
  join: order {
    foreign_key: order_id
  }
  join: customer {
    foreign_key: order.customer_id
  }
}

將名為 orderinventory_item 的檢視區塊彙整至名為 order_items 的探索。將 order 的主鍵與 order_items.order_id 配對,並將 inventory_item 的主鍵與 order_items.inventory_id 配對:

explore: order_items {
  join: order {
    foreign_key: order_id
  }
  join: inventory_item {
    foreign_key: inventory_id
  }
}

常見挑戰

foreign_key 必須參照維度名稱,而非資料欄名稱

foreign_key 參數只會採用維度名稱,不會採用基礎 SQL 資料庫中的資料欄名稱。維度和資料欄名稱通常相同,因此可能會誤以為可以使用資料欄名稱。

在與 foreign_key 彙整的檢視區塊中,必須定義主鍵

如要讓 foreign_key 正常運作,彙整檢視區塊中的其中一個維度必須定義為該檢視區塊的主鍵。主鍵是透過 primary_key 參數定義。

由於只能將單一維度定義為主鍵,因此您無法將 foreign_key 用於具有多欄主鍵的檢視區塊。在這種情況下,您需要改用 sql_on

注意事項

foreign_key 不是在 Looker 中加入的唯一方式

部分聯結關係無法與 foreign_key 建立。舉例來說,彙整作業可能不會使用彙整檢視區塊的主鍵,或是可能需要多個條件才能彙整。在這種情況下,請改用 sql_on