Descripción general
Con las mejoras de LookML, puedes adaptar una vista o una exploración existente sin editar el archivo de LookML que lo contiene. Esto es ideal para lo siguiente:
- Proyectos con Bloques de Looker, que usan piezas compiladas previamente de LookML
- Proyectos que importan archivos de otros proyectos
- Proyectos en los que a menudo necesitas generar archivos a partir de tablas en tu base de datos
- Situaciones en las que quieres compartir LookML entre modelos o proyectos mientras realizas personalizaciones en cada lugar (configuraciones de concentrador y radio)
Por ejemplo, si tienes el siguiente archivo de vista en tu proyecto:
view: flights {
sql_table_name: flightstats.accidents ;;
dimension: id {
label: "id"
primary_key: yes
type: number
sql: ${TABLE}.id ;;
}
}
Puedes definir mejor la vista flights
como se muestra en el siguiente ejemplo: usa el parámetro view
con el mismo nombre de vista, pero agrega un signo más (+
) delante del nombre para indicar que se trata de un perfeccionamiento de una vista existente.
Este perfeccionamiento agrega una dimensión air_carrier
a la vista flights
existente:
view: +flights {
dimension: air_carrier {
type: string
sql: ${TABLE}.air_carrier ;;
}
}
Este perfeccionamiento puede ir en cualquier archivo de LookML del proyecto, como un archivo de modelo, un archivo de vista o su propio archivo de LookML dedicado. Consulta la sección Usa ajustes en tu proyecto de LookML para conocer cómo funciona.
El perfeccionamiento combinado con el LookML original da como resultado final como si este fuera el LookML original de la vista:
view: flights {
sql_table_name: flightstats.accidents ;;
dimension: id {
label: "id"
primary_key: yes
type: number
sql: ${TABLE}.id ;;
}
dimension: air_carrier {
type: string
sql: ${TABLE}.air_carrier ;;
}
}
En la IU de Looker, los usuarios verán la dimensión Empresa de transporte aéreo, como si hubieras agregado la dimensión al archivo de vista original.
Consulta el ejemplo que aparece a continuación para obtener información más detallada sobre la implementación.
Mejoras en comparación con extensiones
Looker también admite la extending de objetos de LookML. La extensión es útil cuando deseas crear una copia nueva de una vista o exploración existentes para poder agregarle objetos nuevos. Por ejemplo, puedes crear una vista base que defina todos tus campos y luego crear varias vistas nuevas que extiendan la vista base. Estas vistas nuevas luego se pueden modificar para ocultar ciertos campos en la vista base o para cambiar las definiciones o etiquetas de los campos en la vista base.
Las mejoras son útiles cuando deseas modificar una vista existente o Explorar con algunos ajustes en ciertos objetos, pero no deseas crear copias de la vista o Explorar. Las mejoras son ideales para situaciones en las que no puedes o no quieres modificar la vista base o la función Explorar, y para situaciones en las que crear una vista o exploración nuevas requeriría cambios extensos en otras referencias de LookML. Consulta la sección Ejemplo en esta página para ver un ejemplo de este caso de uso.
En la mayoría de los casos de uso, las mejoras son una alternativa más simple y limpia que extends
.
Es posible que los desarrolladores avanzados de LookML deseen usar el parámetro extends
dentro de un perfeccionamiento de LookML. Para obtener más información, consulta la sección Las mejoras pueden contener extensiones en esta página.
Las mejoras anulan la mayoría de los parámetros
Es importante tener en cuenta que, en la mayoría de los casos, un ajuste anulará la configuración original de un objeto. En el siguiente ejemplo, la vista original tiene una dimensión oculta (hidden: yes
):
view: faa_flights {
dimension: carrier {
hidden: yes
}
}
En otro archivo, se define mejor esa dimensión con hidden: no
:
include: "/views/faa_flights.view.lkml"
view: +faa_flights {
dimension: carrier {
hidden: no
}
}
Tiene prioridad el último perfeccionamiento, por lo que se aplica hidden: no
y la dimensión se mostrará en la vista final.
En algunos casos, las mejoras son aditivas en lugar de anularse. Consulta la sección Algunos parámetros son agregados de esta página para obtener más información.
Algunos parámetros son de adición
En muchos casos, si el perfeccionamiento contiene el mismo parámetro que el objeto que quieres definir mejor, el perfeccionamiento anulará los valores de los parámetros del objeto mejor definido.
Sin embargo, los perfeccionamientos pueden ser aditivos para algunos parámetros, lo que significa que los valores del objeto base se usan junto con los valores del objeto refinado.
Los siguientes parámetros son additivos:
Para las dimensiones y medidas:
Para los parámetros:
Para tablas derivadas:
En cuanto a las vistas:
extends
(Consulta la sección Perfeccionamientoextends
es aditivo en esta página para obtener más información).
Para exploraciones:
access_filter
aggregate_table
extends
(Consulta la sección Perfeccionamientoextends
es aditivo en esta página para obtener más información).join
query
Por ejemplo, esta es una vista que tiene una dimensión name
con un parámetro link
:
view: carriers {
sql_table_name: flightstats.carriers ;;
dimension: name {
sql: ${TABLE}.name ;;
type: string
link: {
label: "Google {{ value }}"
url: "http://www.google.com/search?q={{ value }}"
icon_url: "http://google.com/favicon.ico"
}
}
}
Esta es una mejora para la vista carriers
, con una dimensión name
que tiene diferentes valores para el parámetro link
:
include: "/views/carriers.view.lkml"
view: +carriers {
label: "Refined carriers"
dimension: name {
sql: ${TABLE}.name ;;
type: string
link: {
label: "Dashboard for {{ value }}"
url: "https://docsexamples.dev.looker.com/dashboards/307?Carrier={{ value }}"
icon_url: "https://www.looker.com/favicon.ico"
}
}
}
En la vista carriers
definida, los dos parámetros link
son adicionales, por lo que la dimensión name
mostrará ambos vínculos.
Las mejoras se aplican en orden
Un objeto se puede definir mejor varias veces y en varios lugares, lo que permite que los desarrolladores de Looker usen los ajustes de muchas maneras creativas. Sin embargo, esto también significa que los desarrolladores deben ser muy conscientes del orden en el que se aplican los perfeccionamientos:
- En un proyecto, las mejoras se aplican en el orden en que se incluyen sus archivos. Las mejoras de los archivos incluidos en último lugar anularán las mejoras de los archivos incluidos anteriormente.
- Dentro de un solo archivo, los perfeccionamientos se aplican línea por línea hacia abajo. Las mejoras con el número de línea más alto se aplican en último lugar y, si existen conflictos, anularán cualquier mejora anterior.
Por ejemplo, en el siguiente archivo de vista, hay dos perfeccionamientos de la vista faa_flights
. El primer perfeccionamiento oculta una dimensión (hidden: yes
) y el segundo muestra la dimensión (hidden: no
). Cuando hay conflictos como este, el perfeccionamiento que se encuentra más abajo en el archivo tiene prioridad:
include: "//e_faa_original/views/faa_flights.view.lkml"
view: +faa_flights {
dimension: carrier {
hidden: yes
}
}
view: +faa_flights {
dimension: carrier {
hidden: no
}
}
La lógica es similar para incluir varios archivos en un proyecto: tendrán prioridad las mejoras en el último archivo que aparezca en las inclusiones. Por ejemplo, si un archivo de modelo incluye estos archivos:
include: "/refinements/distance_analysis.lkml"
include: "/refinements/finishing_touches.lkml"
Todas las mejoras del distance_analysis.lkml
se aplicarán primero y, luego, las del archivo finishing_touches.lkml
. Si hay algún conflicto, prevalecerán las mejoras del último archivo, finishing_touches.lkml
.
Cómo utilizar final: yes
para evitar que se definan mejor
Como se describió anteriormente, un mismo objeto se puede definir mejor varias veces en varios lugares, y el último ajuste anulará todos los anteriores.
Si tienes un perfeccionamiento que deseas que se considere como el perfeccionamiento final de la vista o exploración, puedes agregar la marca final: yes
a la mejora. El IDE de Looker mostrará un error de LookML si hay mejoras existentes que se aplicarán después de este perfeccionamiento final o si un desarrollador intenta agregar uno nuevo que se aplicará después de este perfeccionamiento final. Por ejemplo, el segundo perfeccionamiento en este archivo de vista crearía un error de LookML porque el perfeccionamiento anterior tiene la marca final: yes
:
include: "//e_faa_original/views/faa_flights.view.lkml"
view: +faa_flights {
final: yes
dimension: carrier {
hidden: yes
}
}
view: +faa_flights {
dimension: carrier {
hidden: no
}
}
Agregar la marca final: yes
a un perfeccionamiento es una buena manera de verificar que tus mejoras se apliquen en el orden deseado.
Las mejoras pueden contener extensiones
Es posible que los desarrolladores avanzados de LookML deseen usar un parámetro extends
dentro de un perfeccionamiento de LookML, que agrega el objeto extendido al objeto que se está perfeccionando.
Para resumir el comportamiento de extends
y las mejoras, haz lo siguiente:
- Cuando se extiende un objeto, se crea una copia nueva de este y, luego, se basa en ella. Por ejemplo, puedes crear una vista base que defina todos tus campos y luego crear varias vistas nuevas que extiendan la vista base. Cada una de estas vistas nuevas incorporará una copia de la vista base y, desde allí, un desarrollador podrá agregar diferentes campos, filtros y otras propiedades para modificar lo que hay en la vista base. La idea es que comiences con un objeto base y, luego, lo uses de diferentes maneras en muchos otros objetos. (Puedes ver la página de documentación Reutiliza el código con extensiones para obtener un análisis completo de cómo trabajar con extensiones).
- Cuando se define mejor un objeto, se agrega una capa de modificaciones al objeto, pero, a diferencia de lo que ocurre con la extensión, esta función no hace varias copias del objeto. La idea es compilar en un objeto base sin modificar su LookML original.
Como ejemplo del uso estándar de mejoras, aquí hay una exploración llamada orders
y una exploración de +orders
que la define mejor:
explore: orders {
view_name: orders
# other Explore parameters
}
explore: +orders {
label: "Orders Information"
# other Explore parameters to build on the original Explore
}
Además de esto, puedes agregar un perfeccionamiento que incluya un extends
. A partir del ejemplo, aquí se muestra la misma exploración de orders
. Sin embargo, hay una exploración básica llamada users_base
, y ahora el perfeccionamiento +orders
tiene un parámetro extends
que aporta el users_base
:
explore: users_base {
view_name: users
extension: required
# other Explore parameters
}
explore: orders {
view_name: orders
# other Explore parameters
}
explore: +orders {
label: "Orders Information"
extends: [users_base]
# other Explore parameters to build on the original Explore
}
Lo que es especial aquí es que el perfeccionamiento de +orders
tiene un extends
. El resultado es que la vista +orders
ahora extenderá la exploración de users_base
.
Cómo Looker implementa extends
en las mejoras
La extensión de un objeto dentro de un perfeccionamiento es un concepto avanzado de LookML. Antes de usar extends
en una mejora, debes tener un conocimiento profundo de lo siguiente:
- Cómo Looker implementa
extends
: Si un elemento de LookML se define en el objeto extendido y en el objeto extendido, se usa la versión en el objeto extendido, a menos que el parámetro sea aditivo. Consulta la página de documentación Reutilización de código con extensiones para obtener más detalles. - Cómo Looker implementa los perfeccionamientos: Si un elemento de LookML se define en varios perfeccionamientos, el último perfeccionamiento anula los anteriores. Para obtener más información, consulta la sección Las mejoras se aplican en orden en esta página.
Por último, deberías comprender cómo Looker combina estos principios para implementar extends
que se usa en las mejoras. Este es el orden en que implementa Looker, y cada paso anula el anterior en caso de conflictos:
- Valores de
extends
especificados en el objeto - Valores de
extends
especificados en mejoras del objeto - Valores del objeto
- Valores de las mejoras del objeto
A modo de ejemplo, este es un ejemplo que sigue el valor del parámetro label
en cada paso de la implementación:
explore: orders_base {
label: "Orders Base"
view_name: orders
extension: required
}
explore: users_base {
label: "Users Base"
view_name: users
extension: required
}
explore: orders {
label: "Orders"
extends: [orders_base]
}
explore: +orders {
label: "Orders Refined"
extends: [users_base]
}
Looker implementa el valor de label
para la exploración de orders
en este ejemplo de la siguiente manera:
- Valores de
extends
especificados en el objeto Como la exploraciónorders
tiene un parámetroextends
, Looker comienza con los elementos de LookML del objeto que se extiende, que en este caso es la exploraciónorders_base
. En este punto, el valor delabel
es “Base de pedidos”. - Valores de
extends
especificados en mejoras del objeto. Dado queorders
tiene un perfeccionamiento y este tiene un parámetroextends
, Looker aplica elementos de LookML desde la extensión del perfeccionamiento, que en este caso es la exploración deusers_base
. En este punto, el valor delabel
es “Base de usuarios”. - Valores del objeto. Ahora que se abordaron todas las extensiones, Looker aplica elementos del objeto extendido, que en este caso es la exploración de
orders
. Si hay algún conflicto, ganará el objeto que se extienda. Por lo tanto, el valorlabel
es “Pedidos”. - Valores de las mejoras del objeto. Por último, Looker aplica elementos de cualquier mejora de la exploración de
orders
. Si hay algún conflicto, prevalecerá el objeto de refinamiento. Por lo tanto, ahora el valor delabel
es "Pedidos ajustados".
La mejora extends
es aditiva
Como se describe en la sección Parámetros de anulación de mejoras de esta página, por lo general, las mejoras anulan la configuración original de un objeto. Este no es el caso del parámetro extends
. Cuando se usa extends
en un perfeccionamiento, el valor del parámetro extends
se agrega a la lista de elementos extendidos en el objeto original o a mejoras anteriores, si corresponde. Luego, si hay algún conflicto, se da prioridad al último elemento de la cadena de extensiones.
Por ejemplo, esta es una exploración base llamada orders_base
y una exploración orders
que extiende la base. Además, hay una exploración de users_base
y el perfeccionamiento de +orders
que extiende users_base
:
explore: orders_base {
view_name: orders
extension: required
# other Explore parameters
}
explore: users_base {
view_name: users
extension: required
# other Explore parameters
}
explore: orders {
extends: [orders_base]
# other Explore parameters to build on the base Explore
}
explore: +orders {
extends: [users_base]
# other Explore parameters to build on the base Explores
}
La exploración de orders
extiende el orders_base
y, luego, los perfeccionamientos +orders
agregan el users_base
a la lista extends
. El resultado es que la exploración de +orders
ahora extenderá orders_base
y users_base
, como si este fuera el LookML original de la exploración:
explore: orders {
extends: [orders_base, users_base]
}
Luego, si hay algún conflicto, se da prioridad al último elemento de la cadena de extensiones. En este ejemplo, los elementos de users_base
anularían cualquier elemento en conflicto en orders_base
.
El concepto de extender más de un objeto a la vez se analiza en la página de documentación Reutilización de código con extensiones.
Por último, debes tener en cuenta el orden de los parámetros explore
en este ejemplo. Sin embargo, en los casos con varios perfeccionamientos del mismo objeto, el orden de los perfeccionamientos sí importa. Como se describe en la sección Las mejoras se aplican en orden en esta página, el último perfeccionamiento de un archivo anula los anteriores.
Usa ajustes en tu proyecto de LookML
Estos son los pasos generales para definir mejor las vistas y las exploraciones en tu proyecto:
- Identifica la vista o la exploración que quieres definir mejor.
- Decide dónde quieres alojar tus ajustes. Puedes agregar perfeccionamientos en cualquier archivo de LookML existente o crear archivos de LookML separados para ellos. (Consulta el procedimiento para crear un archivo de prueba de datos en la página de documentación Información sobre otros archivos del proyecto para ver un ejemplo de cómo crear archivos genéricos de LookML).
- Usa el parámetro
include
para incorporar tus mejoras en el modelo:- En el archivo en el que escribes tus mejoras, debes incluir los archivos de LookML que estás perfeccionando. El IDE de Looker te mostrará advertencias si intentas definir mejor un objeto que no está incluido.
- En tu archivo de modelo, incluye los archivos en los que se definen tus mejoras. Puedes combinar archivos y usar inclusiones de maneras muy creativas. Consulta la sección Cómo usar mejoras para agregar capas a tu modelo en esta página para obtener más información.
Ejemplo
Perfeccionar los objetos de LookML es una forma fácil de adaptar las vistas y las exploraciones sin tener que editar el LookML original. Esto resulta muy útil cuando las vistas y las exploraciones son de solo lectura en tu proyecto, como con los archivos importados de otros proyectos. Este es un ejemplo de cómo definir mejor una exploración.
Este es el LookML para la exploración de aircraft
:
explore: aircraft {
join: aircraft_types {
type: left_outer
sql_on: ${aircraft.id} = ${aircraft_types.id} ;;
relationship: many_to_one
}
join: aircraft_engine_types {
type: left_outer
sql_on: ${aircraft.id} = ${aircraft_engine_types.id} ;;
relationship: many_to_one
}
}
Esta exploración contiene varias vistas, cada una de las cuales tiene muchas dimensiones.
Ahora, otro proyecto de LookML llamado e_faa_refined
importa el archivo de exploración aircraft
. En el proyecto e_faa_refined
, puedes usar un perfeccionamiento para simplificar drásticamente la exploración de aircraft
.
Como la exploración de aircraft
es un archivo importado, no puedes editarlo directamente. En su lugar, puedes definirla mejor. Este es un ejemplo de un archivo independiente llamado refinements.lkml
que contiene este LookML:
include: "//e_faa_original/Explores/aircraft.explore.lkml"
explore: +aircraft {
label: "Aircraft Simplified"
fields: [aircraft.aircraft_serial, aircraft.name, aircraft.count]
}
El archivo refinements.lkml
contiene lo siguiente:
- El parámetro
include
para incorporar el archivoaircraft.explore.lkml
original del proyecto importado (consulta la página de documentación Cómo importar archivos de otros proyectos para obtener información sobre cómo consultar los archivos del proyecto importados). - Mejoras en la exploración de
aircraft
:
El resultado final es como si estas fueran las vistas aircraft
Explorar y aircraft
originales:
explore: aircraft {
label: "Aircraft Simplified"
}
view: aircraft {
sql_table_name: flightstats.aircraft ;;
dimension: aircraft_serial {
type: string
sql: ${TABLE}.aircraft_serial ;;
}
dimension: name {
type: string
sql: ${TABLE}.name ;;
}
measure: count {
type: count
}
}
Si deseas ver un ejemplo del uso de mejoras para personalizar una sola vista para varios casos de uso, consulta la receta de libro de recetas Maximiza la reutilización de código con LookML DRY: Personaliza una vista base única para varios casos de uso.
Otros casos de uso de mejoras
Como se mencionó anteriormente, los perfeccionamientos son ideales para adaptar objetos de LookML que son de solo lectura, como Bloques de Looker o archivos importados.
Pero una vez que te familiarizas con agregar mejoras y cómo incluirlas en tus modelos, puedes hacer cosas muy interesantes con tus proyectos, como se describe en los siguientes ejemplos.
Uso de mejoras para agregar análisis
Puedes usar perfeccionamientos para agregar análisis a tu modelo sin tocar los archivos de LookML originales. Por ejemplo, si hay un proyecto en el que las vistas y las exploraciones se generan a partir de tablas en tu base de datos y se almacenan en un archivo de LookML llamado faa_basic.lkml
, puedes crear un archivo faa_analysis.lkml
en el que uses ajustes para agregar análisis. A continuación, se muestra un ejemplo de una nueva tabla derivada llamada distance_stats
que tiene un análisis de distancia. En este ejemplo, se muestran mejoras de la exploración de flights
existente del archivo faa_basic.lkml
que une la tabla derivada distance_stats
con la exploración de flights
. Además, en la parte inferior del ejemplo, se define mejor la vista flights
existente para agregar campos nuevos a partir del análisis:
include: "faa_basic.lkml"
explore: +flights {
join: distance_stats {
relationship: one_to_one
type: cross
}
}
view: distance_stats {
derived_table: {
explore_source: flights {
bind_all_filters: yes
column: distance_avg {field:flights.distance_avg}
column: distance_stddev {field:flights.distance_stddev}
}
}
dimension: avg {
type:number
sql: CAST(${TABLE}.distance_avg as INT64) ;;
}
dimension: stddev {
type:number
sql: CAST(${TABLE}.distance_stddev as INT64) ;;
}
}
view: +flights {
measure: distance_avg {
type: average
sql: ${distance} ;;
}
measure: distance_stddev {
type: number
sql: STDDEV(${distance}) ;;
}
dimension: distance_tiered2 {
type: tier
sql: ${distance} ;;
tiers: [500,1300]
}
}
Uso de mejoras para agregar capas a tu modelo
Otro caso de uso interesante para perfeccionar es agregar capas a tu proyecto. Puedes crear varios archivos de mejora y luego incluirlos estratégicamente para agregar capas.
Por ejemplo, en el proyecto de FAA, hay un archivo faa_raw.lkml
que contiene todas las vistas y exploraciones que se generaron a partir de tablas en tu base de datos. Este archivo tiene una vista para todas las tablas de la base de datos, cada una con dimensiones para cada columna de la base de datos.
Además del archivo sin procesar, puedes crear un archivo faa_basic.lkml
para agregar una nueva capa con mejoras básicas, como agregar uniones a tus exploraciones o agregar medidas a tus vistas, de la siguiente manera:
include: "faa_raw.lkml"
explore: +flights {
join: carriers {
sql_on: ${flights.carrier} = ${carriers.name} ;;
}
}
view: +flights {
measure: total_seats {
type: sum
sql: ${aircraft_models.seats} ;;
}
}
Luego, puedes agregar un archivo faa_analysis.layer.lkml
para agregar una capa nueva con análisis (consulta la subsección Utiliza mejoras para agregar análisis para ver un ejemplo de un archivo de análisis).
A partir de ahí, solo debes incluir todos los archivos de refinamiento en el archivo de modelo. También puedes usar el archivo del modelo para agregar perfeccionamientos y apuntar tus vistas a las tablas de la base de datos a las que quieres hacer referencia:
connection: "publicdata_standard_sql"
include: "faa_raw.lkml"
include: "faa_basic.lkml"
include: "faa_analysis.lkml"
view: +flights {
sql_table_name: lookerdata.faa.flights;;
}
view: +airports {
sql_table_name: lookerdata.faa.airports;;
}
view: +aircraft {
sql_table_name: lookerdata.faa.aircraft;;
}
view: +aircraft_models{
sql_table_name: lookerdata.faa.aircraft_models;;
}
view: +carriers {
sql_table_name: lookerdata.faa.carriers;;
}
Puedes duplicar este archivo de modelo y apuntar a diferentes tablas de base de datos, o puedes incluir diferentes archivos de perfeccionamiento que hayas creado para definir otras capas que desees en tu modelo.
Cómo usar ajustes para las PDT
Como se describe en la sección Perfeccionamientos en comparación con extensiones de esta página, una extensión crea una copia nueva del objeto que se está extendiendo. En el caso de las tablas derivadas persistentes (PDT), no debes usar extensiones, ya que cada extensión de una PDT creará una copia nueva de la tabla en la base de datos.
Sin embargo, puedes agregar perfeccionamientos a la vista de PDT, ya que estas no crean una copia nueva del objeto que se está perfeccionando.
Cómo usar metadatos para ver mejoras de un objeto
Puedes hacer clic en un parámetro explore
o view
en el IDE de Looker y usar el panel de metadatos para ver los ajustes en el objeto. Para obtener más información, consulta la página de documentación Metadatos de objetos de LookML.
Aspectos para tener en cuenta
Proyectos con localización
Cuando perfecciones un objeto, ten en cuenta que las reglas de localización también se aplican a tus ajustes. Si estás perfeccionando un objeto y luego definiendo etiquetas o descripciones nuevas, debes proporcionar definiciones de localización en los archivos de cadenas de configuración regional del proyecto. Consulta la página de documentación Cómo localizar tu modelo de LookML para obtener más información.