Cálculo de ganancias de acciones o acciones con el método FIFO usando DAX

Un usuario Pregunto ✅

AZFinserv

Problema: Estoy tratando de calcular el método FIFO basado en las ganancias de las acciones para las transacciones de Compra y Venta. Aquí está el resultado real (calculado manualmente en Excel) Tenga en cuenta que esto es solo para una acción, tengo muchas otras acciones en mis datos.

Aquí está la imagen del cálculo de Excel: COvuG.png (888 × 312) (imgur.com)

Mi solución: en primer lugar, creé una columna de índice para ordenar los datos según la fecha y luego según las transacciones: las primeras compras y luego las ventas (tengo varias transacciones en la misma fecha). Después de eso, agregué una columna DateTime para bifurcar múltiples entradas en la misma fecha. Según esta columna DateTime, escribí una consulta DAX pero no da un resultado correcto.

Aquí está el captura de pantalla de la salida de Power BI (Aj2ZB.png (1270 × 290) (imgur.com)). He resaltado los valores incorrectos en amarillo.

Código:

VAR myunits = ABS(Data[Quantity])
VAR Previous_buys =
    FILTER (
        Data,
        [Code] = EARLIER ( [Code] )
            && [DateTime] < EARLIER ( [DateTime] )
            && [type] = "buy"
    )
VAR Previous_sales =
    ABS(SUMX (
        FILTER (
            Data,
            [Code] = EARLIER ( [Code] )
                && [DateTime] < EARLIER ( [DateTime] )
                && [type] = "sell"
        ),
        [Quantity]
    ))
VAR Previous_buys_balance =
    ADDCOLUMNS (
        ADDCOLUMNS (
            Previous_buys,
            "Cumulative", SUMX ( FILTER ( Previous_buys, [DateTime] <= EARLIER ( [DateTime] ) ), [Quantity] )
        ),
        "Balance Left", [Quantity]
            - IF (
                [Cumulative] < Previous_sales,
                [Quantity],
                VAR previouscumulative = [Cumulative] - [Quantity]
                RETURN
                    IF ( Previous_sales > previouscumulative, Previous_sales - previouscumulative )
            )
    )
VAR CostUsed =
    ADDCOLUMNS (
        ADDCOLUMNS (
            Previous_buys_Balance,
            "MyCumulatives", SUMX (
                FILTER ( Previous_buys_balance, [DateTime] <= EARLIER ( [DateTime] ) ),
                [Balance Left]
            )
        ),
        "Balance Used", IF (
            [MyCumulatives] < myunits,
            [MyCumulatives],
            VAR previouscumulatives = [MyCumulatives] - [Balance Left]
            RETURN
                IF ( myunits > previouscumulatives, myunits - previouscumulatives )
        )
    )
RETURN
    IF (
        [type] = "sell",
        ABS([Quantity]) * [unit price ($)]
            - SUMX ( CostUsed, [Balance Used] * [unit price ($)] )
    )

@AZFinserv

¿Puede compartirlo con un archivo pbix de muestra, para que podamos probar con él? Hay demasiados pasos a seguir con solo mirar la fórmula.

Paul

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *