Forum Discussion

NicholasJackson's avatar
NicholasJackson
Frequent Visitor
3 years ago
Solved

Creating Reusable Date Filters

I have a simple measure that gets the total sales for the given year:  Total Sales (YTD) = CALCULATE(SUM([Sales Amount]), DATESYTD('Calendar'[Date])) I have another measure where I would like to ...
  • OwenAuger's avatar
    3 years ago

    Hi NicholasJackson 

    I would recommend using Calculation Groups here.

    Calculation Groups can be used to apply common modifications to multiple measures, with time intelligence being a common example.

     

    The nice thing about Calculation Groups is that they can be applied either by a filter in the report, or by applying a filter in a DAX expression.

     

    In your case, you could create a Calculation Group with a Calculation Item for each date filter. You can then apply a particular date filter to a calculation by filtering on the Calcualation Item by name, avoiding having to rewrite the DAX each time.

     

    Here is an example of a calculation group (using DAX Script from Tabular Editor) with 5 Calculation Items:

     

    -----------------------------------------------------
    -- Calculation Group: 'Date Filter Calculation Group'
    -----------------------------------------------------
    CALCULATIONGROUP 'Date Filter Calculation Group'[Date Filter]
    
        CALCULATIONITEM "Default" = SELECTEDMEASURE ()
            Ordinal = 0
    
        CALCULATIONITEM "YTD" = 
            CALCULATE (
                SELECTEDMEASURE (),
                DATESYTD ( 'Date'[Date] )
            )
            Ordinal = 1
    
        CALCULATIONITEM "Full Year" = 
            CALCULATE (
                SELECTEDMEASURE (),
                PARALLELPERIOD ( 'Date'[Date], 0, YEAR )
            )
            Ordinal = 2
    
        CALCULATIONITEM "Previous Full Year" = 
            CALCULATE (
                SELECTEDMEASURE (),
                PREVIOUSYEAR ( 'Date'[Date] )
            )
            Ordinal = 3
    
        CALCULATIONITEM "YTD as at TODAY" = 
            CALCULATE (
                SELECTEDMEASURE (),
                CALCULATETABLE (
                    DATESYTD ( 'Date'[Date] ),
                    'Date'[Date] = TODAY ()
                )
            )
            Ordinal = 4

     

    Having created this Calculation Group, you can then apply a Calculation Item within a measure such as:

     

    Sales Quantity YTD = 
    CALCULATE (
        [Sales Quantity],
        'Date Filter Calculation Group'[Date Filter] = "YTD"
    )

     

    You can also filter on a particular Calculation Item in the report to apply it to multiple measures at a report/page/visual level.

     

    For general background on Calculation Groups, there are various articles such as:

    https://www.sqlbi.com/calculation-groups/

     

    Regards