cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Helper I
Helper I

Calculate with OR/AND/NOT in filter

It's unclear to me how I can use FILTER() in a CALCULATE() function, and apply an AND / OR / NOT logic.

 

Could you please refer to an existing help page or give examples here below? Thanks.

1 ACCEPTED SOLUTION
Microsoft
Microsoft

@jesuisbenjamin

 

I’ll give an example as below. Assuming we have a table like below.

Calculate with ORANDNOT in filter_1.jpg

 

If we want to get the total sales of China on July, we can use following formula.

SalesFromChina_July = 
CALCULATE (
    SUM ( Table1[Sales] ),
    FILTER ( Table1, AND ( Table1[Country] = "China", MONTH ( Table1[Date] ) = 7 ) )
)

If we want to get the total sales of China and USA on July and August, we can use following formula.

SalesFromChina_OR_USA = 
CALCULATE (
    SUM ( Table1[Sales] ),
    FILTER ( Table1, OR ( Table1[Country] = "China", Table1[Country] = "USA" ) )
)

 

If we want to get the total sales of India on July and August, we can use following formula.

SalesFromIndia = 
CALCULATE (
    SUM ( Table1[Sales] ),
    FILTER (
        Table1,
        NOT (
            OR ( Table1[Country] = "China", Table1[Country] = "USA" )
        )
    )
)

Best Regards,

Herbert

View solution in original post

5 REPLIES 5
Microsoft
Microsoft

@jesuisbenjamin

 

I’ll give an example as below. Assuming we have a table like below.

Calculate with ORANDNOT in filter_1.jpg

 

If we want to get the total sales of China on July, we can use following formula.

SalesFromChina_July = 
CALCULATE (
    SUM ( Table1[Sales] ),
    FILTER ( Table1, AND ( Table1[Country] = "China", MONTH ( Table1[Date] ) = 7 ) )
)

If we want to get the total sales of China and USA on July and August, we can use following formula.

SalesFromChina_OR_USA = 
CALCULATE (
    SUM ( Table1[Sales] ),
    FILTER ( Table1, OR ( Table1[Country] = "China", Table1[Country] = "USA" ) )
)

 

If we want to get the total sales of India on July and August, we can use following formula.

SalesFromIndia = 
CALCULATE (
    SUM ( Table1[Sales] ),
    FILTER (
        Table1,
        NOT (
            OR ( Table1[Country] = "China", Table1[Country] = "USA" )
        )
    )
)

Best Regards,

Herbert

View solution in original post

This is very useful. However, I am trying to apply different targets to different months based on last years totals. So if month is September then add 70% to last years total, if month is October then 80 % to last year etc, then the months after that should be the same as last year. I have looked everywhere and cannot find the logic to do this. Any help would be great 

Thanks. This is very clear.

To do an AND, you should create 2 filter statements, one for each.

 

=CALCULATE([measure],filter(),filter())

 

for an OR, do it like this

 

=CALCULATE([measure],filter(table,table[col1] = "X" || table[col2] = "Y"))

note this is not overly efficient, but it is how you do it. (working on 2 columns at once can be inefficient.

 

for NOT, you can use teh NOT() function around your tests

 

Hope that helps



* Matt is a Microsoft MVP (Power BI) and author of the Power BI Book Supercharge Power BI.
Resolver II
Resolver II

Helpful resources

Announcements
secondImage

Happy New Year from Power BI

This is a must watch for a message from Power BI!

December Update

Check it Out!

Click here to read more about the December 2020 Updates!

Community Blog

Check it Out!

Click here to read the latest blog and learn more about contributing to the Power BI blog!

Get Ready for Power BI Dev Camp

Get Ready for Power BI Dev Camp

Mark your calendars and join us for our next Power BI Dev Camp!.

Top Solution Authors
Top Kudoed Authors