Forum Discussion

sunilbeckham's avatar
sunilbeckham
Helper I
2 years ago
Solved

Calculate function not filtering when a variable is used.

Hello everyone. I have a table that looks something like this:

School DivisionStudent enrollmentMonth
A10Oct
B12Oct
C15Nov
C10Dec

 

When I create a simple calculate measure such as this:

 

 

Students enrolled = 
CALCULATE(SUM('Table'[Student enrollment]),'Table'[Month] = "Oct")

 

 

I get the correct result, which in this example will be = 22

 

But when I create a variable to store the Sum aggregate, I get a different result that is without any filter specified within Calculate function. For example this DAX:

 

 

Students enrolled = 
VAR _studentsenrolled = SUM('Table'[Student enrollment])
RETURN
CALCULATE(_studentsenrolled,'Table'[Month] = "Oct")

 

 

In this example, it gives me the result as 47. Which is incorrect as it doesn't seem to be taking into account the filter parameter of Calculate function.

Can anyone help clarify what am I missing?

 

Thanks in advance!

  • Echoing Greg_Deckler on this one, but with a little more information. Variables are calculated only once and then stored only once and cannot be re-used in their current context. The only exception to this is if you create a variable that is a table: 
    ie. VAR _SourceTable = FILTER(ALL('Date'[Year]),'Date'[Year]>=2010) 
    and then later on you want to further filter this source table ie. VAR _MoreFiltering = FILTER(_SourceTable, [Year] >= 2013).

    Measures are calculated in the current filter context (sometimes that's okay if you want to keep the value static) but you can't use CALCULATE() to adjust that after the fact.

5 Replies

  • Echoing Greg_Deckler on this one, but with a little more information. Variables are calculated only once and then stored only once and cannot be re-used in their current context. The only exception to this is if you create a variable that is a table: 
    ie. VAR _SourceTable = FILTER(ALL('Date'[Year]),'Date'[Year]>=2010) 
    and then later on you want to further filter this source table ie. VAR _MoreFiltering = FILTER(_SourceTable, [Year] >= 2013).

    Measures are calculated in the current filter context (sometimes that's okay if you want to keep the value static) but you can't use CALCULATE() to adjust that after the fact.

    • Erokor's avatar
      Erokor
      Resolver II

      I've been a longtime lurker, and only today decided to leave my hermit cave and start answering questions. I guess imposter syndrom has kept me from replying 🤣.  Time to go for that Superuser cape.

      • sunilbeckham's avatar
        sunilbeckham
        Helper I

        I can totally relate. Hopefully someday I'll gather enough wisdom from my lurking experience that I can leave my hermit cave too ğŸ˜…
        All the best in your quest for Superuser!