Anónimo
Estoy extrayendo una serie de columnas de fecha y hora de varias fuentes, que en su mayoría están en UTC. Estoy usando ToLocal para mostrarlos en EST, que es mi hora local, y es cómo mis usuarios finales necesitan ver los datos.
Sin embargo, esto no funciona en el informe después de publicarlo en el servicio PowerBI, que parece usar UTC como su hora local.
Si mi fuente de datos dice 18:00 UTC, ToLocal no tiene ningún efecto en los datos; todavía se muestra como 18:00 en el servicio PowerBI.
Una solución simple sería simplemente restar X horas de mis horas UTC en PowerQuery. Los datos «se verían» como EST en PowerBI Desktop y «se verían» como EST en el servicio PowerBI (aunque PowerBI cree que es una hora UTC).
Sin embargo, esto no tiene en cuenta el horario de verano en absoluto, lo cual no es trivial, porque el horario de verano comienza y termina en un día diferente cada año.
Así que me gustaría una función M que pueda…
-> Leer en un DateTime que está en UTC
-> Compruebe si ese DateTime cae en el horario de verano
–> En caso afirmativo, reste 5 horas
–> Si no, restar 4 horas
¿¿Algunas ideas?? ¡Seguro que esto se ha solucionado en alguna parte!
Anónimo
En respuesta a v-yingjl
Claro, aquí está la función personalizada que escribí, con la ayuda de los carteles de arriba. Muy fácil de adaptar a cualquier zona horaria. Incluso podría tomar la zona horaria como parámetro, pero solo necesito EST. Se implementa simplemente agregando una columna personalizada en PowerQuery con la función =UTCtoEST([DateColumn])
Gracias de nuevo a todos por la ayuda.
let
UTCtoEST = (UTC_DateTime) =>
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("Rc5BCsAgDETRu7gWdCZttWeR3P8amk6gux8eCVmrWAMbO0apBWi32usniGlKLnVKj+mVmFoyz8AugDpX4gAhGeqUOEBKHnVKvEb7XzvtvgE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [dtDSTStart = _t, dtDSTEnd = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"dtDSTStart", type date}, {"dtDSTEnd", type date}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each (DateTime.Date(UTC_DateTime) >= [dtDSTStart] and DateTime.Date(UTC_DateTime) <= [dtDSTEnd])),
result = DateTimeZone.RemoveZone(DateTimeZone.SwitchZone(DateTime.AddZone(UTC_DateTime,0),-5 + Table.RowCount(#"Filtered Rows")))
in
result
in
UTCtoEST
v-yingjl
Hola @Anónimo,
Si ha solucionado el problema por su cuenta, comparta amablemente su solución. Si las publicaciones anteriores ayudan, por favor márquelo como una solución para ayudar a otros a encontrarlo más rápidamente. ¡Gracias!
Atentamente,
Ying Jie Li
Anónimo
En respuesta a v-yingjl
Claro, aquí está la función personalizada que escribí, con la ayuda de los carteles de arriba. Muy fácil de adaptar a cualquier zona horaria. Incluso podría tomar la zona horaria como parámetro, pero solo necesito EST. Se implementa simplemente agregando una columna personalizada en PowerQuery con la función =UTCtoEST([DateColumn])
Gracias de nuevo a todos por la ayuda.
let
UTCtoEST = (UTC_DateTime) =>
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("Rc5BCsAgDETRu7gWdCZttWeR3P8amk6gux8eCVmrWAMbO0apBWi32usniGlKLnVKj+mVmFoyz8AugDpX4gAhGeqUOEBKHnVKvEb7XzvtvgE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [dtDSTStart = _t, dtDSTEnd = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"dtDSTStart", type date}, {"dtDSTEnd", type date}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each (DateTime.Date(UTC_DateTime) >= [dtDSTStart] and DateTime.Date(UTC_DateTime) <= [dtDSTEnd])),
result = DateTimeZone.RemoveZone(DateTimeZone.SwitchZone(DateTime.AddZone(UTC_DateTime,0),-5 + Table.RowCount(#"Filtered Rows")))
in
result
in
UTCtoEST
v-yingjl
Hola @Anónimo,
Parece que ha creado el mismo problema, puede consultar este enlace respondido por @ edhans:
https://community.powerbi.com/t5/Desktop/Custom-Query-Function-to-convert-UTC-to-EST/mp/1106780
Atentamente,
Ying Jie Li
Si esta publicación ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
edhans
Respondí a esta publicación duplicada en este hilo.