Forum Discussion
Pass two Date Ranges into DAX Formula
Hello!
My client wants to be able to input two dates to calculate sales for two periods, and then calculate the Delta %. The problem I'm having is how to incorporate two Date Parameters into the Delta formula (the Before & After periods).
To calculate the Delta formula, I want to take "Gross Sales P2" - "Gross Sales P1" / "Gross Sales P1". My thought was to somehow pass both date parameters into a single DAX formula to calculate this.
One idea I've had is to create two dynamic tables based on the two date ranges, and then reference those tables in the formula. But I don't know how to do that. We're connected to a SQL Server Analysis Services cube so I don't quite have the option of easily editing the data on the backend. We have a robust Calendar table to work with though.
My screenshot better explains what I'm looking at.
6 Replies
- AnonymousNot applicable
Growth % = var __periodBefore = TREATAS( VALUES( BeforeSlicer[Date] ), 'Dates'[Date] ) var __periodAfter = TREATAS( VALUES( AfterSlicer[Date] ), 'Dates'[Date] ) var __beforeGrossSales = CALCULATE( [Gross Sales], __periodBefore ) var __afterGrossSales = CALCULATE( [Gross Sales], __afterPeriod ) var __growth = DIVIDE( __afterGrossSales - __beforeGrossSales, __beforeGrossSales ) RETURN __growth
Best
Darek
- AnonymousNot applicable
EDIT: I'm using Analysis Services for my data source, so it appears these functions are not available to me.
Darak - I track with your code, but I'm not able to create variables or use the TREATAS function when creating a DAX formula in Power BI Desktop. Am I doing something wrong?
- AnonymousNot applicable
Well, whether or not you can use a function depends on the version of the SSAS. I hope you're using SSAS Tabular... not Multidimensional. If a function is not available, then you'll have to reformulate the code in such a way that it does the same thing but uses only the available constructs. TREATAS can be replaced by a construct with INTERSECT or, if the version does not support it, with CONTAINS. But pay attention to syntax.
Bestk
Dare
- Quinnie2017Helper II
This is helpful! May I ask how you named the slicers as in the following statements? Stated another way, not sure how to name my slicers as "BeforeSlicer" and "AfterSlicer". Perhaps as a named variable?
Growth % = var __periodBefore = TREATAS( VALUES( BeforeSlicer[Date] ), 'Dates'[Date] ) var __periodAfter = TREATAS( VALUES( AfterSlicer[Date] ), 'Dates'[Date]