Starting December 3, join live sessions with database experts and the Microsoft product team to learn just how easy it is to get started
Learn moreGet certified in Microsoft Fabric—for free! For a limited time, get a free DP-600 exam voucher to use by the end of 2024. Register now
Hi -
I am trying to calculate NPV allowing end users to select their Discount Rate and Date Range.
I can get the values correct at a monthly level when spanning multiple years (IE 2022 & 2023), but when trying to aggregate up to the year level, the monthly values for 2023 are not summing correctly.
The XNPV function is also not working correctly at the monthly row level, but the total is correct, so I needed to do a SUMX function to get the calculation correct at the row and total levels. Example table is below, with measure calculation statements following it. The measure that is accurate is the Billings - Discount Rate - FINAL (I have a 6% discount rate currently applied).
Billings - No Discount Rate = SUM ( Billings[Billings] )
Billings - Discount Rate =
DIVIDE (
Billings[Billings - No Discount Rate],
POWER (
SELECTEDVALUE ( 'Rates Table'[1 + Discount Rate] ),
[# of Days Divided by 365]
)
)
Billings - Discount Rate - XNPV =
XNPV ( Billings, [Billings - No Discount Rate], Billings[Date], SELECTEDVALUE ( 'Rates Table'[Value] ) )
Billings - Discount Rate - FINAL =
VAR _Table =
SUMMARIZE (
'Billings',
'Billings'[Date],
"Billings - Discount Rate Value", [Billings - Discount Rate]
)
RETURN
IF (
HASONEVALUE ( 'Billings'[Date] ),
[Billings - Discount Rate],
SUMX ( _Table, [Billings - Discount Rate Value] )
)
When aggregating this up to the year level, I would assume that the total for 2023 would be $727,405 (just summing up all 2023 rows from the above screenshot). However, this is my result:
Any ideas / suggestions on how to fix this?
Thanks in advance!
Solved! Go to Solution.
thanks.
so i think the problem is 2 fold.
Firstly I do believe the number to be 734639.0506839028 is correct, not $727,405. The issue with your measures (all the discount rate ones), all of them are set to currency with no decimal places. Because you are using the power of the 1+ Discount rate which is a decimal you are using a lot of the accuracy because you are rounding. So i set the discount rate to decimal places of 4, and when did that the sum of that table was correct in excel. However your totals are stilll not working properly.
second issue is that in order to get the correct total that is reflected when you sum it in excel, you need to iterate through each line to get your calculation ie
so I changed this calculation to this
Billings - Discount Rate =
SUMX (
VALUES ( Billings[Date] ),
DIVIDE (
Billings[Billings - No Discount Rate],
POWER (
SELECTEDVALUE ( 'Rates Table'[1 + Discount Rate] ),
[# of Days Divided by 365]
)
)
)
not quite sure what you were trying to achieve with the discount rate final but please check what i have done in discount rate.
please see attached.
Proud to be a Super User!
can you share some data in text format?
Proud to be a Super User!
@vanessafvg - sure, here is the sample data I am using, thanks!
Date | Billings |
11/30/2022 | $ 50,000.00 |
12/31/2022 | $ 75,000.00 |
1/31/2023 | $ 60,000.00 |
2/28/2023 | $ 50,000.00 |
3/31/2023 | $ 50,000.00 |
4/30/2023 | $ 75,000.00 |
5/31/2023 | $ 60,000.00 |
6/30/2023 | $ 65,000.00 |
7/31/2023 | $ 50,000.00 |
8/31/2023 | $ 75,000.00 |
9/30/2023 | $ 60,000.00 |
10/31/2023 | $ 100,000.00 |
11/30/2023 | $ 50,000.00 |
12/31/2023 | $ 60,000.00 |
I will also need this
SELECTEDVALUE ( 'Rates Table'[Value] ) )
this rates table;
Proud to be a Super User!
@vanessafvg - sorry about that, this is just a table I created in PBI Desktop with the GenerateSeries function:
apologies but im actually struggling to recreate your scenario
i am missing how you get
no of days
no of days divided by 365
etc, in order to replicate the issue i need your whole file, can you provide it?
Proud to be a Super User!
@vanessafvg - here is link: NPV Testing File.pbix
https://brookfieldproperties.egnyte.com/dl/AcqBknr6Nt
thanks.
so i think the problem is 2 fold.
Firstly I do believe the number to be 734639.0506839028 is correct, not $727,405. The issue with your measures (all the discount rate ones), all of them are set to currency with no decimal places. Because you are using the power of the 1+ Discount rate which is a decimal you are using a lot of the accuracy because you are rounding. So i set the discount rate to decimal places of 4, and when did that the sum of that table was correct in excel. However your totals are stilll not working properly.
second issue is that in order to get the correct total that is reflected when you sum it in excel, you need to iterate through each line to get your calculation ie
so I changed this calculation to this
Billings - Discount Rate =
SUMX (
VALUES ( Billings[Date] ),
DIVIDE (
Billings[Billings - No Discount Rate],
POWER (
SELECTEDVALUE ( 'Rates Table'[1 + Discount Rate] ),
[# of Days Divided by 365]
)
)
)
not quite sure what you were trying to achieve with the discount rate final but please check what i have done in discount rate.
please see attached.
Proud to be a Super User!
Thank you! The Billings - Discount Rate - FINAL was doing pretty much what your new Billings - Discount Rate calculation is doing. It was iterating over the date with SUMX so that the monthly row values were accurate, along with the total. So afterall, there is no issue here - just with all the rounding occuing, it threw off what I was expecting. Thanks again.
Starting December 3, join live sessions with database experts and the Fabric product team to learn just how easy it is to get started.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early Bird pricing ends December 9th.
User | Count |
---|---|
94 | |
83 | |
82 | |
71 | |
49 |
User | Count |
---|---|
143 | |
129 | |
108 | |
63 | |
55 |