2017-09-15 1 views
0

Voici une version simplifiée de mon modèle:DAX cumulatif VAMI Retour

J'ai données P/L (résultat) au niveau quotidien de plusieurs fonds et plusieurs titres. Pour calculer le% de retour est facile - c'est le P/L divisé par l'AUM d'ouverture (actifs sous gestion). Mais chaque mois l'AUM change de manière significative en raison des contributions des investisseurs. Donc, pour obtenir un retour de YTD%, je dois calculer les rendements cumulatifs, dont la formule est (voir here):

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

La difficulté est que mon P/L est au niveau quotidien. J'ai créé avec succès ceci:

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 

Cela fonctionne bien:

ytd returns

Cependant, je veux le faire sur une base de cumul annuel de fonctionnement. J'ai du mal à régler la table "interne" à YTD. J'ai essayé autour de la VALUES() avec un CALCULATETABLE() pour filtrer par YTD, mais n'a pas fonctionné:

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 

Le résultat dans Excel est pas un retour de la course, mais individuelle:

running compound returns

Toutes les idées ? Merci!

Note: Tout le code formaté avec daxformatter.com

+0

Essayez 'TOTALYTD' Formula. plus d'explication ici: https://msdn.microsoft.com/en-us/library/ee634400.aspx –

Répondre

0

figured it out avec l'aide d'un ami. Je avais besoin de mettre le CALCULATETABLE en dehors du 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