sql (para campos)

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ámetro sql (para tablas derivadas).

Uso

view: view_name {
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ón

Acepta
Una expresión de SQL

Reglas 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 que SQL_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 con sql que incluya una agregación de SQL o que haga referencia a una medida de LookML, usa un parámetro sql 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 %} ;;
}