Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
3 years ago
Solved

Calculating Weighted IRR using XIRR properly

Hi,  I am trying to calculate the IRR (funtion: XIRR) for the following data set and return a specific calcualtion. What I`m trying to do Calculating a Weighted IRR for each asset: (IRR of each ...
  • Anonymous's avatar
    Anonymous
    3 years ago

    Ashish_Mathur Indeed it`s quite a complex challenge, it is simply a try to calculate weighted IRR (against Capex) of 2 subsets of the data and comparing them while applying multiple filters.

    I was able to resolve it and I hope the code itself describes better the solution:

    WAIRR Change test =

    //calculations for IRR of baseline only:
    var tableIRRbase0=SUMMARIZE(CALCULATETABLE(
    'result',KEEPFILTERS('result'[Baseline/Change]="Baseline"),ALL('result'[Source Fiscal Year])),
    'result'[Asset Scenario ID],'result'[Source Parameter],
    "IRR",XIRR(FILTER('result','result'[Impacted Parameter]="Cashflow"&&'result'[Baseline/Change]="Baseline"),[Value],'result'[Impacted Date]),
    "Capex",
    SUMX(FILTER(('result'),'result'[Impacted Parameter]="Capex"&&'result'[Baseline/Change]="Baseline"),'result'[Value])
    )
    var tableIRRbase1= ADDCOLUMNS(tableIRRbase0,"WIRR",[Capex]*[IRR])
    var tableIRRbase2=ADDCOLUMNS(tableIRRbase1,"C",[WIRR]/CALCULATE(SUMX(tableIRRbase1,[Capex])))

    //calculations for IRR of baseline and change:
    var tablechange0= SUMMARIZE(
    UNION(
    CALCULATETABLE('result',KEEPFILTERS('result'[Baseline/Change]="Baseline"),ALL('result'[Source Fiscal Year])),
    CALCULATETABLE('result',KEEPFILTERS('result'[Baseline/Change]="Change"),KEEPFILTERS('result'[Stress Direction]="Positive"))),
    'result'[Asset Scenario ID],'result'[Source Parameter],
    "IRR",XIRR(FILTER('result','result'[Impacted Parameter]="Cashflow"),[Value],'result'[Impacted Date]),
    "Capex",
    SUMX(FILTER(('result'),'result'[Impacted Parameter]="Capex"),'result'[Value])
    )

    var tableIRRchange1= ADDCOLUMNS(tablechange0,"WIRR",[Capex]*[IRR])
    var tableIRRchange2=ADDCOLUMNS(tableIRRchange1,"C",[WIRR]/CALCULATE(SUMX(tableIRRchange1,[Capex])))


    //Returning the required difference calculation
    return (SUMX(tableIRRchange2,[C])-SUMX(tableIRRbase2,[C]))/SUMX(tableIRRbase2,[C])