foreign_key

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
  • Este campo espera un nombre de dimensión, no un nombre de columna de la tabla subyacente (aunque a veces son idénticos).
  • foreign_key, sql_foreign_key y sql_on no se pueden usar al mismo tiempo dentro del mismo join.
  • Se debe definir exactamente una de las dimensiones de la vista unida como la clave primaria de la vista con el parámetro primary_key.

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.