使用状況
join: view_name_2 {
foreign_key: dimension_name
}
}
階層
foreign_key |
デフォルト値
なし許可
Looker のディメンション名特別なルール
|
定義
foreign_key
は、ビューと Explore との結合関係を確立します。Looker は、foreign_key
で参照されるディメンションと結合されたビューの主キーを照合します。結合されたビューの主キーを設定するには、主キーとして機能するフィールドで primary_key
をオンにします。
foreign_key
を使用してビューを Explore に直接結合することも、Explore にすでに結合されている 2 番目のビューを介して結合することもできます。
ビューが Explore に直接結合している最初のケースの例では、次のようになります。
explore: order {
join: customer {
foreign_key: customer_id
}
}
customer
の主キーの名前が id
であると仮定すると、Looker が生成した SQL は次のようになります。
SELECT ...
FROM order
LEFT JOIN customer
ON order.customer_id = customer.id
2 番目のケースでは、すでにその Explore に結合されている中間ビューを介して 1 つのビューが Explore に結合されます。以下に例を示します。
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
を結合するとき、単に customer_id
ではなく、完全にスコープ設定されたフィールド参照 order.customer_id
を使用していることを確認できます。customer_id
のみを使用した場合、Looker は order.customer_id
ではなく customer
を直接 order_items.customer_id
に結合しようとしていました。
例
customer
という名前の主キーを order.customer_id
と照合して、customer
という名前のビューを order
という名前の Explore に結合します。
explore: order {
join: customer {
foreign_key: customer_id
}
}
customer
という名前のビューを、order
という名前のビューを介して order_items
という名前の Explore に結合します。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
という名前の Explore に結合します。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
が適切に機能するには、結合されたビューのディメンションの 1 つを、そのビューの主キーとして定義する必要があります。主キーは primary_key
パラメータで定義します。
主キーとして定義できるディメンションは 1 つのみであるため、複数列の主キーを持つビューでは foreign_key
を使用できません。そのような場合は、代わりに sql_on
を使用する必要があります。
知っておくべきこと
foreign_key
は Looker に参加する唯一の方法ではない
一部の結合関係は foreign_key
と確立できません。たとえば、結合されたビューの主キーを使用できない場合や、結合に複数の条件を指定しなければならない場合があります。このような場合は、代わりに sql_on
を使用してください。