Forum Discussion

Pedro77000's avatar
Pedro77000
Frequent Visitor
6 years ago
Solved

Calculate an average with date filter

Hi Everyone,

 

I have a problem of averaging according to a context. I have a data model with a fact table and a "Date" dimension table

Indeed, I want to calculate the average based on the month selected to calculate the average over the last 12 months (12 rolling months). Look at the following table:

 

13/10/20196
21/10/20193
01/09/201915
14/09/20191
20/11/20193
27/11/20193
29/11/20196
30/11/20191


Par exemple :
- For example, the average I want to have when I select September  is: (15 + 1)/ 1= 16

- For example, the average I want to have when I select October is: (16 + 9)/2 = 12,5

- For example, the average I want to have when I select November  is: (16 + 9+13)/3 = 12,66

 

For information, the relationship between my fact table and the "Date" dimension is based on a "Date" field.

 

Thank you very much in advance !!
  • Hi Pedro77000 ,

     

    We can create a measure as below.

    Measure =
    VAR SUMA =
        CALCULATE (
            SUM ( 'Table'[value] ),
            FILTER ( ALL ( 'Table' ), 'Table'[date] <= MAX ( 'date'[Date] ) )
        )
    VAR COUNTM =
        CALCULATE (
            DISTINCTCOUNT ( 'Table'[YearMOnth] ),
            FILTER ( ALL ( 'Table' ), 'Table'[date] <= MAX ( 'date'[Date] ) )
        )
    RETURN
        DIVIDE ( SUMA, COUNTM )
    

     

    Also you can find the pbix as attached.

     

  • Hi Pedro77000 ,

     

    To use ALLEXCEPT instead of ALL should work.

     

    FILTER ( ALLEXCEPT ( 'Table','Table'[region] ), 'Table'[date] <= MAX ( 'date'[Date] ) )

     

    If it doesn't meet your requirement,  Kindly share your sample data and excepted result to me if you don't have any Confidential Information. Please upload your files to One Drive and share the link here.

     

5 Replies

  • v-frfei-msft's avatar
    v-frfei-msft
    Community Support

    Hi Pedro77000 ,

     

    We can create a measure as below.

    Measure =
    VAR SUMA =
        CALCULATE (
            SUM ( 'Table'[value] ),
            FILTER ( ALL ( 'Table' ), 'Table'[date] <= MAX ( 'date'[Date] ) )
        )
    VAR COUNTM =
        CALCULATE (
            DISTINCTCOUNT ( 'Table'[YearMOnth] ),
            FILTER ( ALL ( 'Table' ), 'Table'[date] <= MAX ( 'date'[Date] ) )
        )
    RETURN
        DIVIDE ( SUMA, COUNTM )
    

     

    Also you can find the pbix as attached.

     

    • Pedro77000's avatar
      Pedro77000
      Frequent Visitor

      Good morning v-frfei-msft !!

       

      Thank you very much for this reply.

      The solution works well. But this average I cannot have it by region, I believe because of the filter ALL.

      The average for the total is good but when I split by region, it's the same overall average that appears in front of each region.

       

      • v-frfei-msft's avatar
        v-frfei-msft
        Community Support

        Hi Pedro77000 ,

         

        To use ALLEXCEPT instead of ALL should work.

         

        FILTER ( ALLEXCEPT ( 'Table','Table'[region] ), 'Table'[date] <= MAX ( 'date'[Date] ) )

         

        If it doesn't meet your requirement,  Kindly share your sample data and excepted result to me if you don't have any Confidential Information. Please upload your files to One Drive and share the link here.