Cómo solucionar problemas de un ejemplo de caso de uso de extensiones avanzadas

En esta página, se trata un tema avanzado y se da por sentado que el lector tiene un conocimiento sólido de LookML.

Extends es una función valiosa de LookML que te permite mantener un código de LookML DRY (no te repitas). En Looker, las Exploraciones, las vistas y los paneles de LookML se pueden extender con el parámetro extends dentro de un archivo de modelo, como en el siguiente ejemplo:

explore: orders {
  view_name: orders
  join: users {
    type: left_outer
    sql_on: %{orders.user_id} = ${users.id} ;;
    relationship: many_to_one
  }
}

explore: transactions {
  extends: [orders]
}

En este ejemplo, se usa el parámetro extends dentro de la definición de la exploración de transactions para extender la exploración de orders.

En esta página, se hace referencia al objeto que se extiende como el objeto base, y al objeto que realiza la extensión se lo conoce como el objeto extending.

Extender un objeto de LookML es un proceso bastante sencillo, como se detalla en la página de documentación Vuelve a usar código con extensiones. Sin embargo, hay algunos casos de uso avanzados que pueden causar errores de referencia de LookML y duplicación de objetos no deseada. En esta página, se proporciona un ejemplo de cómo extender una exploración basada en una vista que extiende otra vista puede generar errores de referencia de LookML, así como sugerencias que pueden ayudar a eliminar esos problemas.

Caso de uso: Cómo extender una exploración a partir de una vista extendida

Supongamos que deseas extender la exploración de events y que deseas que la vista en la que se basa la exploración de extensión use campos de una vista que extiende la vista events base. En este ejemplo, la función Explorar de events_extended extiende la exploración de extends, como se muestra en el siguiente ejemplo de LookML:

explore: events {
  view_name: events
  join: users {
    type: left_outer
    sql_on: ${events.user_id} = ${users.id} ;;
    relationship: many_to_one
  }
}

explore: events_extended {
  extends: [events]
  join: orders {
    sql_on: ${events_extended.test_id} = ${orders.id} ;;
    relationship: many_to_one
  }

En este ejemplo, la vista users se une a la exploración de events base, mientras que la vista orders se une a la exploración extendida, events_extended. Sin embargo, la unión definida en la exploración de events base hace referencia a events.user_id, que es un campo de la vista events base. Mientras tanto, la unión definida en la exploración events_extended extendida hace referencia al campo events_extended.test_id, donde events_extended es el nombre de una vista extendida basada en la vista events. El campo test_id al que se hace referencia en la unión en la definición de Explorar events_extended se define en la vista events_extended extendida de la siguiente manera:

include: "events.view.lkml"
view: events_extended {
  extends: [events]

  dimension: test_id {}

Debido a que la unión definida en la exploración de events_extended hace referencia al nombre de la vista extendida, events_extended, el validador de LookML muestra un error inaccessible view.

Para solucionar este problema, puedes agregar el parámetro from a la función LookML para la extensión de Explorar y establecer su valor en el nombre de la vista de extensión, events_extended. El parámetro from asigna un alias al nombre de la tabla original en el SQL generado, como FROM schema.name AS alias.

Este es el único caso de uso recomendado para aplicar el parámetro from a nivel de Explorar.

Para extraer desde la vista extendida (events_extended) sin romper las referencias de unión de la exploración base (events), puedes agregar un parámetro from que se asigne a la vista extendida:

explore: events_extended {
  extends: [events]
  from: events_extended
  join: orders {
    relationship: many_to_one
    sql_on: ${events.test_id} = ${orders.id} ;;
  }
}

En este ejemplo, si aplicas el from: events_extended de LookML a LookML para la exploración extendida, podrás seguir haciendo referencia a la vista base (events) en la exploración extendida y, al mismo tiempo, redireccionar esas referencias para extraerlas de la versión extendida de esa vista (events_extended).

Con el uso del parámetro from, puedes hacer referencia al nombre de vista base events en los prefijos de unión, pero estas referencias se extraerán de la vista extendida events_extended, que contiene todos los campos de events, además del nuevo campo test_id.