grupo_dimensión

Uso

view: view_name {
dimension_group: field_name { ... }
}
Jerarquía
dimension_group
Acepta
Un identificador de Looker (que funcionará como la primera parte del nombre de cada dimensión que cree el grupo de dimensiones)

Reglas especiales
  • type puede ser time o duration.
  • Por lo general, se usa con un parámetro timeframes o intervals
  • Use un parámetro datatype si el grupo de dimensiones no se basa en un campo de fecha y hora
  • Para los grupos de dimensiones de type: time, use un parámetro convert_tz si desea evitar la conversión automática de zona horaria.

Definición

El parámetro dimension_group se usa para crear un conjunto de dimensiones basadas en el tiempo o en la duración, todas a la vez. Defina el grupo de dimensiones, y este creará un conjunto de dimensiones individuales para diferentes intervalos o períodos. Por ejemplo, puede especificar un grupo de dimensiones de type: time en función de una columna de marca de tiempo, y el grupo creará las dimensiones correspondientes para expresar los datos en tiempo, fecha, semana, hora, trimestre y año.

La forma y la función del grupo de dimensiones son diferentes según el valor type del grupo:

Tipo de duración

type: duration se usa junto con un dimension_group para calcular un conjunto de dimensiones de duración basadas en intervalos.

El formato de un grupo de dimensiones de type: duration es el siguiente:

dimension_group: dimension_group_name {
  type: duration
  sql_start: SQL expression ;;  # often this is a single database column
  sql_end: SQL expression ;;  # often this is a single database column
  intervals: [interval, interval, …] # valid intervals described below
}

Para grupos de dimensiones de type: duration:

  • Los parámetros sql_start y sql_end proporcionan expresiones de SQL que definen la hora de inicio y la de finalización. Consulta la sección Cómo definir el inicio y el final de una duración en esta página para obtener más información.

  • El parámetro intervals especifica una o más unidades de intervalo que se deben usar para medir la diferencia de tiempo. Las opciones posibles se indican en la sección Opciones de intervalo de esta página.

  • Los valores de duración se establecen en el número entero más cercano.

  • El parámetro datatype es opcional. Si su grupo de dimensiones no se basa en una fecha y hora, puede especificar un formato de época, marca de tiempo, fecha o aaaammdd en su lugar. Para los grupos de dimensiones de type: duration, el parámetro datatype se aplica a los parámetros sql_start y sql_end, por lo que debes asegurarte de que sql_start y sql_end sean del tipo de datos especificado. El parámetro datatype se describe con más detalle en la sección Especifica la base de datos datatype de esta página.

Aunque no se enumeran aquí, muchos de los parámetros a nivel del campo también se pueden usar con grupos de dimensiones.

Por ejemplo, si tienes columnas para enrollment_date y graduation_date, puedes crear un grupo de dimensiones de duración para ver cuánto tiempo pasaron los alumnos en la escuela, calculado por intervalos de semanas y años:

dimension_group: enrolled {
  type: duration
  intervals: [week, year]
  sql_start: ${TABLE}.enrollment_date ;;
  sql_end: ${TABLE}.graduation_date ;;
}

En la IU de Explorar, se generaría un grupo de dimensiones llamado Duración de la inscripción, con dimensiones individuales llamadas Semanas de inscripción inscritas y Años de inscripción inscritos.

Opciones de intervalos

El parámetro intervals le indica al grupo de dimensiones qué unidades de intervalo debe usar para medir la diferencia de tiempo entre la hora de sql_start y la de sql_end. El parámetro intervals solo es compatible con los grupos de dimensiones de type: duration.

Si no se incluye intervals, el grupo de dimensiones incluirá todos los intervalos posibles.

Las opciones para el parámetro intervals son las siguientes:

Intervalo Descripción Resultado de ejemplo
day Calcula una diferencia de tiempo en días. 9 days
hour Calcula una diferencia de tiempo en horas. 171 hours
minute Calcula una diferencia de tiempo en minutos. 10305 minutes
month Calcula una diferencia de tiempo en meses. 3 months
quarter Calcula una diferencia de tiempo en trimestres del año. 2 quarters
second Calcula una diferencia de tiempo en segundos. 606770 seconds
week Calcula una diferencia de tiempo en semanas. 6 weeks
year Calcula una diferencia de tiempo en años. 2 years

Cómo definir el inicio y el final de una duración

Para los grupos de dimensión de type: duration, los parámetros sql_start y sql_end proporcionan la información de inicio y fin que se usa para calcular una diferencia de tiempo. Estos campos pueden tomar cualquier expresión de SQL válida que contenga datos en formato de marca de tiempo, fecha, hora, ciclo de entrenamiento o fecha. Los campos sql_start y sql_end pueden ser cualquiera de los siguientes:

  • Una referencia a un período de raw de un grupo de dimensiones existente de type: time
  • Una referencia a una dimensión de type: date_raw
  • Una expresión de SQL que es una marca de tiempo, como una referencia a una columna de SQL que es una marca de tiempo
  • Una expresión SQL que extrae un tiempo de tu base de datos mediante la expresión adecuada para tu dialecto
  • Una referencia de campo de LookML con la referencia de tipo de campo ::datetime o ::date

A modo de ejemplo, supongamos que tienes una dimensión llamada faa_event_date_raw que contiene información de fecha y hora:

dimension: faa_event_date_raw {
  type: date_raw
  sql: ${TABLE}.event_date ;;
}

Puede crear un grupo de dimensiones de type: duration que calcule la cantidad de tiempo transcurrido desde la fecha del evento FAA. Para hacerlo, puedes usar la dimensión faa_event_date_raw como hora de inicio del cálculo y, luego, para la hora de finalización del cálculo, puedes usar la expresión SQL de tu dialecto a fin de la hora actual. Este ejemplo es para una base de datos MySQL:

dimension_group: since_event {
  type: duration
  intervals: [hour, day]
  sql_start: ${faa_event_date_raw} ;;
  sql_end: CURRENT_TIMESTAMP();;
}

En la IU de Explorar, se generaría un grupo de dimensiones llamado Duración desde el evento, con dimensiones individuales llamadas Horas desde el evento y Días desde el evento.

Haz referencia a intervalos de otro campo de LookML

Para hacer referencia a un valor interval en un dimension_group de type: duration, usa la sintaxis ${interval_fieldname} con la versión en plural del valor interval. Por ejemplo, en el siguiente ejemplo de LookML, la medida average_days_since_event usa ${days_since_event} para hacer referencia al intervalo day en el grupo de dimensiones since_event:


dimension_group: since_event {
  type: duration
  intervals: [hour, day, week, month, quarter, year]
  sql_start: ${faa_event_date_raw} ;;
  sql_end: CURRENT_TIMESTAMP();;
}

measure: average_days_since_event {
  type: average
  sql: ${days_since_event} ;;
}

Usa referencias de tipo de campo de LookML con campos de duración

Para crear un campo de duración personalizado, puedes especificar un tipo de referencia ::date o ::datetime para las dimensiones a las que se hace referencia en los parámetros sql_start y sql_end de un grupo de dimensiones de type: duration. La sintaxis view_name.field_name::type, que se describe en la página de documentación Cómo incorporar SQL y hacer referencia a objetos LookML, te permite crear una versión ::date o ::datetime de un campo sin convertir las referencias a esas dimensiones en strings.

Por ejemplo, supongamos que tiene un grupo de dimensiones created de type: time con períodos de time, date, week, month y raw, que se definen de la siguiente manera:


dimension_group: created {
  type: time
  timeframes: [time, date, week, month, raw]
  sql: ${TABLE}.created_at ;;
}

Con las dimensiones created_month y created_time, puedes crear un grupo de dimensiones de type: duration, que calcula la cantidad de tiempo entre una fecha del campo created_date y el primer día del mes en el que se produjo esa fecha, medido en semanas, días y horas:


dimension_group: since_first_of_month {
  type: duration
  intervals: [week, day, hour]
  sql_start: ${created_month::datetime} ;;
  sql_end: ${created_time::datetime} ;;
}

En la IU de Explorar, se crea un grupo de dimensiones llamado Duración desde el primer mes, con dimensiones individuales como Semanas desde el primer mes, Días desde el primer mes y Horas desde el primer mes. Especificar el tipo de referencia ::datetime para los campos a los que se hace referencia en los parámetros sql_start y sql_end permite que las dimensiones created_month y created_time se traten como marcas de tiempo en el SQL generado.

Por ejemplo, supongamos que un usuario selecciona las dimensiones Fecha de creación y Días desde el primer mes desde el selector de campos. Si uno de los valores mostrados para Created Date es 2019-03-10, el valor mostrado para DaysDesde el primer mes será 9 days.

Tipo hora

type: time se usa junto con dimension_group y el parámetro timeframes para crear un conjunto de dimensiones basadas en el tiempo. Por ejemplo, puede crear fácilmente una dimensión de fecha, semana y mes en función de una sola columna de marca de tiempo.

El formato de un grupo de dimensiones de type: time es el siguiente:

dimension_group: dimension_group_name {
  type: time
  timeframes: [timeframe, timeframe, …] # valid timeframes described below
  sql: SQL expression ;;  # often this is a single database column
  datatype: epoch| timestamp | datetime | date | yyyymmdd # defaults to datetime
  convert_tz: yes | no   # defaults to yes
}

Para grupos de dimensiones de type: time:

  • El parámetro timeframes es opcional, pero rara vez se omite. Especifica uno o más períodos que el grupo de dimensiones debe generar. Si no se incluye timeframes, se agregará cada opción de período al grupo de dimensiones. Las opciones posibles se enumeran en la sección Opciones de período en esta página.

  • El parámetro sql para los grupos de dimensión type: time puede tomar cualquier expresión de SQL válida que contenga datos en un formato de marca de tiempo, fecha y hora, fecha, época o aaaammdd.

  • El parámetro datatype es opcional. Si su grupo de dimensiones no está basado en una fecha y hora, puede especificar un formato de época, marca de tiempo, fecha o aaaammdd en su lugar. Se describe con más detalle en la sección Especifica la base de datos datatype de esta página.

  • El parámetro convert_tz es opcional y le permite evitar la conversión automática de zona horaria. Se describe con más detalle en la sección Conversiones de zonas horarias y convert_tz de esta página.

Aunque no se enumeran aquí, muchos de los parámetros a nivel del campo también se pueden usar con grupos de dimensiones.

Como ejemplo, supongamos que tienes una columna llamada created_at que contiene información de fecha y hora. Deseas crear una dimensión de fecha, semana y mes en función de esta fecha y hora. Podría usar lo siguiente:

dimension_group: created {
  type: time
  timeframes: [date, week, month]
  sql: ${TABLE}.created_at ;;
}

En la IU de Explorar, esto generaría tres dimensiones con los nombres Fecha de creación, Semana creada y Mes creado. Observa cómo se combina el nombre de dimension_group con los períodos para generar los nombres de las dimensiones.

Opciones de período

El parámetro timeframes solo es compatible con los grupos de dimensiones de type: time. En el caso de los grupos de dimensiones de type: duration, use el parámetro intervals en su lugar.

El parámetro timeframes le indica al grupo de dimensiones qué dimensiones debe producir. Las opciones son las siguientes:

Períodos especiales

Plazo Descripción Resultado de ejemplo
raw El valor sin procesar de su base de datos, sin conversión de conversiones ni zona horaria. Solo se puede acceder a raw desde LookML y no aparecerá en la página Explorar. El período de tiempo raw muestra una marca de tiempo, a diferencia de la mayoría de los demás períodos que muestran una string con formato. Se usa principalmente para realizar operaciones de fecha en un campo. 2014-09-03
17:15:00 +0000
yesno Una dimensión yesno, que muestra "Sí" si la fecha y la hora tienen un valor; de lo contrario, se muestra "No" A diferencia de otros períodos, cuando te refieras a una dimensión de período de yesno de otro campo, no incluyas el período en la referencia. Por ejemplo, para hacer referencia a un período de yesno en el dimension_group: created, usa la sintaxis ${created}, no ${created_yesno}. Yes

Períodos

Plazo Descripción Resultado de ejemplo
time La fecha y la hora del campo subyacente (algunos dialectos de SQL muestran la misma precisión que la base de datos, mientras que otros muestran solo la segunda) 2014-09-03 17:15:00
time_of_day Hora del día 17:15
hour La fecha y la hora se truncan según la hora más cercana 2014-09-03 17
hour_of_day Hora de día en números enteros del campo subyacente 17
hourX Se divide cada día en intervalos con la cantidad de horas especificada. Para obtener una explicación, consulta a continuación. Ver a continuación
minute La fecha y la hora se truncan al minuto más cercano 2014-09-03 17:15
minuteX Se divide cada hora en intervalos con la cantidad de minutos especificada. Para obtener una explicación, consulta a continuación. Ver a continuación
second La fecha y la hora se truncan al segundo más cercano 2014-09-03 17:15:00
millisecond La fecha y la hora se truncan según el milisegundo más cercano (consulte la sección Compatibilidad de dialecto para milisegundos y microsegundos en esta página para obtener información sobre la compatibilidad con dialecto). 2014-09-03 17:15:00.000
millisecondX Se divide cada segundo en intervalos con la cantidad especificada de milisegundos (consulta la sección Compatibilidad con dialectos para milisegundos y microsegundos en esta página para obtener información sobre la compatibilidad con dialectos). Para obtener una explicación, consulta a continuación. Ver a continuación
microsecond La fecha y la hora se truncan según el microsegundo más cercano (consulte la sección Compatibilidad con dialectos en milisegundos y microsegundos en esta página para obtener información sobre la compatibilidad con dialectos). 2014-09-03 17:15:00.000000

Períodos

Plazo Descripción Resultado de ejemplo
date Fecha del campo subyacente 2017-09-03

Períodos de la semana

Plazo Descripción Resultado de ejemplo
week Fecha de la semana que comienza el lunes de la fecha y hora subyacentes 2017-09-01
day_of_week Solo el día de la semana Wednesday
day_of_week_index Índice del día de la semana (0 = lunes, 6 = domingo) 2

Períodos del mes

Plazo Descripción Resultado de ejemplo
month Año y mes de la fecha y hora subyacentes 2014-09
month_num Número entero del mes de la fecha y la hora subyacentes 9
fiscal_month_num Número entero del mes fiscal de la fecha y hora subyacentes 6
month_name Nombre del mes September
day_of_month Día del mes 3

Para usar los períodos de tiempo fiscal_month_num, se debe establecer el parámetro fiscal_month_offset en el modelo.

Períodos del trimestre

Plazo Descripción Resultado de ejemplo
quarter Año y trimestre de la fecha y hora subyacentes 2017-Q3
fiscal_quarter Año fiscal y trimestre de la fecha y hora subyacentes 2017-Q3
quarter_of_year Trimestre del año precedido por "Q" Q3
fiscal_quarter_of_year Trimestre fiscal del año precedido por "Q" Q3

Para usar los períodos fiscal_quarter y fiscal_quarter_of_year, se debe establecer el parámetro fiscal_month_offset en el modelo.

Períodos del año

Plazo Descripción Resultado de ejemplo
year Año entero de la fecha y hora subyacentes 2017
fiscal_year Año fiscal entero de la fecha y hora subyacentes FY2017
day_of_year Día del año 143
week_of_year Semana del año en número 17

Para usar el período de fiscal_year, se debe establecer el parámetro fiscal_month_offset en el modelo.

Con hourX

En hourX, se reemplaza X por 2, 3, 4, 6, 8 o 12.

Se dividirá cada día en intervalos con la cantidad de horas especificada. Por ejemplo, hour6 se dividirá cada día en segmentos de 6 horas, que aparecerán de la siguiente manera:

  • 2014-09-01 00:00:00
  • 2014-09-01 06:00:00
  • 2014-09-01 12:00:00
  • 2014-09-01 18:00:00

Para dar un ejemplo, una fila con un time de 2014-09-01 08:03:17 tendría un hour6 de 2014-09-01 06:00:00.

Con minuteX

En minuteX, se reemplaza X por 2, 3, 4, 5, 6, 10, 12, 15, 20 o 30.

Se dividirá cada hora en intervalos, con la cantidad de minutos especificada. Por ejemplo, minute15 se dividirá cada hora en segmentos de 15 minutos, que aparecerán de la siguiente manera:

  • 2014-09-01 01:00:00
  • 2014-09-01 01:15:00
  • 2014-09-01 01:30:00
  • 2014-09-01 01:45:00

Para dar un ejemplo, una fila con un time de 2014-09-01 01:17:35 tendría un minute15 de 2014-09-01 01:15:00.

Con millisecondX

En millisecondX, se reemplaza X por 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 125, 200, 250 o 500.

Se dividirá cada segundo en intervalos con la cantidad de milisegundos especificada. Por ejemplo, millisecond250 se dividirá cada segundo en segmentos de 250 milisegundos, que aparecerán de la siguiente manera:

  • 2014-09-01 01:00:00.000
  • 2014-09-01 01:00:00.250
  • 2014-09-01 01:00:00.500
  • 2014-09-01 01:00:00.750

Para dar un ejemplo, una fila con un time de 2014-09-01 01:00:00.333 tendría un millisecond250 de 2014-09-01 01:00:00.250.

Conversiones de zona horaria y convert_tz

En general, los cálculos de tiempo (diferencias, duraciones, etc.) solo funcionan correctamente cuando operas en valores de hora que se convierten en la misma zona horaria, por lo que es importante tener en cuenta las zonas horarias cuando escribes LookML.

Looker tiene varias configuraciones de zona horaria que convierten datos basados en horas entre diferentes zonas horarias. Looker realiza la conversión de zona horaria de forma predeterminada. El parámetro convert_tz es compatible con grupos de dimensiones de type: time. Si no quieres que Looker realice una conversión de zona horaria para una dimensión o un grupo de dimensiones en particular, puedes usar el parámetro convert_tz que se describe en la página de documentación del parámetro convert_tz.

Compatibilidad de marcación para milisegundos y microsegundos

Looker admite la precisión del período a microsegundos; sin embargo, algunas bases de datos solo admiten precisión hasta el segundo. Si una base de datos encuentra un período más preciso de lo que admite, se redondeará a segundos.

En la versión más reciente de Looker, los siguientes dialectos admiten milisegundos:

En la versión más reciente de Looker, los siguientes dialectos admiten microsegundos:

Especifica la base de datos datatype

El parámetro datatype le permite especificar el tipo de datos de tiempo en su tabla de base de datos que proporciona al grupo de dimensiones, lo que puede aumentar el rendimiento de la consulta.

Para los grupos de dimensiones de type: time, el parámetro datatype se aplica al parámetro sql del grupo de dimensiones.

Para los grupos de dimensión de type: duration, el parámetro datatype se aplica a los parámetros sql_start y sql_end, por lo que debe asegurarse de que sql_start y sql_end sean del tipo de datos especificado.

El parámetro datatype acepta los siguientes valores:

  • epoch: Es un campo de época de SQL (es decir, un número entero que representa la cantidad de segundos del ciclo de entrenamiento de Unix).
  • date: Es un campo de fecha de SQL (es decir, uno que no contiene información sobre la hora del día).
  • datetime: Es un campo de fecha y hora de SQL.
  • timestamp: Es un campo de marca de tiempo de SQL.
  • yyyymmdd: Es un campo de SQL que contiene un número entero que representa una fecha con el formato YYYYMMDD.

El valor predeterminado para datatype es timestamp.

Ejemplos

Supongamos que tienes una columna llamada created_at que contiene información de fecha y hora. Deseas crear una dimensión de fecha, semana y mes en función de esta fecha y hora. Podría usar lo siguiente:

dimension_group: created {
  type: time
  timeframes: [date, week, month]
  sql: ${TABLE}.created_at ;;
}

-

En la IU de Explorar, esto generaría tres dimensiones con los nombres Fecha de creación, Semana creada y Mes creado. Observa cómo se combina el nombre de dimension_group con los períodos para generar los nombres de las dimensiones.

Aspectos para tener en cuenta

Se debe hacer referencia a los grupos de dimensiones según sus dimensiones individuales

Como un grupo de dimensiones representa un grupo de dimensiones, en lugar de una sola, no puede hacer referencia a él directamente en LookML. En su lugar, deberá consultar las dimensiones que crea.

Por ejemplo, considere este grupo de dimensiones:

dimension_group: created {
  type: time
  timeframes: [date, week, month]
  sql: ${TABLE}.created_at ;;
}

-

Para hacer referencia a una de estas dimensiones en otro campo de LookML, usa la referencia ${created_date}, ${created_week} o {$created_month}. Si intentas usar solo ${created}, Looker no sabrá a qué plazo te refieres y se producirá un error.

Por este mismo motivo, no debes usar el parámetro primary_key en un grupo de dimensiones si especificas más de un timeframe.

Sugerencia para el equipo de Chat: A menudo, se nos pregunta sobre el error de validación que ocurre si usas primary_key en un dimension_group con más de un timeframe. Para obtener más información, consulta este tema de la comunidad.

Datos de marca de tiempo que incluyen información sobre la zona horaria

Algunos dialectos de bases de datos tienen opciones de marcas de tiempo que incluyen información de zona horaria. Esto te permite almacenar datos de marca de tiempo en un solo campo que puede tener varias zonas horarias. Una fila de datos se puede almacenar en UTC y otra fila en hora del Este. Como ejemplo, consulte la documentación de la marca de tiempo TIMESTAMP_LTZ, TIMESTAMP_NTZ, TIMESTAMP_TZ de Snowflake para obtener información sobre las opciones de marca de tiempo de dialecto de Snowflake.

En este caso, cuando Looker realiza conversiones de zona horaria, pueden producirse errores. Para evitar esto, en el parámetro sql de la dimensión, debes transmitir de forma explícita los datos de la marca de tiempo a un tipo de marca de tiempo que no realice la conversión de zona horaria. Por ejemplo, en el dialecto Snowflake, puedes usar la función TO_TIMESTAMP para transmitir los datos de la marca de tiempo.

Es posible crear dimensiones individuales de tiempo o duración

Es posible crear una dimensión para cada período o duración individual que desees incluir, en lugar de generarlos todos en una sola dimension_group. Por lo general, puedes evitar crear dimensiones individuales, a menos que desees cambiar la convención de nombres de los períodos de Looker, o ya tengas columnas de tiempo precalculadas en tu base de datos. Para obtener más información, consulte la página de documentación Dimensión, filtro y tipos de parámetros.

Puedes cambiar el primer día de la semana

De forma predeterminada, las semanas en Looker comienzan el lunes. Puedes cambiar esto mediante el parámetro week_start_day a nivel del modelo.

Ten en cuenta que week_start_day no funciona con el período de week_of_year, ya que se basa en el estándar ISO, que usa los lunes semanas.

Los filtros y campos personalizados no admiten todos los períodos

En la actualidad, los períodos day_of_week, fiscal_quarter_of_year, millisecond, millisecondX, microsecond, month_name, quarter_of_year y time_of_day no son compatibles con los filtros personalizados ni campos personalizados.

Los intervalos de meses, trimestres y años solo cuentan los períodos completos

El intervalo month de un grupo de dimensiones duration solo considera que pasó un mes si el día de finalización es mayor o igual que el día de inicio. Por ejemplo:

  • La diferencia en los meses entre el 26 de septiembre y el 25 de octubre del mismo año es 0.
  • La diferencia en los meses entre el 26 de septiembre y el 26 de octubre del mismo año es 1.

Los intervalos quarter y year siguen la misma lógica.