Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Get Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Request now

Reply
Syndicate_Admin
Administrator
Administrator

Necesita ayuda en DAX

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?

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

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.

View solution in original post

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

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.

Syndicate_Admin
Administrator
Administrator

@sumon_51

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

danextian_0-1758976738078.png

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

[YourMeasurePrev Day] =
VAR Fecha seleccionada = VALOR SELECCIONADO( 'Calendario'[Fecha] )
VAR AntDatewithSales =
CALCULAR(
MÁXIMO ( Ventas[Fecha de pedido] ),
Ventas[Fecha de pedido] < Fecha seleccionada,
ELIMINARFILTROS( 'Calendario' )
)
DEVOLUCIÓN
CALCULAR(
[SuMedida],
'Calendario'[Fecha] = AntDatewithSales
)
?
En caso afirmativo,
DIVIDIR (
[YourMeanure] - [YourMeasurePrev Day],
[YourMeasurePrev Day]
)

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

Syndicate_Admin
Administrator
Administrator

@sumon_51 ,

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

Monto imponible Día anterior =
VAR Fecha seleccionada = VALOR SELECCIONADO( 'Calendario'[Fecha] )
VAR AntDatewithSales =
CALCULAR(
MÁXIMO ( Ventas[Fecha de pedido] ),
Ventas[Fecha de pedido] < Fecha seleccionada,
ELIMINARFILTROS( 'Calendario' )
)
DEVOLUCIÓN
CALCULAR(
[SuMedida],
'Calendario'[Fecha] = AntDatewithSales
)

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

Syndicate_Admin
Administrator
Administrator

Helpful resources

Announcements
Fabric Data Days Carousel

Fabric Data Days

Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!

October Power BI Update Carousel

Power BI Monthly Update - October 2025

Check out the October 2025 Power BI update to learn about new features.

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.