Cómo filtrar por fechas, incluyendo o excluyendo fechas futuras, en modelos semánticos

Imaginemos que tenemos tres medidas:

Monto de ventas Monto de ventas Presupuesto Monto de ventas PY

Cuando miramos una tabla con estos números, vemos esto (suponiendo que tengamos datos actuales hasta finales de julio de 2025):

Figura 1 – Punto de partida. Tenga en cuenta que los datos del presupuesto y del año fiscal van más allá de los datos actuales, que existen solo hasta finales de julio de 2025 (Figura del autor).

Si bien los resultados son correctos, es posible que mis usuarios necesiten dos vistas diferentes:

Vea solo los resultados según los datos existentes, incluidos los datos del presupuesto y los datos del año fiscal.

Tengo varias formas de hacerlo:

Cree elementos visuales separados con diferentes filtros. Cree dos páginas para las dos vistas, nuevamente usando filtros diferentes. Dígales a mis usuarios que usen la segmentación de calendario para filtrar los datos según sea necesario.

Pero quiero diseñar mis informes lo más fáciles de usar posible sin duplicar nada.

Por lo tanto, quiero agregar un Slicer para que los usuarios puedan elegir si incluyen datos futuros o solo ven los datos actuales.

Crear la tabla de filtro de fecha

La tabla Mi fecha incluye columnas de índice para diferentes períodos: días, semanas, meses, trimestres y años.

La fila con el período actual contiene un 0. Las filas de períodos pasados ​​contienen números negativos. Las filas de períodos futuros contienen números positivos.

Veamos las filas de una pequeña muestra realizada en SQL usando la columna DayIndex:

Figura 2: Filas de muestra de la tabla Fecha (Figura del autor)

Usando esta columna, construí una tabla con una columna adicional para que sirviera como segmentación.

Tomé todas las filas con un índice hasta 0 y las marqué como “Solo datos actuales”.

Luego agregué (UNION) todas las filas de la tabla Fecha y las marqué como “Datos futuros incluidos”.

Figura 3 – Selección completa para la tabla Filtro de fechas (Figura del autor)

Yo lo hice con SQL, pero puedes hacerlo en Power Query o cualquier otro lenguaje de tu elección.

Ahora, importé esta tabla a Power BI.

Ampliar el modelo de datos

Después de agregar esta tabla a Power BI, creé una nueva relación entre la nueva tabla y la tabla Fecha:

Figura 4 – Creación de la Relación entre el nuevo Filtro de Fecha y la tabla de Fechas (Figura del Autor)

La Dirección del filtro cruzado se debe establecer en Ambos, ya que la columna DateKey en la tabla Filtro de fecha no es única:

Figura 5 – Relación con la dirección del filtro cruzado establecida en ambos (Figura del autor)

Por lo tanto, la dirección del filtro sería Fecha -> Solo filtro de fecha, lo que no funcionará.

Quiero filtrar la tabla Fecha por la tabla Filtro de fecha. Por lo tanto, debo establecer la dirección del filtro en “Ambos”.

Resultado

A continuación, agregué una segmentación al informe:

Figura 6: la nueva segmentación establece un mosaico para la columna DateFilter (figura del autor)

Después de toda la preparación, el Slicer permite seleccionar los datos según sea necesario:

Figura 7: No se muestran números futuros cuando se selecciona “Solo datos actuales” (Figura del autor)
Figura 8: Todos los datos se muestran cuando se selecciona “Datos futuros incluidos” (Figura del autor)

Los usuarios pueden usar esta segmentación para elegir qué datos quieren ver, independientemente de la selección en la segmentación de Calendario.

Seleccionar períodos completos

El ejemplo anterior es práctico cuando la selección debe ser a nivel de día.

Esto es útil especialmente cuando se comparan los datos actuales con el Presupuesto o el Año Año.

Imagínese el día 5 o 6 del mes. Tienes solo unos días de Ventas, pero lo comparas con el Presupuesto de todo el mes. Esto puede resultar engañoso.

Pero, ¿qué sucede cuando el filtro debe configurarse para períodos completos, como meses o años?

Aquí, una consulta modificada para configurar la columna DateFilter en función de años completos:

Figura 9: Consulta para establecer el año completo para la columna DateFilter (Figura del autor)

Ahora se muestra el año completo, cuando sólo deberían mostrarse los datos actuales:

Figura 10: se muestra el año completo cuando se utiliza la consulta modificada de arriba (Figura del autor)

Puede cambiar la tabla Filtro de fechas de la misma manera para filtrar por meses u otros períodos.

Esto se puede hacer muy fácilmente filtrando las filas de la tabla Fecha para la fecha actual.

Conclusión

Este enfoque es sencillo de implementar y fácil de utilizar para los consumidores de informes.

Evita escribir código DAX y se basa completamente en la información de la tabla Fecha.

El truco consiste en ampliar el modelo de datos para que admita los requisitos con el menor esfuerzo.

Si no tiene las columnas de índice como yo, puede utilizar un enfoque diferente para generar la tabla de filtro de fecha. Por ejemplo, utilice una función para obtener la fecha actual, como GETDATE() en T-SQL o Now() en otros lenguajes.

Las columnas de Índice me parecieron muy útiles, no sólo en este caso sino también en muchas otras situaciones donde el cliente requiere que filtre los datos por fechas relativas a la fecha actual.

Esto facilita la vida cuando la “fecha actual” no es hoy, sino que debe seguir una lógica específica (por ejemplo, el día de la semana anterior).

Bien, puede agregar filtros relativos al informe. En muchos casos son suficientes.

En otros casos, las columnas de Índice me dan más flexibilidad.

Referencias

Como en mis artículos anteriores, utilizo el conjunto de datos de muestra de Contoso. Puede descargar el conjunto de datos ContosoRetailDW de forma gratuita desde Microsoft aquí.

Los datos de Contoso se pueden utilizar libremente bajo la licencia MIT, como se describe en este documento. Cambié el conjunto de datos para cambiar los datos a fechas contemporáneas.