es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
    )
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado esperado, puede utilizar la siguiente fórmula DAX:

    RunningTotal = 
    VAR ClientIDValue = TBL[ClientID]
    VAR DateValue = TBL[Date]
    
    RETURN
    CALCULATE(
        SUM(TBL[Amount]),
        FILTER(
            ALL(TBL),
            TBL[ClientID] = ClientIDValue &&
            TBL[Date] <= DateValue &&
            (
                TBL[Date] <> EARLIER(TBL[Date]) ||
                TBL[ID] <= EARLIER(TBL[ID])
            )
        )
    )
    

    Explicación:

    • La función VAR se utiliza para definir las variables ClientIDValue y DateValue para almacenar el ClientID y la Fecha de la fila actual.
    • La función FILTER se utiliza para crear una tabla filtrada que incluye todas las filas para el ClientID actual y todas las fechas hasta la Fecha actual, pero solo incluye filas donde la Fecha no es un duplicado o la ID es menor o igual a la ID anterior (usando la función EARLIER para hacer referencia a la fila anterior).
    • La función ALL se utiliza para eliminar cualquier filtro en la tabla (como selecciones o filtros), para que el total acumulado se calcule correctamente.
    • La función CALCULATE se utiliza para calcular el total acumulado, sumando la columna Amount para la tabla filtrada.

    Esto debería darle el resultado esperado de un total acumulado basado en ClientID y Fecha, teniendo en cuenta fechas duplicadas y utilizando la ID más pequeña en caso de duplicados.

Comments are closed.