Introducción
En numerosas ocasiones, la primera pregunta que nos hace un usuario de un informe en Power BI es ¿están los datos actualizados? En un Panel del Servicio podemos configurar en cualquiera de las visualizaciones ancladas en el mismo, la capacidad de mostrar la hora de última actualización de los datos subyacentes. Pero, ¿qué opciones tenemos si queremos que el usuario tenga disponible directamente en el informe dicha hora de última actualización como una visualización más?
Fecha de modificación del origen de datos
En primer lugar, es importante distinguir entre la fecha de actualización del informe de Power BI y la fecha de actualización de los orígenes de datos utilizados en dicho informe.
Si nos centramos en la actualización del informe, ya sea en Power BI Desktop o en el Servicio, hay que tener en cuenta que estamos identificando el momento en el que se ejecutó la actualización manual o programada de las tablas que componen nuestro modelo de datos, pero no la «edad» de la fuente original. Este registro de actualización del informe es en el que nos vamos a centrar en este artículo, sobre todo en cómo resolver la problemática de la diferencia horaria que puede surgir al visualizar el dato en Power BI Desktop o en el Servicio.
Si por el contrario lo que queremos es identificar la antigüedad del origen de datos, la mejor forma es incluir la fecha de actualización dentro del modelo. Si usamos un Data Warehouse podemos utilizar la fecha de carga que encontraremos en las tablas de registro que contienen dicha información, si realizamos una consulta normalmente podremos usar alguna función del tipo getdate()/now()
, y si nuestros orígenes son archivos .csv .xlsx etc… siempre podemos optar por utilizar el campo Date modified
de los atributos del archivo correspondiente.
Consulta en Power Query
Para generar la fecha de última actualización vamos a utilizar Power Query. En primer lugar, creamos una consulta en blanco con el siguiente código M:
let Source = #table(type table[LastRefresh=datetime], {{DateTime.LocalNow()}}) in Source
Y como podemos observar obtenemos una tabla de una columna y un solo registro con la fecha y hora actuales, que se irá modificando cada vez que actualicemos el modelo:

A continuación, creamos una medida en la que establecemos el formato deseado y la utilizamos para añadir una tarjeta a nuestro informe:
UltimaActualizacion =FORMAT (
LASTDATE ( LastRefresh_Local[LastRefresh] ),
«dd mmmm, yyyy hh:mm:ss AM/PM»
)

Ya tenemos nuestra tarjeta con la fecha y hora de última actualización, que se irá modificando cada vez que refresquemos nuestro informe en Power BI Desktop. Solo nos queda publicar el informe en el Servicio, programar la actualización y habremos terminado el trabajo. ¿No?
Pues vamos a ver que esto no es así y tenemos un problemilla al visualizar el informe en el Servicio de Power BI. Cuando se produzca la actualización del modelo publicado, nuestra tarjeta nos mostrará lo siguiente:

Upss, ¿cómo es posible que en el Servicio visualicemos una hora distinta a la que vemos en la misma visualización en Power BI Desktop?
La razón de que obtengamos una diferencia de 2 horas entre ambas plataformas es la consecuencia directa de dónde se está ejecutando nuestro código. La hora local en Power BI Desktop es nuestra hora local, que actualmente es UTC+2, ya que nos encontramos en el horario de verano, pero la hora local del servidor donde el informe ha sido actualizado en línea es la hora UTC (tiempo universal coordinado).
Para resolver esta situación disponemos de varias alternativas. Una de ellas corresponde al uso de una API desde la que obtener la hora correcta, pero si no queremos que nuestro modelo dependa de una Web externa, podemos utilizar directamente Power Query. En nuestro caso, basta con crear en el editor una columna adicional que añada dos horas a la columna LastRefresh
, quedando el código:
let
Source = #table(type table[LastRefresh=datetime], {{DateTime.LocalNow()}}),
#"Personalizada agregada" = Table.AddColumn(Source, "LastRefreshService", each Value.Add([LastRefresh],#duration(0,2,0,0)))
in
#"Personalizada agregada"
Ahora, crearíamos la medida con la nueva columna, con el objetivo de que nuestra visualización muestre al usuario la hora correcta en el Servicio de Power BI:
UltimaActualizacion =FORMAT (
LASTDATE ( LastRefresh_Local[LastRefreshService] ),
«dd mmmm, yyyy hh:mm:ss AM/PM»
)
Todo el código DAX de este artículo ha sido formateado con «DAX Formatter»
Deja un comentario