DAX累积VAMI回报

时间:2017-09-15 20:31:44

标签: ssas dax

这是我的模型的简化版本:

我有几个基金和几个证券的每日盈亏(损益)数据。计算回报率很容易 - 它是P / L除以开盘AUM(管理资产)。但每个月由于投资者的贡献,资产管理规模发生重大变化。因此,要获得YTD回报%,我需要计算公式为的累积回报(参见here):

YtdReturn =
PRODUCTX ( MonthlyReturnTable, DIVIDE ( MonthlyReturn, OpeningAUM ) +1 ) -1

困难在于我的盈亏处于每日水平。我成功地创造了这个:

    CompoundReturn:=
    PRODUCTX (
        ADDCOLUMNS (
            VALUES ( tblDates[MonthYearNumber] ),
            "PnL Total1", CALCULATE ( SUM ( PnL[TradingPnL] ) + SUM ( PnL[InterestDividendsPnL] ) ),
            "Month_Opening_AUM1", CALCULATE ( VALUES ( Daily_AUM[MonthOpeningAUM] ) )
        ),
        DIVIDE ( [PnL Total1], [Month_Opening_AUM1] ) + 1
    )
        - 1 

这很有效:

ytd returns

但是,我希望在正在运行的YTD基础上执行此操作。我在设置"内部"时遇到了问题。表到YTD。我尝试用VALUES()围绕CALCULATETABLE()来过滤YTD,但是没有效果:

    CompoundReturn :=
    PRODUCTX (
        ADDCOLUMNS (
            CALCULATETABLE (
                VALUES ( tblDates[MonthYearNumber] ),
                DATESYTD ( tblDates[Date] )
            ),
            "PnL Total1", CALCULATE ( SUM ( PnL[TradingPnL] ) + SUM ( PnL[InterestDividendsPnL] ) ),
            "Month_Opening_AUM1", CALCULATE ( VALUES ( Daily_AUM[MonthOpeningAUM] ) )
        ),
        DIVIDE ( [PnL Total1], [Month_Opening_AUM1] ) + 1
    )
        - 1

Excel中的结果不是运行返回,而是个人:

running compound returns

有什么想法吗?谢谢!

注意:所有使用daxformatter.com

格式化的代码

1 个答案:

答案 0 :(得分:0)

在朋友的帮助下计算出来。我需要将CALCULATETABLE放在ADDCOLUMNS之外:

CompoundReturn :=
PRODUCTX (
    CALCULATETABLE (
        ADDCOLUMNS (
            VALUES ( tblDates[MonthYearNumber] ),
            "PnL Total1", CALCULATE ( SUM ( PnL[TradingPnL] ) + SUM ( PnL[InterestDividendsPnL] ) ),
            "Month_Opening_AUM1", CALCULATE ( VALUES ( Daily_AUM[MonthOpeningAUM] ) )
        ),
        DATESYTD ( tblDates[Date] )
    ),
    DIVIDE ( [PnL Total1], [Month_Opening_AUM1] ) + 1
)
    - 1