使用时区设置

Looker 可以将基于时间的数据转换为不同的时区,从而让用户更容易理解这些数据。用户可以查看查询结果,并使用转换为本地时区的基于时间的数据创建过滤条件。例如,纽约的用户在查看加利福尼亚州创建的数据时,无需手动减去 3 小时即可过滤或解读查询。

Looker 会在查询 Look、探索或信息中心时 生成 SQL,并在此过程中转换基于时间的数据。底层数据不会受到影响;相反,查询结果会使用 Looker 的时区设置进行转换。这也意味着,使用 SQL Runner 运行的查询不会转换基于时间的数据。

Looker 中的多项设置用于指定如何转换基于时间的数据:

系统时区

系统时区是运行 Looker 的服务器配置的时区。Looker 的内部数据库(用于存储 系统活动探索中提供的信息)会将基于时间的数据存储在系统时区中。

您无法通过 Looker 应用配置系统时区。对于 Looker 托管的实例,系统时区始终设置为 UTC。客户托管的实例可能位于不同的系统时区。更改系统时区并非易事,因此不建议这样做。

如果您需要在系统活动探索中调整时间戳,请使用 表计算 创建时间调整后的列。例如,如需将 UTC 转换为 EST,您可以创建一列,并使用表计算 add_hours(-5, ${time})

请注意,由于表计算是在返回查询结果后执行的,因此无法用于按特定时间组成部分(例如一天中的小时或一周中的天)对数据进行分组或透视。如需调整系统活动时间戳以用于需要按时间组成部分进行透视或分组的可视化图表,请改用自定义维度。自定义维度会在可视化图表之前进行处理,以便进行适当的分组。例如,如需将数据从 UTC 调整为 GMT-3,您首先需要使用 Looker 表达式 add_hours(-3, ${user_facts.last_ui_login_hour}) 为调整后的时间创建自定义维度。然后,您需要创建后续自定义维度,以根据该调整后的时间字段提取所需的星期几或小时。

数据库时区

当您向数据库添加连接时,您需要在连接设置 页面上设置数据库时区 的值。

此设置表示数据库所在的时区,通常为世界协调时间 (UTC)。如果将此值设置为数据库所在时区以外的任何时区,可能会导致意外结果。

用户自选时区

对于基于时间的数据转换,最重要的设置是用户自选时区 选项,该选项位于 Looker 的管理 部分中的常规设置 页面上。

您可以启用或停用用户自选时区

  • 启用后,系统会为每个 Looker 用户分配一个时区,该时区会指定其查询结果的显示方式。
  • 停用后,系统不会为用户的账号分配个人时区。相反,所有查询都使用查询时区 值运行。

启用用户自选时区后,用户可以在其账号页面上设置自己的时区,或者 Looker 管理员可以在用户页面上为用户分配时区。如果未为用户设置时区,其账号将默认使用 Looker 应用时区 设置。

每当用户创建查询时,系统都会在该用户的时区中创建该查询。因此,当查询返回基于时间的数据时,Looker 会将数据从数据库时区 转换为用户的时区。当用户在查询中使用与时间相关的过滤条件值时,Looker 会将过滤条件值转换为数据库时区

此外,当您启用此选项时,Looker 会在 探索Look中显示 时区下拉菜单。

此下拉菜单中的选项包括:

  • 每个图块的时区(仅限信息中心): 所有查询都以保存时所用的时区运行。
  • 查看者时区:所有查询都以用户当前的时区设置运行。
  • 每个单独时区的列表,用户可以根据需要手动选择。

所有查询都默认使用创建查询时所用的时区。换句话说,如果 Alice 使用时区“America/Los Angeles”创建查询并将其发送给 Bob,Bob 将看到时区为“America/Los Angeles”的查询,即使 Bob 的时区设置为“America/New York”也是如此。同样,向下钻取始终默认使用创建查询时所用的时区。

每当查看查询时,用户都可以使用下拉菜单替换时区,为该查询或该信息中心的一组查询选择查看者时区 或任何其他时区。

使用用户自选时区时需要考虑的事项

启用用户自选时区 后,不同时区的用户可能会看到不同的数据。

例如,构成时间段 last month 的确切小时数在不同时区之间会有所不同,因此,如果用户位于不同的时区,但都按 last month 进行过滤,则可能会看到不同的数据值。

应用时区

您可以在 Looker 的管理 部分中的常规设置 页面上配置应用时区 设置。

应用时区内容传送 的默认时区。用于内容传送的时区不会影响查询返回的基于时间的数据;它只会影响发送数据传送的时间。

如果您启用用户自选时区 选项,则应用时区 是未为其账号设置时区值的用户的默认时区。

查询时区

只有在停用用户自选时区 后,才会显示查询时区 选项。在这种情况下,您需要在连接设置 页面上向数据库添加连接时设置查询时区 值。

如果您停用用户自选时区 ,则所有基于时间的数据查询都将使用查询时区 ,并且 Looker 会将所有基于时间的数据从数据库时区 转换为查询时区

convert_tz LookML 参数

Looker 默认会进行时区转换。如需为单个字段停用时区转换,您可以使用 convert_tz LookML 参数。例如:

dimension_group: created {
  type: time
  timeframes: [time, date]
  convert_tz: no
}

如需了解详情,请参阅 convert_tz 参数文档页面。

sql LookML 参数

您还可以在 LookML 维度中的 sql 参数内使用数据库方言的函数手动定义时区转换。例如,如需在 MySQL 中手动定义时区转换,您可以使用以下 LookML:

dimension_group: created {
 type: time
 timeframes: [time, date]
 sql: CONVERT_TZ(${TABLE}.created_at,'UTC','PST') ;;
}

MySQL 方言备注

MySQL 需要一个时区表,然后其时区转换函数才能正常运行。这可以由管理员运行。如需了解详情,请参阅 MySQL 文档

Postgres 方言备注

Looker 使用驱动程序设置来选择目标时区。这可能会影响 SQL Runner 中查询的处理方式(与 pgAdmin 相比),因为 Looker 将使用所选时区中的当前日期时间。

数据库方言对时区转换的支持

如需让 Looker 在 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