foreign_key

Utilisation

explore: view_name_1 {
  join: view_name_2 {
    foreign_key: dimension_name
  }
}
Hiérarchie
foreign_key
Valeur par défaut
Aucun

Acceptation
Nom d'une dimension Looker

Règles spéciales
  • Ce champ attend un nom de dimension, et non un nom de colonne de la table sous-jacente (même s'ils sont parfois identiques).
  • foreign_key, sql_foreign_key et sql_on ne peuvent pas être utilisés en même temps dans le même join.
  • Une seule des dimensions de la vue jointe doit être définie comme clé primaire de la vue à l'aide du paramètre primary_key.

Définition

foreign_key établit une relation de jointure entre une vue et son exploration. Looker fait correspondre la dimension référencée par foreign_key à la clé primaire de la vue jointe. Vous définissez la clé primaire de la vue jointe en activant primary_key pour le champ qui sert de clé primaire.

Une vue peut être jointe directement à une exploration lorsque vous utilisez foreign_key, ou elle peut être jointe par le biais d'une deuxième vue déjà jointe à cette exploration.

Voici un exemple du premier cas, où une vue est jointe directement à l'exploration :

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

En supposant que la clé primaire de customer ait été nommée id, le code SQL généré par Looker serait le suivant :

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

Dans le second cas, une vue est jointe à une exploration par le biais d'une vue intermédiaire déjà jointe à cette exploration. Par exemple :

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

Ici, customer ne peut pas être joint directement à order_items. Il doit plutôt être joint via order. En supposant que les clés primaires de order et customer aient été nommées id, le code SQL généré par Looker serait le suivant :

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

Pour que cela fonctionne correctement, vous pouvez voir que nous avons utilisé la référence de champ à portée complète order.customer_id lors de la jointure de customer, au lieu de simplement customer_id. Si nous n'avions utilisé que customer_id, Looker aurait essayé de joindre customer directement à order_items.customer_id au lieu de passer par order.customer_id.

Exemples

Joignez la vue nommée customer à l'exploration nommée order en faisant correspondre la clé primaire de customer à order.customer_id :

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

Joignez la vue nommée customer à l'exploration nommée order_items via la vue appelée order. Faites correspondre la clé primaire de customer avec order.customer_id, et la clé primaire de order avec order_items.order_id :

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

Joignez les vues nommées order et inventory_item à l'exploration nommée order_items. Faites correspondre la clé primaire de order avec order_items.order_id, et la clé primaire de inventory_item avec order_items.inventory_id :

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

Difficultés courantes

foreign_key doit faire référence à un nom de dimension, et non à un nom de colonne.

Le paramètre foreign_key n'accepte qu'un nom de dimension, et non le nom de la colonne dans votre base de données SQL sous-jacente. Souvent, le nom de la dimension et celui de la colonne sont identiques, ce qui peut conduire à la conclusion erronée que les noms de colonnes peuvent être utilisés.

Une clé primaire doit être définie dans les vues jointes avec foreign_key.

Pour que foreign_key fonctionne correctement, l'une des dimensions de la vue jointe doit être définie comme clé primaire de cette vue. Une clé primaire est définie à l'aide du paramètre primary_key.

Étant donné qu'une seule dimension peut être définie comme clé primaire, vous ne pouvez pas utiliser foreign_key avec les vues qui comportent une clé primaire à plusieurs colonnes. Dans ce cas, vous devrez utiliser sql_on à la place.

Bon à savoir

foreign_key n'est pas la seule façon de joindre des tables dans Looker.

Il est impossible d'établir certaines relations de jointure avec foreign_key. Par exemple, il est possible que la jointure n'utilise pas la clé primaire de la vue jointe ou qu'elle nécessite plusieurs conditions. Dans ce cas, utilisez plutôt sql_on.