如何强制Power BI服务使用本地时区

时间:2020-04-09 00:09:30

标签: powerbi microsoft-dynamics powerquery powerbi-desktop

我当前正在从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。有什么办法解决吗?

2 个答案:

答案 0 :(得分:2)

一段时间前,我遇到了同样的问题,并提出了以下解决方案。

您可以简单地结合使用 RemoveZone和Addzone 电源查询功能来实现此目的。以下示例显示了如何获取印度标准时间(IST = +5:30)

= DateTime.AddZone(DateTimeZone.RemoveZone(DateTimeZone.UtcNow()),5,30)

请注意,我使用DateTimeZone.UtcNow()始终获得通用标准DateTime,然后将其转换为印度时间。您可以使用自己的时区值

在代码中的 DateTimeZone.ToLocal 处添加以上代码。

文档到DateTime.AddZone

答案 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