当使用Power BI处理时间戳的时候,会遇到各种各样的坑。
本文先讨论两种常见情况。如果有其他特殊场景,欢迎留言。
划重点:
-
duration()
1. unix timestamp
Unix时间戳,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
常见的会是长成:1551684928 这样的连续数字。
可以通过增加一列custom column将其转变为Datetime:
= #datetime(1970, 1, 1, 0, 0, 0) + #duration(0, 0, 0, [UnixTime_ColumnName]/1000)
2. 带tz的时间戳
以中国时区为例
例如:2019-03-013T09:25:41.4327813+08:00
Power BI能够忽略时区部分,自动Parse"2019-03-013T09:25:41.4327813+00:00"这样的时间戳,但如果时区不为零,则会报错:
DataFormat.Error: We couldn't parse the input provided as a DateTime value.
Details:
2019-03-013T09:25:41.4327813+08:00
这时,我们可以通过简单的两步,解决问题:
1. split column by Delimiter
将时间戳 column 以 Operator : "+" 分为两列:
Timestamp.1 | Timestamp.2 |
---|---|
2019-03-013T09:25:41.4327813 | 08:00 |
默认会分为属性是"Text"的两列, 需要将第一列变成"Date/Time属性"
image.png2. add custom column
= if [Timestamp.2] = "08:00" then [Timestamp.1]+#duration(0,8,0,0) else if [Timestamp.2] = "00:00" then [Timestamp.1] else [Timestamp.1]
这一方法还可以用来处理local time 和 UTC time之间的GAP。
目前,Power BI desktop中可以展示local timezone的时间,而publish到Power BI Service之后,则会变回UTC time。
为了保持Report的一致性,也可以使用这一方法。
网友评论