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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Syndicate_Admin
Administrator
Administrator

Medida DAX: cambio de estado y valor en el tiempo

Hola Expertos

Mi fuente de datos tiene el siguiente aspecto

Case_IDFechaStatus_IDImporte
101.09.20210300
105.09.20213320
106.09.20213320
205.09.20213100
302.09.20210200
307.09.20212200

Case_ID identificar un caso de negocio único para que el estado y la cantidad cambien en el tiempo. Un nuevo registro para una fecha en particular existe solo si cambia el estado o la cantidad de la Case_ID. El requisito es crear imágenes (tabla y gráfico) que muestren el total por estado y día como se muestra a continuación:

0123
01.09.2021300
02.09.2021500
03.09.2021500
04.09.2021500
05.09.2021200 320200
06.09.2021200 420
07.09.2021 200 420
08.09.2021 200 420
... 200 420

He encontrado varios blogs sobre cómo manejar medidas semi aditivas pero no manejando un caso similar.

¿Alguien puede ayudar a definir la fórmula DAX?

EDITAR:

Trato de describir el problema un poco más:

Se agrega un nuevo registro a los datos de origen si y solo si hay una actualización para Importe o Status_ID para el Case_ID.

Por ejemplo, para el Case_ID = 1 se creó 1.9. con Status_ID = 0 y Cantidad = 300. Luego se actualizó en 5.9. a Status_ID = 2 y Cantidad = 300 y finalmente 6.9. a Status_ID = 3, Cantidad = 300 (sin cambios).

Esto significa que en 1.-4.9. el Status_ID fue 0 y la cantidad = 300, 5,9. fue Status_ID = 2, Cantidad = 320 y 6.9. hasta el final del calendario se Status_ID = 3, Cantidad = 320.

La mejor medida que pude encontrar es la siguiente:

Last Amount = 
        VAR lastKnownAmount =
            CALCULATETABLE (
                SUMMARIZE (
                    History,
                    History[Case_ID],
                    History[Status_ID],
                    "LastKnownAmount", LASTNONBLANKVALUE ( 'Date'[Date], SUM ( History[Amount] ) )
                ),
                FILTER ( ALL ( 'Date' ), 'Date'[Date] <= MAX ( 'Date'[Date] )
                )
            )
        RETURN
            SUMX ( lastKnownAmount, [LastKnownAmount] )

Encuentra la última cantidad para todas las combinaciones Case_ID y Status_ID y la llena hasta todas las fechas hasta el final del calendario. La salida filtrada por Case_ID = tiene el siguiente aspecto:

xxdkbl8BGi.png

Pero no puedo deshacerme de las figuras de la cruz roja.

EDICIÓN 2:

Pude hacer algunos progresos en este tema. He agregado una nueva columna calculada "Fecha siguiente" a la fuente de datos que contiene la fecha del siguiente registro para la misma fecha Case_ID o última del calendario si no hay un registro siguiente:

NextDate = 
VAR lastKnownDate =
    MAX ( 'Date'[Date] )
VAR next =
    CALCULATE (
        FIRSTNONBLANK ( 'History'[Date], 1 ),
        FILTER (
            History,
            (
                'History'[Date] > EARLIER ( History[Date] )
                    && ( 'History'[Case_ID] = EARLIER ( 'History'[Case_ID] ) )
            )
        )
    )
RETURN
    IF ( ISBLANK ( next ), lastKnownDate, next )

Ahora cada registro es válido para el rango >= Date y <NextDate. Me cuesta construir la medida.

4 REPLIES 4
Syndicate_Admin
Administrator
Administrator

Hay @jirim

Basado en su tabla de origen de datos y tabla esperada, no puedo encontrar la relación o lógica de cálculo entre ellos, ¿podría darnos la lógica de cálculo del valor de salida? Para que podamos darte medidas concretas. También encuentro un artículo sobre Medidas Semi-Aditivas en DAX

https://www.sqlbi.com/articles/semi-additive-measures-in-dax/

-

tal vez puedas probar la medida con esta estructura

Total=calculate(sum(table[Amount]),Filter(All(table),table[Status_ID]=min(table[Status_ID])&&[your date period]))

Saludos

Equipo de soporte de la comunidad _Tang

Si esta publicación ayuda,considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

Hay @v-xiaotang,

gracias por sus comentarios. He actualizado la pregunta con una mejor explicación del problema. No entiendo la lógica en su código DAX. Lo he actualizado a mis datos: la tabla de origen es "Historial" y la tabla de calendario es "Fecha" como se sigue:

Total = 
CALCULATE (
    SUM ( History[Amount] ),
    FILTER (
        ALL ( history ),
        history[Status_ID] = MIN ( history[Status_ID] )
            && [Date]
    )
)

Lamentablemente el resultado no da mucho sentido. Si hago una tabla de fecha/Status_ID filtrada por Case_ID = 1 como en la pregunta, el resultado se ve de la siguiente manera:
yca1EYuliI.png

Syndicate_Admin
Administrator
Administrator

Hay @VahidDM

mi pregunta probablemente no estaba clara. No sé cómo construir el messure en DAX que daría los resultados como en la tabla de salida de muestra.

Syndicate_Admin
Administrator
Administrator

Hay @jirim

Intente usar Matrix visual y configítelo de la siguiente manera:

VahidDM_0-1632614363452.png

Si este post Ayuda, por favor considere aceptarél como la soluciónpara ayudar a los otros miembros a encontrarlo más rápidamente.

Aprecia tus felicitaciones🙏!!

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors