用法
view: view_name {
dimension_group: field_name { ... }
}
|
层次结构
dimension_group |
接受
一个 Looker 标识符(用作维度组创建的每个维度的名称的第一部分)
特殊规则
|
定义
dimension_group 参数用于一次性创建一组基于时间或时长的维度。您定义维度组后,该维度组将针对不同的时间间隔或时间范围创建一组单独的维度。例如,您可以基于时间戳列指定维度组 type: time,该维度组将创建相应的维度,以时间、日期、周、小时、季度和年份来表示数据。
维度组的形式和功能因维度组的 type 值而异:
时长类型维度组
type: duration 与 dimension_group 结合使用,可计算一组基于区间的时长维度。
维度组 type: duration 的形式如下:
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, …] # see following explanation for valid intervals
}
对于 type: duration 的维度组:
sql_start和sql_end参数提供用于定义时段开始时间和结束时间的 SQL 表达式。如需了解详情,请参阅本页面的定义时长起点和终点部分。intervals参数用于指定一个或多个应使用的间隔单位,以衡量时间差。如需查看可供选择的选项,请参阅本页面的间隔选项部分。时长值会向下舍入为最接近的整数。
datatype参数是可选的。如果您的维度组不是基于日期时间,您可以改为指定纪元、时间戳、日期或 yyyymmdd 格式。对于type: duration的维度组,datatype参数同时适用于sql_start和sql_end参数,因此请确保sql_start和sql_end均为指定的数据类型。如需详细了解datatype参数,请参阅本页上的指定数据库datatype部分。
虽然此处未列出,但许多字段级参数也可用于维度组。
例如,如果您有 enrollment_date 和 graduation_date 列,则可以创建时长维度组,以查看学生在学校花费的时间(以周和年为间隔计算):
dimension_group: enrolled {
type: duration
intervals: [week, year]
sql_start: ${TABLE}.enrollment_date ;;
sql_end: ${TABLE}.graduation_date ;;
}
在探索界面中,这会生成一个名为“注册时长”的维度组,其中包含名为“注册周数”和“注册年数”的各个维度。
间隔选项
intervals 参数用于告知维度组应使用哪些时间间隔单位来衡量 sql_start 时间与 sql_end 时间之间的时间差。intervals 参数仅支持 type: duration 的维度组。
如果不添加 intervals,维度组将包含所有可能的间隔。
intervals 参数的选项如下:
| 间隔 | 说明 | 输出示例 |
|---|---|---|
day |
以天为单位计算时间差。 | 9 days |
hour |
计算以小时为单位的时间差。 | 171 hours |
minute |
以分钟为单位计算时间差。 | 10305 minutes |
month |
计算以月为单位的时间差。 | 3 months |
quarter |
计算以季度为单位的时间差。 | 2 quarters |
second |
以秒为单位计算时间差。 | 606770 seconds |
week |
计算以周为单位的时间差。 | 6 weeks |
year |
计算以年为单位的时间差。 | 2 years |
定义时段的开始和结束
对于 type: duration 的维度组,sql_start 和 sql_end 参数提供用于计算时间差的开始和结束信息。这些字段可以接受任何有效的 SQL 表达式,其中包含时间戳、日期时间、日期、纪元或 yyyymmdd 格式的数据。sql_start 和 sql_end 字段可以是以下任意一项:
- 对
type: time的现有维度组中的raw时段的引用 - 对
type: date_raw维度的引用 - 一个时间戳 SQL 表达式,例如对时间戳 SQL 列的引用
- 一种 SQL 表达式,用于从数据库中提取时间,并使用适合相应方言的表达式
- 使用
::datetime或::date字段类型引用的 LookML 字段引用
例如,假设您有一个名为 faa_event_date_raw 的维度,其中包含日期时间信息:
dimension: faa_event_date_raw {
type: date_raw
sql: ${TABLE}.event_date ;;
}
您可以创建一个维度组 type: duration,用于计算自 FAA 事件日期以来经过的时间量。为此,您可以使用 faa_event_date_raw 维度作为计算的开始时间,然后使用方言的 SQL 表达式来表示当前时间,作为计算的结束时间。以下示例适用于 MySQL 数据库:
dimension_group: since_event {
type: duration
intervals: [hour, day]
sql_start: ${faa_event_date_raw} ;;
sql_end: CURRENT_TIMESTAMP();;
}
在“探索”界面中,这会生成一个名为“自事件发生以来的时长”的维度组,其中包含名为“自事件发生以来的小时数”和“自事件发生以来的天数”的各个维度。
引用其他 LookML 字段中的间隔
如需在 type: duration 的 dimension_group 中引用 interval 值,请使用 ${interval_fieldname} 语法,并使用 interval 值的复数形式。例如,在以下 LookML 示例中,average_days_since_event 度量使用 ${days_since_event} 引用 since_event 维度组中的 day 时间段:
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} ;;
}
将 LookML 字段类型引用与时长字段搭配使用
如需创建自定义时长字段,您可以为 type: duration 的维度组的 sql_start 和 sql_end 参数中引用的维度指定 ::date 或 ::datetime 参考类型。纳入 SQL 并引用 LookML 对象文档页面中介绍了 view_name.field_name::type 语法,该语法可让您创建字段的 ::date 或 ::datetime 版本,而无需将对这些维度的引用转换为字符串。
例如,假设您有一个 created 维度组,其 type: time 的时间范围为 time、date、week、month 和 raw,定义如下:
dimension_group: created {
type: time
timeframes: [time, date, week, month, raw]
sql: ${TABLE}.created_at ;;
}
使用维度 created_month 和 created_time,您可以创建维度组 type: duration,用于计算 created_date 字段中的日期与该日期所在月份的第一天之间的时间量(以周、天和小时为单位):
dimension_group: since_first_of_month {
type: duration
intervals: [week, day, hour]
sql_start: ${created_month::datetime} ;;
sql_end: ${created_time::datetime} ;;
}
在探索界面中,这会创建一个名为“自月初以来的时长”的维度组,其中包含“自月初以来的周数”“自月初以来的天数”和“自月初以来的小时数”这几个维度。为 sql_start 和 sql_end 参数中引用的字段指定 ::datetime 引用类型,可让系统在生成的 SQL 中将 created_month 和 created_time 维度视为时间戳。
例如,假设用户从字段选择器中选择了 Created Date 和 Days Since First of Month 维度。如果为创建日期返回的值之一是 2019-03-10,那么为自月初以来的天数返回的值将是 9 天。
时间类型维度组
type: time 与 dimension_group 和 timeframes 参数搭配使用,以创建一组基于时间的维度。例如,您可以基于单个时间戳列创建日期、周和月份维度。
type: time 的维度组的形式如下:
dimension_group: dimension_group_name {
type: time
timeframes: [timeframe, timeframe, …] # see following explanation for valid timeframes
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
}
对于 type: time 的维度组:
timeframes参数是可选的,但很少会被跳过。用于指定维度组应生成的一个或多个时间范围。如果不包含timeframes,则每个时间范围选项都会添加到维度组中。此页面上的时间范围选项部分列出了可供选择的时间范围。type: time维度组的sql参数可以采用任何有效的 SQL 表达式,其中包含时间戳、日期时间、日期、纪元或 yyyymmdd 格式的数据。datatype参数是可选的。如果维度组不是基于日期时间,您可以改为指定纪元、时间戳、日期或 yyyymmdd 格式。如需了解详情,请参阅本页的指定数据库datatype部分。convert_tz参数是可选的,可用于防止自动进行时区转换。如需了解详情,请参阅本页的时区转换和convert_tz部分。
虽然此处未列出,但许多字段级参数也可用于维度组。
举例来说,假设您有一个名为 created_at 的列,其中包含日期时间信息。您想基于此日期时间创建日期、周和月维度。您可以使用:
dimension_group: created {
type: time
timeframes: [date, week, month]
sql: ${TABLE}.created_at ;;
}
在“探索”界面中,这会生成三个维度,名称分别为“创建日期”“创建周”和“创建月份”。请注意,dimension_group 名称是如何与时间范围组合以生成维度名称的。
时段选项
timeframes 参数仅适用于 type: time 的维度组。对于 type: duration 的维度组,请改用 intervals 参数。
timeframes 参数用于告知维度组应生成哪些维度,并包含以下选项:
如果您未对 type: time 的维度组使用 timeframes 参数,或者将 timeframes 参数留空 (timeframes: []),则探索会包含该维度组的默认时间范围集:
dateday_of_monthday_of_weekday_of_week_indexday_of_yearhourhour_of_dayminutemonthmonth_namemonth_numquarterquarter_of_yeartimetime_of_dayweekweek_of_yearyear
特殊时间范围
时间范围
| 时间范围 | 说明 | 输出示例 |
|---|---|---|
time |
基础字段的日期时间(某些 SQL 方言会显示数据库中包含的尽可能高的精度,而其他方言只会显示到秒) | 2014-09-03 17:15:00 |
time_of_day |
时段 | 17:15 |
hour |
截断为最接近的小时数的日期时间 | 2014-09-03 17 |
hour_of_day |
底层字段的整数小时 | 17 |
hourX |
将每一天划分为指定小时数的间隔。 | 请参阅使用 hourX。 |
minute |
日期时间截断为最接近的分钟 | 2014-09-03 17:15 |
minuteX |
将每小时划分为指定分钟数的间隔。 | 请参阅使用 minuteX。 |
second |
日期时间截断到最接近的秒 | 2014-09-03 17:15:00 |
millisecond |
截断为最接近的毫秒的日期时间(如需了解方言支持,请参阅本页面上的毫秒和微秒的方言支持部分)。 | 2014-09-03 17:15:00.000 |
millisecondX |
将每秒拆分为具有指定毫秒数的间隔(如需了解方言支持,请参阅本页上的毫秒和微秒的方言支持部分)。 | 请参阅使用 millisecondX。 |
microsecond |
截断为最接近的微秒的日期时间(如需了解方言支持,请参阅本页面上的对毫秒和微秒的方言支持部分)。 | 2014-09-03 17:15:00.000000 |
日期时间范围
| 时间范围 | 说明 | 输出示例 |
|---|---|---|
date |
基础字段的日期 | 2017-09-03 |
周时间范围
| 时间范围 | 说明 | 输出示例 |
|---|---|---|
week |
相应日期时间中从星期一开始的一周的日期 | 2017-09-01 |
day_of_week |
仅限周几 | Wednesday |
day_of_week_index |
周几指数(0 = 星期一,6 = 星期日) | 2 |
月份时间范围
| 时间范围 | 说明 | 输出示例 |
|---|---|---|
month |
基础日期时间的年份和月份 | 2014-09 |
month_num |
基础日期时间的月份的整数值 | 9 |
fiscal_month_num |
基础日期时间的财政月整数 | 6 |
month_name |
月份名称 | September |
day_of_month |
一个月中的第几天 | 3 |
如需使用 fiscal_month_num 时间范围,必须在模型中设置 fiscal_month_offset 参数。
季度时间范围
| 时间范围 | 说明 | 输出示例 |
|---|---|---|
quarter |
基础 datetime 的年份和季度 | 2017-Q3 |
fiscal_quarter |
基础日期时间的财政年度和季度 | 2017-Q3 |
quarter_of_year |
年份季度,前面带有“Q” | Q3 |
fiscal_quarter_of_year |
年份的财政季度,前面带有“Q” | Q3 |
如需使用 fiscal_quarter 和 fiscal_quarter_of_year 时间范围,必须在模型中设置 fiscal_month_offset 参数。
年份时间范围
| 时间范围 | 说明 | 输出示例 |
|---|---|---|
year |
底层 datetime 的整数年份 | 2017 |
fiscal_year |
基础日期时间的整数形式的财政年度 | FY2017 |
day_of_year |
一年中的第几天 | 143 |
week_of_year |
以数值形式表示的一年中的周数 | 17 |
如需使用 fiscal_year 时间范围,必须在模型中设置 fiscal_month_offset 参数。
使用 hourX
在 hourX 中,X 会替换为 2、3、4、6、8 或 12。
这样一来,系统会将每一天划分为指定小时数的间隔。例如,hour6 会将每一天拆分为 6 小时的时间段,如下所示:
2014-09-01 00:00:002014-09-01 06:00:002014-09-01 12:00:002014-09-01 18:00:00
举例来说,如果某行的 time 为 2014-09-01 08:03:17,则其 hour6 为 2014-09-01 06:00:00。
使用 minuteX
在 minuteX 中,X 会替换为 2、3、4、5、6、10、12、15、20 或 30。
这样会将每小时划分为指定分钟数的间隔。例如,minute15 会将每小时拆分为 15 分钟的片段,如下所示:
2014-09-01 01:00:002014-09-01 01:15:002014-09-01 01:30:002014-09-01 01:45:00
举例来说,如果某行的 time 为 2014-09-01 01:17:35,则其 minute15 为 2014-09-01 01:15:00。
使用 millisecondX
在 millisecondX 中,X 会替换为 2、4、5、8、10、20、25、40、50、100、125、200、250 或 500。
这会将每秒划分为具有指定毫秒数的间隔。例如,millisecond250 会将每秒拆分为 250 毫秒的片段,如下所示:
2014-09-01 01:00:00.0002014-09-01 01:00:00.2502014-09-01 01:00:00.5002014-09-01 01:00:00.750
举例来说,如果某行的 time 为 2014-09-01 01:00:00.333,则其 millisecond250 为 2014-09-01 01:00:00.250。
时区转换和 convert_tz
一般来说,只有在对已全部转换为同一时区的时间值进行操作时,时间计算(差值、时长等)才能正常运行,因此在编写 LookML 时,请务必注意时区。
Looker 具有各种时区设置,可在不同时区之间转换基于时间的数据。Looker 默认会进行时区转换。convert_tz 参数支持 type: time 的维度组。如果您不希望 Looker 对特定维度或维度组执行时区转换,可以使用 convert_tz 参数文档页面中介绍的 convert_tz 参数。
对毫秒和微秒的方言支持
Looker 支持精确到微秒的时间范围;不过,有些数据库仅支持精确到秒的时间范围。如果数据库遇到比其支持的时间范围更精确的时间范围,则会向上舍入到秒。
在最新版 Looker 中,以下方言支持毫秒:
| 方言 | 是否支持? |
|---|---|
| Actian Avalanche | |
| Amazon Athena | |
| Amazon Aurora MySQL | |
| Amazon Redshift | |
| Amazon Redshift 2.1+ | |
| Amazon Redshift Serverless 2.1+ | |
| Apache Druid | |
| Apache Druid 0.13.x - 0.17.x | |
| Apache Druid 0.18+ | |
| Apache Hive 2.3+ | |
| Apache Hive 3.1.2+ | |
| Apache Spark 3+ | |
| ClickHouse | |
| Cloudera Impala 3.1+ | |
| Cloudera Impala 3.1+ with Native Driver | |
| Cloudera Impala with Native Driver | |
| DataVirtuality | |
| Databricks | |
| Denodo 7 | |
| Denodo 8 & 9 | |
| Dremio | |
| Dremio 11+ | |
| Exasol | |
| Google BigQuery Legacy SQL | |
| Google BigQuery Standard SQL | |
| Google Cloud AlloyDB for PostgreSQL | |
| Google Cloud PostgreSQL | |
| Google Cloud SQL | |
| Google Spanner | |
| Greenplum | |
| HyperSQL | |
| IBM Netezza | |
| MariaDB | |
| Microsoft Azure PostgreSQL | |
| Microsoft Azure SQL Database | |
| Microsoft Azure Synapse Analytics | |
| Microsoft SQL Server 2008+ | |
| Microsoft SQL Server 2012+ | |
| Microsoft SQL Server 2016 | |
| Microsoft SQL Server 2017+ | |
| MongoBI | |
| MongoSQL | |
| MySQL | |
| MySQL 8.0.12+ | |
| Oracle | |
| Oracle ADWC | |
| PostgreSQL 9.5+ | |
| PostgreSQL pre-9.5 | |
| PrestoDB | |
| PrestoSQL | |
| SAP HANA | |
| SAP HANA 2+ | |
| SingleStore | |
| SingleStore 7+ | |
| Snowflake | |
| Teradata | |
| Trino | |
| Vector | |
| Vertica |
在最新版 Looker 中,以下方言支持微秒:
| 方言 | 是否支持? |
|---|---|
| Actian Avalanche | |
| Amazon Athena | |
| Amazon Aurora MySQL | |
| Amazon Redshift | |
| Amazon Redshift 2.1+ | |
| Amazon Redshift Serverless 2.1+ | |
| Apache Druid | |
| Apache Druid 0.13.x - 0.17.x | |
| Apache Druid 0.18+ | |
| Apache Hive 2.3+ | |
| Apache Hive 3.1.2+ | |
| Apache Spark 3+ | |
| ClickHouse | |
| Cloudera Impala 3.1+ | |
| Cloudera Impala 3.1+ with Native Driver | |
| Cloudera Impala with Native Driver | |
| DataVirtuality | |
| Databricks | |
| Denodo 7 | |
| Denodo 8 & 9 | |
| Dremio | |
| Dremio 11+ | |
| Exasol | |
| Google BigQuery Legacy SQL | |
| Google BigQuery Standard SQL | |
| Google Cloud AlloyDB for PostgreSQL | |
| Google Cloud PostgreSQL | |
| Google Cloud SQL | |
| Google Spanner | |
| Greenplum | |
| HyperSQL | |
| IBM Netezza | |
| MariaDB | |
| Microsoft Azure PostgreSQL | |
| Microsoft Azure SQL Database | |
| Microsoft Azure Synapse Analytics | |
| Microsoft SQL Server 2008+ | |
| Microsoft SQL Server 2012+ | |
| Microsoft SQL Server 2016 | |
| Microsoft SQL Server 2017+ | |
| MongoBI | |
| MongoSQL | |
| MySQL | |
| MySQL 8.0.12+ | |
| Oracle | |
| Oracle ADWC | |
| PostgreSQL 9.5+ | |
| PostgreSQL pre-9.5 | |
| PrestoDB | |
| PrestoSQL | |
| SAP HANA | |
| SAP HANA 2+ | |
| SingleStore | |
| SingleStore 7+ | |
| Snowflake | |
| Teradata | |
| Trino | |
| Vector | |
| Vertica |
指定数据库 datatype
借助 datatype 参数,您可以指定数据库表中提供给维度组的时间数据类型,从而提高查询性能。
对于 type: time 的维度组,datatype 参数适用于维度组的 sql 参数。
对于 type: duration 的维度组,datatype 参数同时适用于 sql_start 和 sql_end 参数,因此请确保 sql_start 和 sql_end 均为指定的数据类型。
datatype 参数接受以下值:
epoch:一个 SQL 纪元字段(即一个整数,表示自 Unix 纪元以来的秒数)。date:SQL 日期字段(即不包含一天中的时间信息的字段)。datetime:SQL 日期时间字段。timestamp:SQL 时间戳字段。yyyymmdd:一个 SQL 字段,其中包含一个表示日期(格式为 YYYYMMDD)的整数。
datatype 的默认值为 timestamp。
自定义日历类型维度组
如果您已在 LookML 项目中实现自定义日历,则可以将 type: custom_calendar 与 dimension_group 参数搭配使用,以根据您在数据库中定义的自定义日历表创建一组基于时间的维度。如需了解如何在 LookML 项目中设置自定义日历,请参阅在 Looker 中使用自定义日历文档页面。
维度组 type: custom_calendar 的形式如下:
dimension_group: dimension_group_name {
type: custom_calendar
custom_timeframes: [custom_timeframe, custom_timeframe, …] # see the following section for valid custom timeframes
sql: SQL expression ;; # often this refers to a single database column
based_on_calendar: custom_calendar_view
}
对于 type: custom_calendar 的维度组:
custom_timeframes参数是可选的。它指定了维度组应生成的一个或多个自定义时间段。如果未指定custom_timeframes,维度组将创建所有自定义时间范围。此页面上的custom_timeframes部分列出了可能的自定义时间范围。type: custom_calendar维度组的sql参数可以采用任何有效的 SQL 表达式,其中包含时间戳、日期时间、日期、纪元或 yyyymmdd 格式的数据。based_on_calendar参数用于指定您在 LookML 中建模的自定义日历的视图名称。convert_tz参数是可选的,可用于防止自动进行时区转换。如需了解详情,请参阅本页的时区转换和convert_tz部分。datatype参数是可选的。如果维度组不是基于日期时间,您可以改为指定纪元、时间戳、日期或 yyyymmdd 格式。如需了解详情,请参阅本页面的指定数据库数据类型部分。
虽然此处未列出,但许多字段级参数也可用于维度组。
以下是 orders.view LookML 文件中的自定义日历维度组示例:
view: orders
include: "/views/retail_custom_calendar.view"
dimension_group: created {
type: custom_calendar
sql: ${TABLE}.created_at ;;
custom_timeframes: [custom_year, custom_quarter]
based_on_calendar: retail_custom_calendar
}
请注意此自定义日历维度组中的以下元素:
type: custom_calendar- 维度组定义为自定义日历类型。sql: ${TABLE}.created_at ;;- 维度组使用数据库orders.created_at列中的日期时间信息。custom_timeframes: [custom_year, custom_quarter]- 维度组将标记为创建的自定义日历,并将包含标记为财政年度和财政季度的时间段。如需了解详情,请参阅自定义日历维度组的标签。based_on_calendar: retail_custom_calendar- 维度组会将 LookML 项目的retail_custom_calendar视图中定义的自定义日历中的数据与相应数据库的orders.created_at列中的数据联接起来,以使用自定义日历提供查询结果。如需了解如何定义自定义日历,请参阅在 Looker 中使用自定义日历文档页面。
custom_timeframes
对于定义为 type: custom_calendar 的维度组,如果您不想在维度组中包含所有可能的自定义时间范围,可以使用 custom_timeframes 参数指定要在维度组中包含哪些时间范围。支持以下自定义时间范围:
| 时间范围 | 说明 | 假设(针对 _num 类型) |
|---|---|---|
|
日历视图中的特定日期。 | |
|
日历视图中的数字日期。 | 假设最长为 371 天 |
|
日历中的一般周期(例如 4-4-5 日历)。 | |
|
自定义时段的数值。 | 假设每年有 12 个周期。 |
|
日历视图中的季度。 | |
|
一年中的季度(以数字表示)。 | 假设每年有 4 个季度。 |
|
自定义季节性时段。 | |
|
自定义季的数值。 | 假设每年有 2 个赛季。 |
|
日历视图中的周。 | |
|
一年中的周序号(数字)。 | 假设每年最多有 53 周。 |
|
日历视图中的年份。 | |
|
自定义年份的数值。 |
based_on_calendar
对于定义为 type: custom_calendar 的维度组,based_on_calendar 参数用于指定您在 LookML 中建模的自定义日历的视图名称。
自定义日历维度组的标签
Looker 会根据 type: custom_calendar 维度组中是否使用了 label 或 group_label 参数,在“探索”字段选择器中生成维度字段标签和组标签:
- 默认(未指定
label和group_label):- Looker 会将维度组时间范围归入默认维度组标签下,该标签是维度组名称与自定义日历的串联(例如,创建的自定义日历)。
- Looker 会在每个时间范围名称前添加财政字样(例如财政日期、财政周、财政年)。
- 仅限
group_label:- Looker 会将维度组时间范围归入指定的
group_label值下。 - Looker 会在每个时间范围名称前面添加维度组的名称和 Fiscal(例如,Created Fiscal Date、Created Fiscal Week、Created Fiscal Year)。
- Looker 会将维度组时间范围归入指定的
- 仅限
label:- Looker 会将维度组时间范围分组到附加了自定义日历的
label值下(例如,对于使用label: "My Label"定义的维度组,时间范围将分组到我的标签自定义日历下)。 - Looker 会在每个时间范围名称前添加财政字样(例如财政日期、财政周、财政年)。
- Looker 会将维度组时间范围分组到附加了自定义日历的
- 同时指定了
group_label和label:- Looker 会将维度组时间范围归入指定的
group_label值下。 - Looker 会将
label值添加到每个时段的前面(例如,对于使用label: "My Label"定义的维度组,时段将命名为 我的标签日期、我的标签周、我的标签年)。
- Looker 会将维度组时间范围归入指定的
本地化维度组
您可以使用模型本地化功能来自定义和翻译由维度组生成的时间段、间隔或自定义时间段的名称。如需了解相关信息,请参阅本地化维度组。
注意事项
必须通过维度组中的各个维度来引用维度组
由于维度组表示一组维度,而不仅仅是一个维度,因此您无法在 LookML 中直接引用它。您需要改为引用它创建的维度。
例如,假设存在以下维度组:
dimension_group: created {
type: time
timeframes: [date, week, month]
sql: ${TABLE}.created_at ;;
}
如需在其他 LookML 字段中引用这些维度之一,请使用引用 ${created_date}、${created_week} 或 ${created_month}。如果您尝试仅使用 ${created},Looker 将不知道您指的是哪个时间范围,并会因此而报错。
出于同样的原因,如果您指定了多个 timeframe,则不应在维度组中使用 primary_key 参数。
聊天团队提示:我们经常收到有关验证错误的咨询,如果您在具有多个
timeframe的dimension_group上使用primary_key,则可能会出现此错误。如需了解详情,请参阅 Looker 中的时间范围和维度组 社区帖子。
包含时区信息的时间戳数据
某些数据库方言具有包含时区信息的时间戳选项。这样一来,您就可以将时间戳数据存储在可能包含多个时区的单个字段中。一行数据可能以世界协调时间 (UTC) 存储,另一行数据可能以美国东部时间存储。例如,如需了解 Snowflake 方言时间戳选项,请参阅 Snowflake TIMESTAMP_LTZ, TIMESTAMP_NTZ, TIMESTAMP_TZ 时间戳文档。
在这种情况下,当 Looker 执行时区转换时,可能会发生错误。为避免这种情况,您应在维度的 sql 参数中将时间戳数据明确转换为不进行时区转换的时间戳类型。例如,在 Snowflake 方言中,您可以使用 TO_TIMESTAMP 函数来转换时间戳数据。
可以创建单个时间或时长维度
您可以为要纳入的每个时间段或时长分别创建一个维度,而不是在单个 dimension_group 中生成所有这些维度。除非您想更改 Looker 的时间段命名惯例,或者您的数据库中已有预先计算的时间列,否则一般情况下可以避免创建单独的维度。如需了解详情,请参阅维度、过滤条件和参数类型文档页面。
您可以更改每周的第一天
默认情况下,Looker 中的周从星期一开始。您可以在模型级别使用 week_start_day 参数更改此设置。
请注意,week_start_day 不适用于 week_of_year 时段,因为该时段基于 ISO 标准,而 ISO 标准使用从周一开始的周。
自定义过滤条件和自定义字段不支持所有时间范围
时间范围 day_of_week、fiscal_quarter_of_year、millisecond、millisecondX、microsecond、month_name、quarter_of_year 和 time_of_day 不支持用于自定义过滤条件或自定义字段。
月份、季度和年份区间仅统计完整周期
在 duration 维度组中,month 区间只有在结束日期大于或等于开始日期时,才会将一个月视为已过。
例如:
- 同年 9 月 26 日与 10 月 25 日之间的月份差为 0。
- 同年 9 月 26 日和 10 月 26 日之间的月份差为 1。
quarter 和 year 区间遵循相同的逻辑。