foreign_key

使用状況

探索: view_name_1 {
join: view_name_2 {
foreign_key: dimension_name
}
}
階層
foreign_key
デフォルト値
なし

許可
Looker のディメンション名

特別なルール
  • このフィールドには、基になるテーブルの列名ではなく、ディメンション名を指定する必要があります(ただし、同一になる場合もあります)。
  • foreign_keysql_foreign_keysql_on を、同じ join 内で同時に使用することはできません。
  • 結合されたビューのディメンションの 1 つのみを、primary_key パラメータを使用してビューの主キーとして定義する必要があります。

定義

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
  }
}

ここでは、customerorder_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 を結合するとき、単に 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 を使用してください。