Как заставить службу Power BI использовать местный часовой пояс - PullRequest
0 голосов
/ 09 апреля 2020

Я сейчас экспортирую данные из Dynamics. Есть много полей даты, которые мне нужно экспортировать. По умолчанию все они часовые пояса UT C. Я хочу сообщить о часовом поясе Новой Зеландии. Я пытался использовать подходы в 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 Power и после нескольких обновлений (первоначально это было время NZ), поворот времени назад к UT C time.

Я не хочу создавать дополнительные столбцы в DAX и действительно хочу попробовать использовать Power Query. Есть ли способ решить это?

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Я столкнулся с той же проблемой некоторое время назад и предложил следующее решение.

Вы можете просто использовать комбинацию RemoveZone и Addzone функция запроса мощности для достижения этой цели. В приведенном ниже примере показано, как получить стандартное индийское время (IST = +5: 30)

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

Обратите внимание, что я использовал DateTimeZone.UtcNow(), чтобы всегда получать универсальный стандартный DateTime, а затем преобразовать его в индийское время. Вы можете использовать свои собственные значения часового пояса

Добавьте указанный выше код вместо DateTimeZone.ToLocal в своем коде.

Документация к DateTime.AddZone

0 голосов
/ 09 апреля 2020

Power BI:

Используйте эту функцию Power Query для преобразования времени из UT C в местное время, здесь его горное время, но вы можете установить на любое новозеландское время

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
...