Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
Hola Expertos
Mi fuente de datos tiene el siguiente aspecto
Case_ID | Fecha | Status_ID | Importe |
1 | 01.09.2021 | 0 | 300 |
1 | 05.09.2021 | 3 | 320 |
1 | 06.09.2021 | 3 | 320 |
2 | 05.09.2021 | 3 | 100 |
3 | 02.09.2021 | 0 | 200 |
3 | 07.09.2021 | 2 | 200 |
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:
0 | 1 | 2 | 3 | |
01.09.2021 | 300 | |||
02.09.2021 | 500 | |||
03.09.2021 | 500 | |||
04.09.2021 | 500 | |||
05.09.2021 | 200 | 320 | 200 | |
06.09.2021 | 200 | 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:
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.
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:
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.
Hay @jirim
Intente usar Matrix visual y configítelo de la siguiente manera:
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🙏!!