Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
7 years ago

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

  • Anonymous's avatar
    Anonymous
    Not 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

    • Anonymous's avatar
      Anonymous
      Not 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?

       

       

       

       

       

      • Anonymous's avatar
        Anonymous
        Not 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

    • Quinnie2017's avatar
      Quinnie2017
      Helper 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]