當(dāng)使用Power BI處理時間戳的時候,會遇到各種各樣的坑。
本文先討論兩種常見情況。如果有其他特殊場景,歡迎留言。
劃重點:
-
duration()
1. unix timestamp
Unix時間戳,是從1970年1月1日(UTC/GMT的午夜)開始所經(jīng)過的秒數(shù),不考慮閏秒。
常見的會是長成:1551684928 這樣的連續(xù)數(shù)字。
可以通過增加一列custom column將其轉(zhuǎn)變?yōu)镈atetime:
= #datetime(1970, 1, 1, 0, 0, 0) + #duration(0, 0, 0, [UnixTime_ColumnName]/1000)
2. 帶tz的時間戳
以中國時區(qū)為例
例如:2019-03-013T09:25:41.4327813+08:00
Power BI能夠忽略時區(qū)部分,自動Parse"2019-03-013T09:25:41.4327813+00:00"這樣的時間戳,但如果時區(qū)不為零,則會報錯:
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屬性"
2. 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的一致性,也可以使用這一方法。