Miguel Escobar Publicada octubre 21, 2019

Manejo de zonas horarias en Power BI / Power Query

Power BIPower Query

¿Qué hora es en este momento para ti? Podríamos compartir la misma zona horaria, pero ese no suele ser el caso con las operaciones mundiales.

Si dijera, nos vemos mañana a las 8am. ¿Serán tus 8am? ¿O serán mis 8am?

Siento que debí haber publicado este blog hace mucho tiempo, pero es mejor tarde que nunca.

En Power BI, puedes tener columnas de fecha o fecha+hora una vez que se cargan en su Modelo de datos, pero antes de cargarlos (dentro de Power Query Editor) puedes tenerlos como zona horaria de fecha, que es un tipo de dato específico que solo contiene información de fecha y hora, pero también la zona horaria.

Hagamos un escenario rápido. Ken está en Canadá, Miguel está en Panamá; definamos un conjunto de citas específicas para ambas zonas horarias.

Tipo de datos de fecha y hora en Power BI / Power Query

Tengo estas fechas que Ken envió de manera específica para un conjunto de órdenes que entraron en nuestro sistema. Estoy tratando de alinear todas mis fechas en mi modelo para estar en mi zona horaria actual en Panamá, pero Ken me envió estas en su propia zona horaria:

¿Cómo transformo estos valores de datetimezone en mi zona horaria local?

La forma más fácil de transformar a la zona horaria local en Power BI / Power Query

La forma más fácil de lograr esto es ir a la pestaña Transform o a la pestaña Add Column e ir a Date & Time Group.

Una vez en este grupo, selecciona la opción para hora y verás en el menú desplegable una opción llamada local time.

Y el resultado de esa operación producirá algo como esto.

(ten en cuenta que utilicé la opción de la pestaña Add Column)

Notarás un aspecto importante sobre este enfoque desde la barra de fórmulas y es que usa la función DateTimeZone.ToLocal que solo requiere un valor con el tipo de datos datetimezone.

La advertencia aquí es que usa la hora local de la configuración regional de mi máquina, lo que significa que si tuviera que usar una máquina que utilizara diferentes configuraciones regionales, no daría el resultado correcto.

Esto plantea la pregunta; ¿Cómo le digo explícitamente a Power Query que siempre convierta el valor a una zona horaria específica?

Forma recomendada para convertir zonas horarias en Power BI / Power Query

Esto requiere que uses una función específica, pero es una función bastante simple llamada DateTimeZone.SwitchZone que, en comparación con DateTimeZone.ToLocal, solo agrega un segundo argumento donde puedes ingresar (como un número) la zona horaria correcta a la que deseas «cambiar» su valor original de zona horaria.

El resultado de esto se verá así:

Sugerencia general

Al crear un modelo de datos con Power BI, se recomienda que tus fechas estén en la misma zona horaria, de modo que no tengas que lidiar con múltiples líneas de tiempo que podrían resultar complicadas y al final no producirán los resultados intuitivos.

La mejor manera de lograr esto es hacer una evaluación completa de tus fuentes de datos y asegurarte de que todas tengan la misma zona horaria. Si este no es el caso y no puedes cambiarlos para que se encuentren en la misma zona horaria, entonces puedes «cambiar» la zona horaria una vez que llegues a la ventana de Power Query.

Una cosa SÚPER importante a tener en cuenta es que si planeas publicar esta consulta en el Servicio Power BI, el inquilino real podría estar en una zona horaria diferente a la que tu estás, por lo que se recomienda que utilices DateTimeZone.SwitchZone.

Una vez que tus datos lleguen al modelo de datos de Power BI, los datos de la zona horaria se eliminan por completo y lo que veras en la vista de datos es solo una fecha o una fecha y hora:

Por lo tanto, es extremadamente importante que te asegure de que todo funcione correctamente en Power Query, ya que esa es la única forma de saber si la zona horaria es correcta o no.

¿Qué sucede si mis datos no están configurados como datetimezone?

Este suele ser el caso con fuentes de datos simples. Estas fuentes de datos simples no proporcionan más información además de los datos como fecha o fecha+hora. ¿Qué puedes hacer en estos casos?

Lo primero que debes hacer es asegurarte de que estás tratando con al menos un tipo de datos de fecha y hora. Una vez que tengas tus valores como fecha y hora, puedes crear una nueva columna con la siguiente fórmula:

La fórmula que hace la magia es DateTime.AddZone que agrega una zona horaria a tu valor de fecha y hora. Pasa tu fecha y hora como tu primer argumento y establece la zona horaria como tu segundo argumento.

Una vez que establezcas tu valor como un tipo de datos datezonezone, puedes continuar y «cambiar» la zona horaria a cualquier otra zona horaria utilizando los métodos descritos anteriormente en este artículo

Conclusión

Tener la fecha y hora correctas es EXTREMADAMENTE importante.

¡Déjame saber lo que piensas acerca de estos métodos! ¿Tienes algún escenario que esté estrechamente relacionado con las zonas horarias pero que no esté cubierto en esta publicación? Déjamelo saber abajo en los comentarios.

Power BIPower Query
Subscribe
Notify of
guest
8 Comentario
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Wilmer

Excelente información, muchas gracias por compartirla.

eduardo

gracias por la ayuda no encontré esta información por ningún lado me ayudaron mucho.

barbara

hola a mi me ha surgido el problema con la hora de la fecha de actualización, aun utilizando DateTimeZone.SwitchZone. Al publicar el reporte en el servicio de power bi y actualizar en el mismo o utilizar la actualización programada, la fecha de actualización es 3 horas mas a lo que me muestra el mismo reporte local, en servicio de power bi sale las 3:00pm y en el reporte local aparece las 12:00 pm. He utilizado el DateTimeZone.SwitchZone, con la zona horaria de mi pais pero aun así la hora sale incorrecta en la nube ..

HECTOR YEZID BERMUDEZ RAMOS

Muchas gracias por todo el contenido publicado. Te quería pedir un favor, tengo un archivo en formato csv, el cual tiene un campo de fecha hora, requiero restarle 8 horas, para que quede con la fecha de mi País, el inconveniente que tengo es que lo máximo que me permite restar es por dias pero no por horas, estoy utilizando lo siguiente:

Fecha_actual = DATEADD(EURGBP[FECHA], -1,DAY)

Me puedes hacer el favor, de informarme como puedo restar horas, por ejemplo
si tengo la siguiente fecha 17/05/2021 1:35 y le resto 8 horas la nueva columna quedaría 16/05/2021 17:35

Agradezco tu valiosa información, de igual forma solicito información de cursos a mi correo personal.

Muchas gracias

YEZID

Juan Pablo Alvarez

Hola Miguel,

Como podría obtener la fecha y hora correcta de actualización en un dataflow, ya que cada vez que se actualiza toma los datos del servicio de PBI y no la transforma a la zona horaria de Colombia.