Advance your Data & AI career with 50 days of live learning, dataviz contests, hands-on challenges, study groups & certifications and more!
Get registeredGet Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Request now
Tengo datos de hecho para varias fechas, he hecho una tabla de calendario usando calendar() y max y min, y vinculo esta tabla de calendario a la tabla de hechos, a partir de esta tabla de calendario he hecho 2 slicer mes y fecha
Mi requerimiento:
1. Cuando selecciono una fecha de mi 2 cortadoras, es decir. Desde el mes selecciono septiembre y desde la segmentación de fecha selecciono 23, quiero un DAX que muestre la fecha anterior disponible en la tarjeta, es decir, el 18 de septiembre, ya que no hay datos para el 19-22 de septiembre, ¿es esto posible?
Solved! Go to Solution.
Tuve un caso similar en mi tabla de datos de ventas donde los datos no estaban disponibles para todas las fechas del calendario. Por ejemplo, mi calendario mostraba del 19 al 22 de septiembre, pero las ventas solo fueron el 18 y el 23.
Lo que hice fue crear una medida para elegir la última fecha disponible antes de la fecha seleccionada. Aquí hay un patrón DAX que funcionó para mí:
PrevAvailableDate =
CALCULATE (
MAX ( FactTable[Date] ),
FILTER (
ALL ( FactTable ),
FactTable[Date] < MAX ( 'Calendar'[Date] )
)
)
MAX('Calendar'[Date]) → elige la fecha seleccionada de la segmentación (como 23-Sep).
El FILTRO vuelve a la tabla de hechos y encuentra la fecha más grande que es menor que la fecha seleccionada (en su caso, 18-Sep).
Ejemplo de mi modelo:
Calendario seleccionado = 23-Sep
Fechas de la tabla de datos = 15, 18, 23 de septiembre
Resultado de la medición = 18-Sep ✅
Simplemente coloque esta medida en un objeto visual de tarjeta y siempre mostrará la última fecha disponible antes de la fecha de segmentación.
Pequeño consejo: si también desea mostrar el valor real de esa fecha (como Ventas), simplemente reemplace MAX(FactTable[Date]) con su medida dentro del mismo patrón.
Tuve un caso similar en mi tabla de datos de ventas donde los datos no estaban disponibles para todas las fechas del calendario. Por ejemplo, mi calendario mostraba del 19 al 22 de septiembre, pero las ventas solo fueron el 18 y el 23.
Lo que hice fue crear una medida para elegir la última fecha disponible antes de la fecha seleccionada. Aquí hay un patrón DAX que funcionó para mí:
PrevAvailableDate =
CALCULATE (
MAX ( FactTable[Date] ),
FILTER (
ALL ( FactTable ),
FactTable[Date] < MAX ( 'Calendar'[Date] )
)
)
MAX('Calendar'[Date]) → elige la fecha seleccionada de la segmentación (como 23-Sep).
El FILTRO vuelve a la tabla de hechos y encuentra la fecha más grande que es menor que la fecha seleccionada (en su caso, 18-Sep).
Ejemplo de mi modelo:
Calendario seleccionado = 23-Sep
Fechas de la tabla de datos = 15, 18, 23 de septiembre
Resultado de la medición = 18-Sep ✅
Simplemente coloque esta medida en un objeto visual de tarjeta y siempre mostrará la última fecha disponible antes de la fecha de segmentación.
Pequeño consejo: si también desea mostrar el valor real de esa fecha (como Ventas), simplemente reemplace MAX(FactTable[Date]) con su medida dentro del mismo patrón.
Esta medida devolverá la fecha más reciente con datos en o antes de la fecha seleccionada actualmente
Latest Date With Value =
CALCULATE (
// Find the latest date (up to the currently selected date)
// where [Sum of Sales] is not blank
LASTNONBLANK ( Dates[Date], [Sum of Sales] ),
FILTER (
ALL ( Dates ), // remove filters to scan the full date range
Dates[Date] <= MAX ( Dates[Date] ) // only keep dates up to the current context date
)
)
A continuación se devolverá un valor basado en la fecha anterior
Sales - Latest Available Date =
VAR LastNonBlankDate =
CALCULATE (
// Find the latest date (up to the currently selected date)
// where [Sum of Sales] is not blank
LASTNONBLANK ( Dates[Date], [Sum of Sales] ),
FILTER (
ALL ( Dates ), // remove filters to scan the full date range
Dates[Date] <= MAX ( Dates[Date] ) // only keep dates up to the current context date
)
)
RETURN
CALCULATE (
// Return the sales value corresponding to that last nonblank date
[Sum of Sales],
FILTER (
ALL ( Dates ), // remove filters to allow exact match
Dates[Date] = LastNonBlankDate // isolate only the last valid date found above
)
)
En la imagen de abajo, seleccioné el 4 de enero, que no tiene un valor, por lo que muestra el valor del 3 de enero en su lugar
Gracias por tu solución
Necesito una solución extra
1. Si selecciona el 4 de enero, mi tarjeta mostrará las ventas totales del 4 de enero, si el 4 de enero no tiene datos, se mostrará en blanco. Si está en blanco o no en blanco, necesita % de cambios en comparación con la fecha disponible anterior, por ejemplo, selecciono el valor del 5 de enero es 1119 ya que el 4 de enero no tiene valor, por lo que considerará que el valor del 3 de enero es 393 para comparar y el resultado debe ser 184.73%
¿No es esta la diferencia en pct entre
[YourMeasure] y
Si esto ayudó, considere dar felicitaciones y marcar como una solución
@me en las respuestas o perderé tu hilo¿Quiere comprobar sus habilidades de DAX? Responde a mis desafíos quincenales del DAX en la página de Linkedin de kubisco
Considere la posibilidad de votar esta idea de Power BI
Francesco Bergamaschi
MBA, M.Eng, M.Econ, Profesor de BI
En primer lugar, debe seleccionar también un año (a menos que haya cargado solo datos de un solo año, pero en cualquier caso es mejor arreglar un año o actualizaciones futuras si incluye varios años, hecho de que tenga un problema)
Dicho esto, aquí está el código
Si esto ayudó, considere dar felicitaciones y marcar como una solución
@me en las respuestas o perderé tu hilo¿Quiere comprobar sus habilidades de DAX? Responde a mis desafíos quincenales del DAX en la página de Linkedin de kubisco
Considere la posibilidad de votar esta idea de Power BI
Francesco Bergamaschi
MBA, M.Eng, M.Econ, Profesor de BI
Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!
Check out the October 2025 Power BI update to learn about new features.