Forum Discussion
The XIRR function is not working
- 4 years ago
Aymane Thanks for that 🙂
First of all, can you test this:
- Create a simple table visual containing Dimension_Date[Today] and XIRR_Calc2.
- Do you see the cashflow values that you are expecting to feed into the IRR calculation?
If so, you could rewrite the XIRR measure as:
XIRR = XIRR ( VALUES ( Dimension_Date[Today] ), -- OR Dimension_Date [XIRR_calc2], Dimension_Date[Today] )If not, the logic may need to be rewritten in some way, either by modifying XIRR_Calc2 so that it returns the required cashflow when grouped by date, or adding some logic to the XIRR measure.
There are a couple of points to consider here:
- Iterating over a fact table with XIRR will likely give an unexpected result, due to the risk of duplicated rows. For this reason (and performance reasons) it's best to iterate over a dimension table (or dimension column).
- We need to ensure that XIRR_Calc2 returns the expected values for each row of the table provided in the first argument. Given that there is some complexity, with vMin and vMax being evaluated within the measure, there might be some tweaks required.
To explain further:
With your current XIRR measure, the XIRR_Calc2 measure is being evaluated in the row context of every row of Fact_TransactionBuckets. Due to context transition (since a measure is being evaluated), each row of Fact_TransactionBuckets is converted into an equivalent filter context, and if there happen to be any duplicated rows, things could go awry (good article on context transition here).
Regards,
Owen
Hi Anonymous
Two things I can see that may be the source of the error:
- SUM(...) should be wrapped in CALCULATE if it should be evaluated with a particular Year_Date filter applied, which would be the case if 'Table' has a relationship with the 'Year' table.
- The guess parameter of 10 seems high (=1,000%). Does it work better with a lower guess, e.g. 0.1 (=10%).
With these changes, the measure would be something like:
XIRR Measure =
XIRR (
VALUES ( 'Year'[Year_Date] ),
[Measure 1] - CALCULATE ( SUM ( 'Table'[Value] ) ),
'Year'[Year_Date],
0.1
)
If you are still getting errors, could you possibly post some sample data or a sanitised PBIX?
Regards,
Owen
Thank you so much!!! This worked! Adding 'Calculate' function worked with the formula.
I did have relationship build between the tables and I had tried the formula without the guess figure, but it wasn't working. Calculate formula was all I was missing!