Forum Discussion

rmsaunders's avatar
rmsaunders
Frequent Visitor
7 years ago
Solved

Variable usage in CALCULATE statement

Hello. I'm new to Power BI and DAX, and I'm trying to get the following code more compact:
 
This works:
 
calc_TY_Sales_YTD =
VAR var_Metric = SELECTEDVALUE(table_Sales_Metrics[Metric])
VAR var_TY_sales_YTD =
SWITCH(TRUE(),
var_Metric = "Units", CALCULATE(SUM(SALES_TABLE[qty_sold]), DATESBETWEEN(DATE_TABLE[date], [calc_Report_Start_Date], [calc_Report_End_Date])),
var_Metric = "Cost $", CALCULATE(SUM(SALES_TABLE[dollar_sold]), DATESBETWEEN(DATE_TABLE[date], [calc_Report_Start_Date], [calc_Report_End_Date])),
var_Metric = "Retail $", CALCULATE(SUM(SALES_TABLE[retail_sold]), DATESBETWEEN(DATE_TABLE[date], [calc_Report_Start_Date], [calc_Report_End_Date])))
 
I'd rather do this...
 
calc_TY_Sales_YTD =
VAR var_Metric = SELECTEDVALUE(table_Sales_Metrics[Metric])
VAR var_Sales_measure =
SWITCH(TRUE(),
var_Metric = "Units", SUM(SALES_TABLE[qty_sold]),
var_Metric = "Cost $", SUM(SALES_TABLE[dollar_sold]),
var_Metric = "Retail $", SUM(SALES_TABLE[retail_sold]))
VAR var_TY_sales_YTD =
CALCULATE(var_Metric, DATESBETWEEN(DATE_TABLE[date], [calc_Report_Start_Date], [calc_Report_End_Date]))

...or this...
 
calc_TY_Sales_YTD =
VAR var_Metric = SELECTEDVALUE(table_Sales_Metrics[Metric])
VAR var_Sales_measure =
SWITCH(TRUE(),
var_Metric = "Units", SALES_TABLE[qty_sold],
var_Metric = "Cost $", SALES_TABLE[dollar_sold],
var_Metric = "Retail $", SALES_TABLE[retail_sold])
VAR var_TY_sales_YTD =
CALCULATE(SUM(var_Metric), DATESBETWEEN(DATE_TABLE[date], [calc_Report_Start_Date], [calc_Report_End_Date]))
 
...but neither of thise seem to work.
 
Am I stuck with the first method, or am I missing something?
 
Thanks.
  • Hi rmsaunders,

     

    Do you have any performance issue? Or just want to compact the formula? If so, please try out this one. 

     

    calc_TY_Sales_YTD =
    VAR var_Metric =
        SELECTEDVALUE ( table_Sales_Metrics[Metric] )
    VAR var_TY_sales_YTD =
        CALCULATE (
            SWITCH (
                var_Metric,
                "Units", SUM ( SALES_TABLE[qty_sold] ),
                "Cost $", SUM ( SALES_TABLE[dollar_sold] ),
                "Retail $", SUM ( SALES_TABLE[retail_sold] )
            ),
            DATESBETWEEN (
                DATE_TABLE[date],
                [calc_Report_Start_Date],
                [calc_Report_End_Date]
            )
        )
    RETURN
        var_TY_sales_YTD
    

    If it doesn't help, please provide a sample that we can download or copy with. Please mask the sensitive parts first.

     

     

     

    Best Regards,

3 Replies

  • Greg_Deckler's avatar
    Greg_Deckler
    Community Champion

    Hmm, probably a better way, can you share sample data that can be copied and pasted so that I can try a few things? Please see this post regarding How to Get Your Question Answered Quickly: https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490.

     

    Also, there are some techniques here that might help.

    https://community.powerbi.com/t5/Quick-Measures-Gallery/Time-Intelligence-quot-The-Hard-Way-quot-TITHW/m-p/434008

     

     

  • v-jiascu-msft's avatar
    v-jiascu-msft
    Microsoft Employee

    Hi rmsaunders,

     

    Do you have any performance issue? Or just want to compact the formula? If so, please try out this one. 

     

    calc_TY_Sales_YTD =
    VAR var_Metric =
        SELECTEDVALUE ( table_Sales_Metrics[Metric] )
    VAR var_TY_sales_YTD =
        CALCULATE (
            SWITCH (
                var_Metric,
                "Units", SUM ( SALES_TABLE[qty_sold] ),
                "Cost $", SUM ( SALES_TABLE[dollar_sold] ),
                "Retail $", SUM ( SALES_TABLE[retail_sold] )
            ),
            DATESBETWEEN (
                DATE_TABLE[date],
                [calc_Report_Start_Date],
                [calc_Report_End_Date]
            )
        )
    RETURN
        var_TY_sales_YTD
    

    If it doesn't help, please provide a sample that we can download or copy with. Please mask the sensitive parts first.

     

     

     

    Best Regards,

    • rmsaunders's avatar
      rmsaunders
      Frequent Visitor