首页 > 解决方案 > 在 Power BI DAX 查询中使用 FIFO 方法计算问题股票利润

问题描述

问题:我正在尝试为买卖交易计算基于股票利润的 FIFO 方法。这是实际结果(在 Excel 中手动计算) 请注意,这仅适用于一只股票,我的数据中还有许多其他股票。 这是手动计算的图像

我的解决方案:首先我创建了一个索引列来根据日期对数据进行排序,然后根据交易进行排序 - 第一次买入然后卖出(我在同一日期有多个交易)。之后,我添加了一个 DateTime 列以在同一日期分叉多个条目。基于此 DateTime 列,我编写了一个 DAX 查询,但它没有给出正确的结果。

这是Power BI 输出的屏幕截图。我用黄色突出显示了不正确的值。

代码:

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 ($)] )
    )

标签: powerbidax

解决方案


推荐阅读