我当前正在从Dynamics导出数据。我需要导出很多日期字段。默认情况下,它们都是UTC时区。我想报告新西兰时区。我试图在Power Query中使用方法:
1) use DateTimeZone.ToLocal: =Table.TransformColumns(#"dataset", {{"**UTC Date**", **DateTimeZone.ToLocal**, type datetimezone}})
2) use a specific timezone ("en-NZ"): =Table.TransformColumnTypes(#"dataset", {{"UTC Date", type datetime}}, **"en-NZ"**)
两种方法在Power BI桌面报告中都可以正常工作,但是,一旦我发布到Power BI服务并经过几次刷新(最初是新西兰时间),时间就会回到UTC时间。
我不想在DAX中创建额外的列,并且真的想尝试使用Power Query。有什么办法解决吗?
答案 0 :(得分:2)
一段时间前,我遇到了同样的问题,并提出了以下解决方案。
您可以简单地结合使用 RemoveZone和Addzone 电源查询功能来实现此目的。以下示例显示了如何获取印度标准时间(IST = +5:30)
= DateTime.AddZone(DateTimeZone.RemoveZone(DateTimeZone.UtcNow()),5,30)
请注意,我使用DateTimeZone.UtcNow()
始终获得通用标准DateTime,然后将其转换为印度时间。您可以使用自己的时区值
在代码中的 DateTimeZone.ToLocal 处添加以上代码。
答案 1 :(得分:0)
Power BI:
使用此Power Query函数将时间从UTC转换为本地时间(此处是山地时间),但是您可以将其设置为“新西兰时间”。
let
ConvertDateColumnstoMountainTime = (sourcetable as table) as table =>
let
TargetColumnList = Table.ColumnsOfType(sourcetable, {type datetime, type nullable datetime, type datetimezone, type nullable datetimezone}),
AdjustTimeZones = Table.TransformColumns(sourcetable, List.Transform(TargetColumnList,
(name) => {name, (date) => if date <> null
then DateTime.From(DateTimeZone.RemoveZone(date) + #duration(0,CalculateUTCOffset(date,null),0,0))
else null})),
//Above returns type as text. Need it explicitly as Date.
AdjustColumnTypes = Table.TransformColumnTypes(AdjustTimeZones,List.Transform(TargetColumnList,
(name) => {name, type datetime}))
in AdjustColumnTypes
in ConvertDateColumnstoMountainTime