使用时区设置

Looker 可将基于时间的数据转换为不同的时区,从而使其更易于理解。用户可以查看查询结果,并使用基于时间的数据创建过滤器,并将时间转换为本地时区。例如,位于纽约的用户查看在加利福尼亚州创建的数据时,不必手动减去三个小时即可过滤或解读他们的查询。

如果在查询、探索或信息中心查询期间生成 SQL,Looker 会转换基于时间的数据。基础数据不受影响,而是使用 Looker 的时区设置转换查询结果。这也意味着,使用 SQL Runner 运行的查询不会转换基于时间的数据。

Looker 中的一些设置指定了如何转换基于时间的数据:

系统时区

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

系统时区无法通过 Looker 应用进行配置。对于 Looker 托管的实例,系统时区始终设置为 UTC。客户托管的实例可能处于不同的系统时区。更改系统时区并非易事,不建议这样做。如果您需要调整 i__looker 或系统 Activity 探索中的时间戳,Looker 建议使用表计算来创建时间调整列。例如,要从世界协调时间 (UTC) 转换为 EST,您可以使用表格计算 add_hours(-5, ${time}) 创建列。

数据库时区

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

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

用户自选时区

基于时间的数据转换最重要的设置是在用户专属时区选项(位于 Looker 管理部分的常规设置页面中):

您可以启用或停用特定于用户的时区

  • 启用后,系统会向每个 Looker 用户分配一个时区,并且该时区会指定查询结果的外观。
  • 停用此选项后,系统不会为用户分配单独的时区。而是会使用查询时区值运行所有查询。

启用用户专用时区后,用户可以在自己的帐号页面中设置时区,而 Looker 管理员可以在用户页面上为用户分配时区。如果没有为用户设置时区,则其帐号会默认使用 Looker 应用时区设置。

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

此外,启用此选项后,Looker 会在探索旧版信息中心外观中显示下拉菜单:

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

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

所有查询均默认采用创建查询时所用的时区。换句话说,如果 Alice 创建了一个时区为“美国/洛杉矶”的查询,并将其发送给小鲍,即使小华的时区设置为“美国/纽约”,他也将看到时区为“美国/洛杉矶”的查询。同样,展开细目默认设置为使用查询创建的时区。

每次查看查询时,用户可使用下拉菜单覆盖时区,从而为相应查询或该信息中心的一组查询选择自己的查看者时区或其他任何时区。

针对特定用户时区的注意事项

您启用用户专用时区后,系统会根据过滤器为每个时区应用的方式,在不同时区的用户看到不同的数据。例如,以下查询的过滤条件是 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 使用驱动程序设置来选择目标时区。与 pgAdmin 相比,这可能会影响 SQL Runner 中查询的处理方式,因为 Looker 将使用所选时区中的当前日期时间。

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

为了让 Looker 转换 Looker 项目中的时区,您的数据库方言必须支持时区转换。下表显示了最新版 Looker 中支持时区转换的方言: