Solucionar problemas de un ejemplo de caso práctico avanzado de la palabra clave "extends"

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

Extends es una función de LookML muy útil que te permite mantener el código de LookML DRY (no te repitas). En Looker, las exploraciones, las vistas y los paneles de LookML se pueden ampliar con el parámetro extends en 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, el parámetro extends se usa en la definición de la exploración transactions para ampliar la exploración orders.

En esta página, el objeto que se está ampliando se denomina objeto base, y el objeto que realiza la ampliación se denomina objeto de ampliación.

Extender un objeto de LookML es un proceso bastante sencillo, tal como se explica en la página de documentación Reutilizar código con extends. Sin embargo, hay algunos casos prácticos avanzados que pueden provocar errores de referencia de LookML y duplicación de objetos no deseada. En esta página se muestra un ejemplo de cómo ampliar un Explore basado en una vista que amplía otra vista puede provocar errores de referencia de LookML, así como consejos que pueden ayudar a eliminar estos problemas.

Caso práctico: ampliar un Exploración a partir de una vista de ampliación

Supongamos que quieres ampliar la función events Explorar y que la vista en la que se basa la función Explorar ampliada use campos de una vista que amplíe la vista events base. En este ejemplo, la instancia de Explore events_extended amplía la instancia de Explore extends, tal 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 base events, mientras que la vista orders se une a la Exploración ampliada events_extended. Sin embargo, la combinación definida en la Exploración events base hace referencia a events.user_id, que es un campo de la vista events base. Mientras tanto, la combinación definida en la Exploración events_extended que se extiende hace referencia al campo events_extended.test_id, donde events_extended es el nombre de una vista que se extiende a partir de la vista events. El campo test_id al que se hace referencia en la combinación de la definición de Exploración events_extended se define en la vista events_extended de extensión de la siguiente manera:

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

  dimension: test_id {}

Como la unión definida en la Exploración events_extended hace referencia al nombre de la vista ampliada, events_extended, el Validador de LookML muestra un error inaccessible view.

Para solucionar este problema, puede añadir el parámetro from al LookML de la exploración que se va a ampliar y asignarle el nombre de la vista que se va a ampliar, events_extended. El parámetro from asigna un alias al nombre de la tabla original en el código SQL generado, que es FROM schema.name AS alias.

Este es el único caso práctico recomendado para aplicar el parámetro from a nivel de Exploración.

Para extraer datos de la vista de extensión (events_extended) sin romper las referencias de unión de la exploración base (events), puede añadir un parámetro from que se asigne a la vista de extensión:

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

En este ejemplo, al aplicar el LookML from: events_extended al LookML del Explore que se va a ampliar, puedes seguir haciendo referencia a la vista base (events) en el Explore ampliado, al tiempo que rediriges esas referencias para que se extraigan de la versión ampliada de esa vista (events_extended).

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