上次修改日期: 19 Dec 2019
环境
- Tableau Online
- Tableau Server
解决方案
若要调整视图中显示的日期和日期/时间字段的时区,请执行以下操作:
- 在 Tableau Desktop 中打开工作簿。
- 选择“分析”>“创建计算字段”。
- 对于日期/时间字段,创建类似于以下内容的计算:
DATEADD('hour',<number of hours>,[<datetime field>])
- 对于纯日期字段,创建类似于以下内容的计算:
IF DATEPART('hour', NOW()) > <PST time of midnight> then DATEADD('day', 1, <datetime field>) else <datetime field> end
- 例如:IF DATEPART('hour', NOW()) > 6 THEN DATEADD('day', 1, [Date]) else [Date] END 如果时间超过午夜 6 个小时,则此表达式会在名为“Date”(日期)的日期字段中再添加一天,否则日期保持不变。
- 有关日期函数 DATEPART 或 DATEADD 的详细信息,请参见 Tableau 帮助中的日期函数。
- 对于日期/时间字段,创建类似于以下内容的计算:
- 将视图中使用的日期/时间字段替换为新创建的计算字段。
- 重新发布工作簿或数据源。
若要使用筛选到数据集中最近一小时的计算来替换相对日期筛选器,请执行以下操作:
- 创建与以下类似的计算:
[DateTimeField] >= {FIXED: MAX(DATETRUNC('hour',[DateTimeField]))}
- 将计算放置在“筛选器”功能区上,进行选择以显示“True”
若要使用筛选到所需时区中的“此小时”的计算来替换相对日期筛选器,请执行以下操作:
- 创建与以下类似的计算。请注意,以下内容会从太平洋时间 (Tableau Online 10ay) 转换为东部时间(假设用户):
[DateTimeField] >= DATEADD('hour', 3, NOW())
- 将计算放置在“筛选器”功能区上,进行选择以显示“True”
原因
发布数据源或工作簿后,NOW()、TODAY()、相对日期筛选器和时间戳会被本地化为 Tableau Server 或 Tableau Online 的时区。其他信息
如果您所在的区域实行夏令时,则用于变换时间的时数可能会更改。以下计算将 UTC 转换为太平洋时间,同时假定夏令时从三月的第二个周日开始,在十一月的第一个周日结束:DATEADD('hour',
IF [<日期时间字段>] <= IFNULL(
{ FIXED DATETRUNC('year', [<日期时间字段>]) : MIN(
IF DATEPART('month', [<日期时间字段>]) = 3
THEN
DATEADD('minute', 119, DATEADD('day', IF DATEPART('weekday', DATETRUNC('month', [<日期时间字段>])) >1
THEN 7 - (DATEPART('weekday', DATETRUNC('month', [<日期时间字段>])) - 1)
ELSE 0
END
+ 7, DATETRUNC('month', [<日期时间字段>])
))
END
)}
, TODAY()+1)
OR [<日期时间字段>] >=
{ FIXED DATETRUNC('year', [<日期时间字段>]) : MIN(IF DATEPART('month', [<日期时间字段>]) = 11
THEN
DATEADD('minute', 119, DATEADD('day', IF DATEPART('weekday', DATETRUNC('month', [<日期时间字段>])) >1
THEN 7 - (DATEPART('weekday', DATETRUNC('month', [<日期时间字段>])) - 1)
ELSE 0
END, DATETRUNC('month', [<日期时间字段>])
))
END
)}
THEN -8
ELSE -7
END,
[<日期时间字段>])
讨论本文... 反馈论坛
IF [<日期时间字段>] <= IFNULL(
{ FIXED DATETRUNC('year', [<日期时间字段>]) : MIN(
IF DATEPART('month', [<日期时间字段>]) = 3
THEN
DATEADD('minute', 119, DATEADD('day', IF DATEPART('weekday', DATETRUNC('month', [<日期时间字段>])) >1
THEN 7 - (DATEPART('weekday', DATETRUNC('month', [<日期时间字段>])) - 1)
ELSE 0
END
+ 7, DATETRUNC('month', [<日期时间字段>])
))
END
)}
, TODAY()+1)
OR [<日期时间字段>] >=
{ FIXED DATETRUNC('year', [<日期时间字段>]) : MIN(IF DATEPART('month', [<日期时间字段>]) = 11
THEN
DATEADD('minute', 119, DATEADD('day', IF DATEPART('weekday', DATETRUNC('month', [<日期时间字段>])) >1
THEN 7 - (DATEPART('weekday', DATETRUNC('month', [<日期时间字段>])) - 1)
ELSE 0
END, DATETRUNC('month', [<日期时间字段>])
))
END
)}
THEN -8
ELSE -7
END,
[<日期时间字段>])
讨论本文... 反馈论坛
感谢您提供该文章是否有效的反馈。
打开新案例
继续搜索
知识库
社区
产品帮助
培训和教程