Columna calculada DAX con total acumulado / acumulativo en fechas duplicadas.
Tengo esta tabla:
ID | ClientID | Date(dd/mm/yyyy)| Amount
6 | 1 | 01/01/2021 | 100
8 | 1 | 01/01/2021 | 150
3 | 1 | 02/01/2021 | 50
1 | 1 | 09/01/2021 | 200
5 | 2 | 03/01/2021 | 100
4 | 2 | 06/01/2021 | 50
7 | 2 | 07/01/2021 | 100
3 | 2 | 07/01/2021 | 50
9 | 2 | 07/01/2021 | 200
Necesito una suma acumulada basada en el ClientID y la fecha, pero si hay una fecha duplicada quiero sumar el menor ID.
Resultado esperado:
ID | ClientID | Date(dd/mm/yyyy)| Amount | Suma Acumulada
6 | 1 | 01/01/2021 | 100 | 100 – misma fecha, por lo tanto el ID 6 antes del ID 8
8 | 1 | 01/01/2021 | 150 | 250 – misma fecha, por lo tanto el ID 8 después del ID 6
3 | 1 | 02/01/2021 | 50 | 300
1 | 1 | 09/01/2021 | 200 | 500
5 | 2 | 03/01/2021 | 100 | 100
4 | 2 | 06/01/2021 | 50 | 150
7 | 2 | 07/01/2021 | 100 | 300 – misma fecha, el ID 7 es después del 3
3 | 2 | 07/01/2021 | 50 | 200 – misma fecha, el ID 3 antes del 7
9 | 2 | 07/01/2021 | 200 | 500 – misma fecha, el ID 9 es el último
Intenté algo así sin éxito:
RunningTotal =
var ClientIDValue = TBL[ClientID]
var DateValue = TBL[Date]
var FilterTbl = FILTER(TBL,TBL[ClientID] = ClientIDValue && TBL[Date] <= DateValue)
RETURN
CALCULATE(
sum(TBL[Amount])
,FilteredTbl
)
davy.ai
Para lograr el resultado esperado, puede utilizar la siguiente fórmula DAX:
Explicación:
VAR
se utiliza para definir las variablesClientIDValue
yDateValue
para almacenar elClientID
y laFecha
de la fila actual.FILTER
se utiliza para crear una tabla filtrada que incluye todas las filas para elClientID
actual y todas las fechas hasta laFecha
actual, pero solo incluye filas donde laFecha
no es un duplicado o laID
es menor o igual a laID
anterior (usando la funciónEARLIER
para hacer referencia a la fila anterior).ALL
se utiliza para eliminar cualquier filtro en la tabla (como selecciones o filtros), para que el total acumulado se calcule correctamente.CALCULATE
se utiliza para calcular el total acumulado, sumando la columnaAmount
para la tabla filtrada.Esto debería darle el resultado esperado de un total acumulado basado en
ClientID
yFecha
, teniendo en cuenta fechas duplicadas y utilizando laID
más pequeña en caso de duplicados.