Filtro de fecha dinámico

En el post de hoy voy a resolver una duda que me plantearon recientemente en una formación.

El reto era conseguir que, en un filtro de fecha, al abrir el informe salga seleccionada por defecto siempre la última fecha de un campo de una tabla, pudiendo el usuario modificar la fecha en el filtro si así lo necesita.

La técnica que vamos a utilizar se la vi por primera vez al maestro Francisco Mullor en una duda que resolvió en el grupo de Telegram de Power BI Español, y me vino de perlas para resolver este reto. Gracias, Fran 😉

Vamos a simular que estamos ante un informe de ventas y queremos que nos aparezca filtrada por defecto la fecha de la última venta.

Para ello, partimos de una sencilla tabla de hechos en la que tenemos una columna con la fecha de la venta, y otra con el importe:

Por otro lado, vamos a tener una dimensión calendario simple, en la que tendremos únicamente creada una lista de fechas desde el 01/01/2023 al 31/12/2024 y añadiremos las columnas Año, Mes y Día:

Lo que haremos a continuación, será crear una consulta nueva en la que registrar el valor de la fecha máxima en la que ha habido ventas.

Para ello, vamos en Power Query a Nuevo Origen => Consulta en blanco , y pegamos en la barra de fórmulas la siguiente instrucción:

= List.Max(factVentas[Fecha Venta])

Nos devuelve el valor buscado, que en nuestro ejemplo sería el 10/11/2024:

Llamamos a esta consulta “FechaMax”.

El siguiente paso va a ser crear en nuestra tabla calendario una nueva columna personalizada en la que vamos a indicar que si la columna “Fecha” de nuestra tabla calendario es igual a la fecha calculada en la consulta “FechaMax”, indique el texto “Fecha Máxima” y, de lo contrario, nos indique el valor del campo “Fecha”.

El código M quedaría así:

= Table.AddColumn(DíaInsertado, “FechaFiltro“, each if [Fecha] = FechaMax then “Fecha Máxima“ else [Fecha])

Como puede observarse, la nueva columna a la que hemos llamado “FechaFiltro” nos muestra el valor “Fecha Máxima” para el día 10/11/2024, que es el valor de la última fecha en la que hay ventas, y para el resto de días nos refleja el valor de la fecha.

A esta columna le daremos tipo de dato texto.

A continuación, vamos a crear una nueva columna personalizada en nuestra dimensión calendario que tendrá el objetivo de poder ordenar la columna de tipo texto del paso anterior.

Para ello, generaremos el siguiente código M:

= Table.AddColumn(#“Tipo cambiado“, “idFecha“, each [Año]*10000+[Mes]*100+[Día])

A este nuevo campo le damos formato número entero.

Ya habríamos hecho todos los preparativos en Power Query y podríamos darle a “Cerrar y aplicar” para pasar a Power BI.

El siguiente paso va a ser ordenar la columna “FechaFiltro” por la columna “idFecha” para que la ordenación del campo que es texto sea por el orden natural del calendario:

Por último, generaremos una medida que nos calcule las ventas (un simple SUM de la columna Importe de la tabla de hechos): 

Ventas = SUM(factVentas[Importe])

A continuación, creamos dos visuales en nuestro lienzo:

1.- Una tabla con el campo “Fecha” de la dimensión calendario y la medida Ventas que acabamos de crear.

2.- Un filtro con el campo “FechaFiltro” de nuestra dimensión calendario (el que es de tipo texto).

Si en el segmentador de FechaFiltro vamos a buscar la fecha de la venta máxima (10/11/2024) vemos que nos aparece el texto “Fecha Máxima”:

Y si lo seleccionamos, vemos como nos filtra correctamente la fecha del 10/11/2024 en el visual de tabla:

Lo bueno de esto es que, en futuras actualizaciones, el filtro de “Fecha Máxima” se irá moviendo en función de la última venta que haya en nuestra tabla de hechos, y nos aparecerá filtrada por defecto esa nueva fecha.

Otro requisito habitual es tener filtrado por defecto el día actual (el día de hoy en modo dinámico). 

Para ello, la técnica es la misma, solo que en el paso donde creábamos la consulta “FechaMax” para quedarnos con el valor de la fecha máxima en la que había habido venta, ahora buscaríamos conseguir el valor de la fecha de “hoy” de forma dinámica, lo que conseguiríamos con el siguiente código M en la barra de fórmulas de la consulta:

= Date.From(DateTime.LocalNow())

El 17/12/2024 es la fecha en la que se preparó el material de este post.

El resto de pasos serían idénticos a lo ya explicado anteriormente.

Cada vez que se actualizase el informe, se recalcularía la fecha actual y se modificaría el filtro seleccionado.

Te dejo en el siguiente enlace de descarga el pbix para que puedas revisar el paso a paso:

Espero que te haya resultado útil y puedas rescatarlo si se te plantea este requisito en el futuro!!!

Si te ha gustado, compártelo!!! 👇 No te guardes el secreto 😜