知识库

NOW() 和 TODAY() 函数返回意外时区中的日期时间


发布时间: 04 Mar 2013
上次修改日期: 23 Oct 2023

问题

如果在计算字段中使用 NOW() 或 TODAY() 函数,Tableau Desktop 将以不同的时区返回时间,或者,在使用相对日期筛选器时,基准日期将采用不同的时区。

环境

  • Tableau Desktop
  • PostgreSQL
  • Tableau Server 存储库(PostgreSQL 数据库)
  • Amazon Redshift
  • 承载于时区不同的计算机上的数据源的实时连接

解决方案

选项 1:

使用数据提取。有关详细信息,请参见提取数据


选项 2:

将计算与 DATEADD() 函数结合使用以考虑时区偏移。
示例 1:
  • 若要将 UTC 转换为 PST(太平洋标准时间),公式为:NOW()
  • 可能会变为:DATEADD('hour', -8, NOW())

注意:在夏令时期间,UTC 和 PDT 之间的时差将为 -7 小时。

示例 2:

为相对日期筛选器将 UTC 转换为 PST(太平洋标准时间):

  1. 从“筛选器”功能区中移除日期筛选器
  2. 选择“分析”>“创建计算字段”
  3. 在打开的“计算字段”对话框中,执行以下操作,然后单击“确定”
    • 命名此计算字段。在此示例中,计算字段名为“Last 3 Days Filter”(最后 3 天筛选器)
    • 在公式字段中,创建一个类似于如下的计算:

      [Date Field] >= DATEADD('day', -3, DATEADD( 'hour', -8, TODAY() ) )

  4. 将“[Last 3 Days Filter]”(最后 3 天筛选器)拖到“筛选器”功能区。
  5. 在“筛选器”对话框中,选中“True”并单击“确定”

 

原因

进行实时连接时,Tableau Desktop 将针对 NOW() 或 TODAY() 查询数据源。如果数据源承载于位于不同时区中的计算机上,则数据源可能会返回该时区中的时间。

Redshift 和 PostgreSQL 的实时连接旨在返回 UTC 时间,因为这些数据源处理日期时间和时区偏移的方式不一致。

 

其他信息

为了表达您对在将来的产品版本中包括此增强功能的支持,请为以下社区理念投下您的一票:时区转换支持

此文章是否已解决问题?