Forum Discussion
SUM based on VAR value/ Subscription Revenue Total
I want to get a total revenue measure but am having issues. I have three tables Customers and Product and Date.
Relevent Fields for Customer:
| Company | Start Date | Product ID |
| A | 1/1/2020 | 10 |
| B | 1/1/2021 | 11 |
Product:
| Price | ID |
| 250 | 10 |
| 110 | 11 |
I have a DAX expression currently that finds the price and how many months of activity and gets me revenue based per company and per product, but not a total revenue.
I want to be able to get all revenue across all companies and products and then filter with my charts later.
Here is the expression I currently have.
Revenue =
VAR company = SELECTEDVALUE(Customers[Company])
VAR productID = SELECTEDVALUE(Customers[Product ID])
Var firstPayment = 1
Var startdate = SELECTEDVALUE(Customers[Start Date])
Var endDate = MAX(__Dates[Date])
VAR productPrice = CALCULATE(
VALUES(
'Product'[Price]
),
'Product'[ID] = productID
)
VAR dateDifference = DATEDIFF(SELECTEDVALUE(Customers[Subscription Date]),
endDate,
MONTH
)
VAR paymentMonths = IF(dateDifference >= 0, dateDifference+firstPayment, 0)
Return SUMX(Customers, paymentMonths*productPrice)
How can I get a regular SUM() to work with it. I know some people got CALCULATETABLE(SUMMERIZE()) to do this, but when I tried that I kept getting error messages.
Please try the measure below:
Revenue = SUMX ( Customers, VAR _startDate = Customers[Start Date] VAR _endDate = MAX ( __Dates[Date] ) VAR _productPrice = CALCULATE ( MAX ( 'Product'[Price] ), 'Product'[ID] = Customers[Product ID] ) VAR _dateDifference = DATEDIFF ( _startDate, _endDate, MONTH ) VAR _paymentMonths = IF ( _dateDifference >= 0, _dateDifference + 1, 0 ) RETURN _paymentMonths * _productPrice )
3 Replies
- cengizhanarslan
Super User
Please try the measure below:
Revenue = SUMX ( Customers, VAR _startDate = Customers[Start Date] VAR _endDate = MAX ( __Dates[Date] ) VAR _productPrice = CALCULATE ( MAX ( 'Product'[Price] ), 'Product'[ID] = Customers[Product ID] ) VAR _dateDifference = DATEDIFF ( _startDate, _endDate, MONTH ) VAR _paymentMonths = IF ( _dateDifference >= 0, _dateDifference + 1, 0 ) RETURN _paymentMonths * _productPrice )- CroshayFrequent Visitor
It worked! Thank you so much cengizhanarslan. This feels like magic! If you have a moment to explain why this worked I'd love that, but you've done so much so I get it if you don't.
I did have to add a line above _product price that was:VAR productID = Customers[Product ID]
But after it worked beautifully!
- cengizhanarslan
Super User
I'm glad it worrked! Basically you need to give variables inside the SUMX iteration because otherwise it does now obey the row context within the visual.