En esta página, se describen patrones más comunes en LookML.
Campos de etiquetado (y nombres en la IU)
Looker convierte los nombres de campos de LookML en las strings que se muestran en la IU, combinando el nombre de la vista en una fuente con grosor normal y el nombre corto del campo en negrita. Por ejemplo, un campo llamado Amount en la vista Pedidos aparecería en la IU como Importe de pedidos. En esta página, aparecen en negrita y el nombre de la vista en mayúscula (ORDERS Amount) para aclarar la discusión.
Si quieres que el nombre de un campo sea diferente del nombre de la columna en una tabla, simplemente cambia el nombre del campo y declara su vinculación sql:
. En el siguiente ejemplo, hay una tabla airports
con una columna cntrl_twr
. Looker generaría la siguiente declaración:
view: airports {
dimension: cntrl_twr { # full name: airports.cntrl_twr
type: yesno # default name: AIRPORT Cntrl Twr (Yes/No)
sql: ${TABLE}.cntrl_twr ;; # the sql expression for this field
}
}
Cambiaremos el nombre de la dimensión cntrl_twr
para que sea legible.
view: airports {
dimension: has_control_tower { # full name: airports.has_control_tower
type: yesno # aliased name: AIRPORTS Has Control Tower (Yes/No)
sql: ${TABLE}.cntrl_twr ;; # the sql expression for this field
}
}
Cómo filtrar los recuentos por dimensión
Es muy fácil agrupar por dimensión y contar entidades. Si agrupas por USERS Country, ORDERS Count te indicará de dónde provienen tus pedidos por país. Sin embargo, suele ser útil crear un recuento filtrado por algún valor dimensional. Por ejemplo, podría hacer la siguiente medición nueva ORDERS France Count:
view: users {
dimension: country {}
}
view: orders {
dimension: id {
primary_key: yes
sql: ${TABLE}.id ;;
}
measure: count {
type: count
drill_fields: [detail]
}
measure: france_count {
type: count # COUNT(CASE WHEN users.country = 'France' THEN 1 ELSE NULL END)
filters: [users.country: "France"]
}
}
Los filtros pueden usar cualquier expresión. Si quisieras un campo que contara usuarios de la UE, podrías usar algo como lo siguiente:
measure: eu_count {
type: count # COUNT(CASE WHEN users.countrycode IN 'UK','FR','ES' THEN 1 ELSE NULL END)
drill_fields: [detail]
filters: [users.countrycode: "UK,FR,ES"]
}
Si deseas filtrar con una expresión matemática, asegúrate de encerrarlo entre comillas dobles:
measure: total_orders_above_100_dollars {
type: sum # SUM(CASE WHEN order.value > 100 THEN order.value ELSE NULL END)
sql: ${order.value} ;;
drill_fields: [detail]
filters: [order.value: ">100"]
}
Porcentajes
Muchos indicadores clave de rendimiento se expresan en forma de porcentajes, como "el porcentaje de artículos mostrados", "el porcentaje de correos electrónicos que generaron una venta" u otras instancias del "porcentaje de X que Y". En LookML, el patrón de diseño es crear recuentos para las dos condiciones y crear un tercer campo que calcule el porcentaje entre las dos.
dimension: returned {
type: yesno
}
measure: count { # total count of items
type: count_distinct
sql: ${TABLE}.id ;;
drill_fields: [detail]
}
measure: returned_count { # count of returned items
type: count_distinct
sql: ${TABLE}.id ;;
drill_fields: [detail]
filters: [returned: "Yes"]
}
measure: percent_returned {
type: number
sql: 100.0 * ${returned_count} / NULLIF(${count}, 0) ;;
value_format: "0.00"
}
Usa el siguiente formulario cuando calcules porcentajes. En Postgres, los recuentos son números enteros, y la división entre números enteros da como resultado números enteros. La multiplicación por 100.0 convierte el primer recuento en un número de punto flotante y, así, convierte el resto de la expresión en un número de punto flotante. Para evitar errores de división por cero, NULLIF(value, 0)
convertirá un valor de cero en nulo, lo que hará que el resultado sea nulo y evite un error.
100.0 * ${returned_count} / NULLIF(${count}, 0)
Cómo usar conjuntos para los detalles de desglose
Una de las funciones más potentes de Looker es la capacidad de desglosar los datos para ver las entidades subyacentes que conforman un recuento o alguna otra medida.
Cuando se hace clic en una medición en la IU de Looker, se crea una consulta nueva que localiza el conjunto de datos que conforman la medición. Cada valor de cada dimensión de la fila de la tabla se agrega a los filtros actuales.
Para mostrar los detalles, Looker necesita una lista específica de campos de perforación a fin de que se muestre cuando se hace clic en el valor de la medida. Cuando generas un modelo, el generador suele crear algunos campos de perforación iniciales. Además, puedes agregar campos de perforación por tu cuenta. Por ejemplo, supongamos que calculamos el Recuento de pedidos por Estado de USERS durante la última semana. En Looker, la consulta se vería de la siguiente manera:
Estado de USERS | Recuento de ORDERS |
---|---|
California | 24 |
Texas | 5 |
Colorado | 4 |
Florida | 4 |
Illinois | 4 |
Si hacemos clic en 24, en la fila California, se espera que se vean los 24 pedidos que provienen de California.
Looker se encarga de agregar el filtro USERS State: California, pero Looker no sabe qué campos quieres mostrar en el orden. Deberá utilizar un conjunto para declarar esos campos en su modelo.
En LookML, un set es una lista de nombres de campos (dimensión, medición y filtro). Los conjuntos se usan para indicarle a Looker qué campos debe hacer:
- Quieres mostrarla al desglosar un recuento o alguna otra medida
- Cómo importar cuando se une a una vista
- Están indexados en Explorar
El mismo conjunto se puede usar en muchos lugares de un modelo, por lo que Looker proporciona varias formas de crear conjuntos.
Conjuntos literales
La forma más simple de un conjunto es un conjunto literal. Para crear un conjunto literal, simplemente se declara el conjunto como un array. Puedes declarar conjuntos literales con '[]'.
Dado este ejemplo:
view: customers {
dimension: id {
primary_key: yes
}
measure: count {
type: count
}
dimension: city {}
dimension: state {}
dimension: name {}
}
Los campos que queremos mostrar son id
, name
y city
.
En la medida, simplemente podemos declarar un array literal.
measure: count {
type: count
drill_fields: [id, name, city]
}
En el caso de los conjuntos que solo se usan una vez, declararlos de manera literal es simple y fácil de entender.
Conjuntos con nombre
Supongamos que tenemos dos: Conteo de CLIENTES y Consumidores de clientes en California. Cuando profundicemos en alguno de estos recuentos, nos gustaría mostrar los campos id
, name
y city
. Si declaramos los campos de forma literal, podríamos hacer lo siguiente:
view: customers {
measure: count {
type: count
drill_fields: [id, name, city]
}
measure: in_california_count {
type: count
filters: [state: "California"]
}
}
Si quisiéramos agregar un campo nuevo (por ejemplo, el campo customers.state
), tendríamos que editar ambas listas. En su lugar, LookML proporciona una forma de crear conjuntos con nombre que podemos mantener en un solo lugar y usar en varios lugares.
El siguiente código crea un conjunto customers.detail
y apunta ambos recuentos al mismo conjunto.
view: customers {
set: detail {
fields: [id, name, city] # creates named set customers.detail
}
measure: count {
type: count
drill_fields: [detail*] # show fields in the set "customers.detail"
}
measure: in_california_count {
type: count
filters: [state: "California"]
}
}
Los conjuntos de LookML son bastante potentes:
- La redeclaración de conjuntos es aditiva. Si declaras un conjunto en varios lugares, Looker incluirá todos los campos que se declararon para el conjunto en todas las ubicaciones.
- Para incorporar conjuntos en otros conjuntos, escribe el otro nombre de conjunto seguido de un asterisco, como
setname*
. - Incluso puedes quitar elementos de los conjuntos si colocas un guion antes del nombre del campo, como
-fieldname
.
Lee la referencia de los conjuntos completos.
Cómo personalizar las visualizaciones de desgloses
Si el administrador de Looker habilitó la función de Labs de perforación visual, las visualizaciones de desglose de Look and Explore no siempre serán predeterminadas para una tabla de datos. En este caso, puedes personalizar la visualización que se muestra con variables líquidas en el parámetro link
, como se muestra en la página de documentación del parámetro link
y en la página de Prácticas recomendadas más detalladas.
Los paneles son compatibles con los desgloses visuales mediante el parámetro link
sin necesidad de habilitar la función de labs de perforación visual.
Filtra conjuntos de resultados
LookML proporciona un conjunto de operaciones de filtrado que se pueden aplicar a los campos y explora para filtrar conjuntos de resultados antes de que se muestren al usuario.
always_filter
en Explorar
Usa always_filter
para aplicar siempre un conjunto de filtros a cualquier consulta que se ejecute en Explorar. Los filtros aparecerán en la IU de Looker, y aunque los usuarios pueden cambiar el valor de filtro predeterminado que proporcionas, no pueden quitar los filtros. En general, estos filtros se utilizan para quitar los datos que normalmente no desea incluir. Por ejemplo, supongamos que, en la sección Explorar Pedidos, solo queríamos ver pedidos que estaban completos o pendientes. Podríamos agregar lo siguiente:
explore: orders {
view_name: order
filters: [status: "complete,pending"]
}
}
Si el usuario desea ver pedidos con otros valores de estado, puede establecer Estado de PEDIDOS en % en la IU.
sql_always_where
en Explorar
Si deseas aplicar una restricción de consulta que los usuarios no pueden cambiar, puedes usar sql_always_where
. Además de las consultas que ejecutan los usuarios, la restricción se aplicará a los paneles, las apariencias programadas y la información incorporada que se base en la función Explorar. Una condición sql_always_where
no se muestra al usuario, a menos que mire el SQL subyacente de las consultas que crea.
En el siguiente ejemplo, se impide que los usuarios observen pedidos antes del 1/1/2012:
# Using Looker references
explore: order {
sql_always_where: ${created_date} >= '2012-01-01' ;;
}
# Using raw SQL
explore: order {
sql_always_where: DATE(created_time) >= '2012-01-01' ;;
}
conditionally_filter
en Explorar
Las tablas muy grandes requieren cierta reflexión cuando se realizan consultas, ya que las consultas ilimitadas pueden volverse demasiado pesadas en la base de datos. LookML proporciona una forma de abordar esto en la forma de conditionally_filter
.
Usas el parámetro conditionally_filter
para aplicar un filtro a la consulta, a menos que el usuario ya haya agregado un filtro para uno de los campos enumerados en la sección unless
.
El siguiente ejemplo no realizará ningún cambio en la consulta del usuario si este aplicó un filtro en uno o más de estos campos: created_date
, shipped_time
, shipped_date
, orders.id
o customer.name
. Si el usuario no filtró en ninguno de esos campos, Looker agregará automáticamente un filtro de 1 día en orders.created_time
.
filters: [orders.created_time: "1 day"]
unless: [created_date, shipped_time, shipped_date, orders.id, customer.name]
}