用量
explore: view_name_1 {
join: view_name_2 {
foreign_key: dimension_name
}
}
|
階層
foreign_key |
預設值
無
接受
Looker 維度名稱
特別規則
|
定義
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 加入。假設 order 和 customer 的主鍵都命名為 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
}
}
將名為 order 和 inventory_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。