Uso
explore: view_name_1 {
join: view_name_2 {
foreign_key: dimension_name
}
}
|
Jerarquía
foreign_key |
Valor predeterminado
Ninguno
Acepta
Nombre de una dimensión de Looker
Reglas especiales
|
Definición
foreign_key establece una relación de unión entre una vista y su exploración. Looker hace coincidir la dimensión a la que hace referencia foreign_key con la clave primaria de la vista unida. Para establecer la clave primaria de la vista unida, activa primary_key para el campo que funciona como clave primaria.
Se puede unir una vista directamente a una exploración cuando se usa foreign_key, o bien se puede unir a través de una segunda vista que ya esté unida a esa exploración.
Un ejemplo del primer caso, en el que una vista se une directamente a la Exploración, se ve de la siguiente manera:
explore: order {
join: customer {
foreign_key: customer_id
}
}
Suponiendo que la clave primaria de customer se llamaba id, el código SQL que generó Looker sería el siguiente:
SELECT ...
FROM order
LEFT JOIN customer
ON order.customer_id = customer.id
En el segundo caso, una vista se une a una exploración a través de una vista intermedia que ya está unida a esa exploración. Un ejemplo de ello sería:
explore: order_items {
join: order {
foreign_key: order_id
}
join: customer {
foreign_key: order.customer_id
}
}
Aquí, customer no se puede unir directamente a order_items. En cambio, se debe unir a través de order. Suponiendo que las claves primarias de order y customer se llamaran id, el código SQL que generaría Looker sería el siguiente:
SELECT ...
FROM order_items
LEFT JOIN order
ON order_items.order_id = order.id
LEFT JOIN customer
ON order.customer_id = customer.id
Para que esto funcione correctamente, puedes ver que usamos la referencia de campo completamente definida order.customer_id cuando unimos customer, en lugar de simplemente customer_id. Si solo hubiéramos usado customer_id, Looker habría intentado unir customer directamente a order_items.customer_id en lugar de hacerlo a través de order.customer_id.
Ejemplos
Une la vista llamada customer al Explorar llamado order haciendo coincidir la clave primaria de customer con order.customer_id:
explore: order {
join: customer {
foreign_key: customer_id
}
}
Une la vista llamada customer al Explorar llamado order_items a través de la vista llamada order. Haz coincidir la clave primaria de customer con order.customer_id y la clave primaria de order con order_items.order_id:
explore: order_items {
join: order {
foreign_key: order_id
}
join: customer {
foreign_key: order.customer_id
}
}
Une las vistas llamadas order y inventory_item a la exploración llamada order_items. Haz coincidir la clave primaria de order con order_items.order_id y la clave primaria de inventory_item con order_items.inventory_id:
explore: order_items {
join: order {
foreign_key: order_id
}
join: inventory_item {
foreign_key: inventory_id
}
}
Desafíos habituales
foreign_key debe hacer referencia a un nombre de dimensión, no a un nombre de columna.
El parámetro foreign_key solo toma un nombre de dimensión, no el nombre de la columna en tu base de datos SQL subyacente. A menudo, el nombre de la dimensión y el nombre de la columna son idénticos, lo que puede llevar a la conclusión falsa de que se pueden usar nombres de columna.
Se debe definir una clave primaria en las vistas unidas con foreign_key
Para que foreign_key funcione correctamente, una de las dimensiones de la vista combinada debe definirse como la clave primaria de esa vista. Una clave primaria se define a través del parámetro primary_key.
Dado que solo se puede definir una dimensión como clave primaria, no puedes usar foreign_key con vistas que tengan una clave primaria de varias columnas. En ese caso, deberás usar sql_on.
Información importante
foreign_key no es la única forma de unirse a Looker
Algunas relaciones de unión no se pueden establecer con foreign_key. Por ejemplo, es posible que la unión no use la clave primaria de la vista unida o que requiera que varias condiciones formen parte de la unión. En estas situaciones, usa sql_on en su lugar.