Uso
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
|
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
ysql_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 detype: duration
, el parámetrodatatype
se aplica a los parámetrossql_start
ysql_end
, por lo que debes asegurarte de quesql_start
ysql_end
sean del tipo de datos especificado. El parámetrodatatype
se describe con más detalle en la sección Especifica la base de datosdatatype
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 detype: 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 incluyetimeframes
, 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óntype: 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 datosdatatype
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 yconvert_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
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 |
Plazo | Descripción | Resultado de ejemplo |
---|---|---|
date |
Fecha del campo subyacente | 2017-09-03 |
Períodos de la semana
Períodos del mes
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
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
Para usar el período de fiscal_year
, se debe establecer el parámetro fiscal_month_offset
en el modelo.
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
.
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
.
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 undimension_group
con más de untimeframe
. 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.