En esta página, se hace referencia al parámetro
sql
que forma parte de un campo.
sql
también se puede usar como parte de una tabla derivada, como se describe en la página de documentación del parámetrosql
(para tablas derivadas).
Uso
dimension: field_name {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ; }
}
Jerarquía
sql |
Tipos de campos posibles
Dimensión, Grupo de dimensiones, Filtro y MediciónAcepta
Una expresión de SQLReglas especiales
Una expresión de SQL que varía según el type del campo (consulta a continuación para obtener más detalles)
|
Definición
El parámetro sql
toma varios tipos de expresiones de SQL que definirán una dimensión, una medida o un filtro. La expresión que debes escribir varía según el tipo de campo que creas. Puede encontrar más detalles sobre los tipos de dimensiones y filtros en la página de documentación Dimensión, filtro y tipos de parámetros, mientras que más detalles sobre los tipos de mediciones se pueden encontrar en la página de documentación Tipos de medición. Consulta también la página de documentación Incorpora SQL y referencias a objetos LookML.
sql
para dimensiones
Por lo general, el bloque sql
para dimensiones puede tomar cualquier SQL válido que se incluya en una sola columna de una instrucción SELECT
. Por lo general, estas declaraciones dependen del operador de sustitución de Looker, que tiene varias formas:
${TABLE}.column_name
hace referencia a una columna de la tabla que está conectada a la vista en la que estás trabajando.${dimension_name}
hace referencia a una dimensión de la vista en la que estás trabajando.${view_name.dimension_name}
hace referencia a una dimensión de otra vista.${view_name.SQL_TABLE_NAME}
hace referencia a otra vista o tabla derivada. (Ten en cuenta queSQL_TABLE_NAME
en esta referencia es una string literal; no necesitas reemplazarla con nada).
Si no se especifica sql
, Looker supone que hay una columna en la tabla subyacente con el mismo nombre que el campo. Por ejemplo, seleccionar un campo llamado city
sin un parámetro sql
sería equivalente a especificar sql: ${TABLE}.city
.
El parámetro
sql
de una dimensión no puede incluir agregaciones. Esto significa que no puede contener agregaciones de SQL ni referencias a medidas de LookML. Si quieres crear un campo consql
que incluya una agregación de SQL o que haga referencia a una medida de LookML, usa un parámetrosql
en una medida, no en una dimensión.
Una dimensión muy simple que toma el valor directamente de una columna llamada revenue
podría tener el siguiente aspecto:
dimension: revenue_in_cents {
sql: ${TABLE}.revenue ;;
type: number
}
Una dimensión que depende de otra dimensión en la misma vista podría verse así:
dimension: revenue_in_dollars {
sql: ${revenue_in_cents} / 100 ;;
type: number
}
Una dimensión que depende de otra en una vista diferente podría tener el siguiente aspecto:
dimension: profit_in_dollars {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
type: number
}
Una dimensión que se basa en otra dimensión de una tabla derivada podría tener el siguiente aspecto:
dimension: average_margin {
sql: (SELECT avg(${gross_margin} FROM ${order_facts.SQL_TABLE_NAME})) ;;
type: number
}
Los usuarios de SQL más avanzados pueden realizar cálculos relativamente avanzados, incluidas las subconsultas correlacionadas (nota: no todas las subconsultas correlacionadas sobre dialectos de la base de datos tienen las siguientes características):
dimension: user_order_sequence_number {
type: number
sql:
(
SELECT COUNT(*)
FROM orders AS o
WHERE o.id <= ${TABLE}.id
AND o.user_id = ${TABLE}.user_id
) ;;
}
Para obtener más detalles, consulte la documentación sobre un tipo de dimensión específico.
sql
para grupos de dimensiones
El parámetro sql
para una dimension_group
toma cualquier expresión de SQL válida que contenga datos en un formato de marca de tiempo, fecha y hora, fecha, época o aaaammdd.
sql
para Medidas
El bloque sql
de medidas suele tener una de dos formas:
- El SQL sobre el que se realizará una función agregada (como
COUNT
,SUM
,AVG
) nuevamente, mediante el operador de sustitución de Looker como se describió antes - Un valor basado en otras medidas
Por ejemplo, para calcular los ingresos totales en dólares, podemos usar:
measure: total_revenue_in_dollars {
sql: ${revenue_in_dollars} ;;
type: sum
}
Para calcular nuestra ganancia total, podemos usar:
measure: total_revenue_in_dollars {
sql: ${total_revenue_in_dollars} - ${inventory_item.total_cost_in_dollars} ;;
type: number
}
Para obtener más detalles, consulte la documentación de un tipo de medida específico.
Para un tipo de medida count
, puedes omitir el parámetro sql
.
Para otros tipos de medidas, si sql
no se especifica, Looker supone que hay una columna en la tabla subyacente con el mismo nombre que el campo. Dado que una medida debe tener un nombre que indique que es un conjunto de un conjunto subyacente de valores, en la práctica, siempre debes incluir un parámetro sql
.
Desafíos matemáticos de SQL
Hay dos desafíos frecuentes que surgen con la división en el parámetro sql
.
En primer lugar, si usas la división en el cálculo, debes protegerte contra la posibilidad de dividir por cero, lo que generará un error de SQL. Para hacerlo, usa la función NULLIF
de SQL. Por ejemplo, en este caso, significa "si el denominador es cero, trátalo como NULL":
measure: active_users_percent {
sql: ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
Otro problema es la forma en que SQL maneja las matemáticas de números enteros. Si se divide en cinco por dos, la mayoría de las personas esperan que el resultado sea 2.5. Sin embargo, muchos dialectos de SQL mostrarán el resultado como solo 2, ya que, cuando se dividen dos números enteros, también se muestra el resultado como un número entero. Para solucionar este problema, puedes multiplicar el numerador por un número decimal para forzar a SQL a mostrar un resultado decimal. Por ejemplo:
measure: active_users_percent {
sql: 100.00 * ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
Variables líquidas con sql
También puedes usar variables líquidas con el parámetro sql
. Las variables líquidas le permiten acceder a datos como los valores de un campo, los datos sobre el campo y los filtros que se aplicaron.
Por ejemplo, esta dimensión enmascara una contraseña de cliente de acuerdo con un atributo de usuario de Looker:
dimension: customer_password {
sql:
{% dynamic if _user_attributes['pw_access'] == 'yes' %}
${password}
{% dynamic else %}
"Password Hidden"
{% dynamic endif %} ;;
}