Reply
DouweMeer
Impactful Individual
Impactful Individual
Partially syndicated - Outbound

Faster method for double boolean on filter?

Got this requirement that a source file contains per postal code a categorization. However, sometimes for a particular label, all postal codes are allowed. So I created something like this:

 

minx ( 
 filter ( 'source file'
  , 'source file'[country] = 'fact'[postal]
  && if ( 'source file'[postal code] = "all" , true() , 'source file'[postal] = 'fact'[postal] )
  )
 , 'source file'[value]
 )

 

But this one seems to eat memory/ time like madness. Anyway to speed up this type of filter? 

5 REPLIES 5
Fowmy
Super User
Super User

Syndicated - Outbound

@DouweMeer 

M =
VAR __FactCountry = 'fact'[country]
VAR __FactPostal = 'fact'[postal]
VAR _FilteredTable =
    FILTER (
        SUMMARIZE (
            'source file',
            'source file'[country],
            'source file'[postal code],
            'source file'[value]
        ),
        'source file'[country] = __FactCountry
            && ( 'source file'[postal code] = "all"
            || 'source file'[postal] = __FactPostal )
    )
RETURN
    MINX ( _FilteredTable, 'source file'[value] )
Did I answer your question? Mark my post as a solution! and hit thumbs up


Subscribe and learn Power BI from these videos

Website LinkedIn PBI User Group

DouweMeer
Impactful Individual
Impactful Individual

Syndicated - Outbound

Why do you work with VAR's in this scenario? Aren't VAR's stored in memory during operation? Wouldn't that suck in capacity? 

Syndicated - Outbound

@DouweMeer 

When you use a variable, you avoid calling the field within filter on each interation, this way, you should see the code that I shared should show better performance. 

Did you try the measure?

Did I answer your question? Mark my post as a solution! and hit thumbs up


Subscribe and learn Power BI from these videos

Website LinkedIn PBI User Group

bhanu_gautam
Super User
Super User

Syndicated - Outbound

@DouweMeer Try using

MINX(
FILTER(
'source file',
'source file'[country] = 'fact'[country] &&
('source file'[postal code] = "all" || 'source file'[postal code] = 'fact'[postal])
),
'source file'[value]
)

 

This approach uses a logical OR (||) to check if the postal code is "all" or matches the postal code in the fact table, which should be more efficient than using an IF statement inside the filter.




Did I answer your question? Mark my post as a solution! And Kudos are appreciated

Proud to be a Super User!




LinkedIn






Syndicated - Outbound

My postal check isn't as easy as I made it seem. It is like: 

 

left ( 'fact'[postal] , len ( 'source'[postal] ) ) = 'source'[postal]

 

Was thinking of not having it verify the postal when the source file's info is all. 

 

Whilst writing this, I came up with another question:

https://community.fabric.microsoft.com/t5/Desktop/Order-in-which-filter-works/m-p/4405425#M1371776

Would you know that question's answer?

 

Is it faster to check on both at the same time instead of my prior of if ( equal all , true , otherwise ) ? 

avatar user

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code FABINSIDER for a $400 discount!

FebPBI_Carousel

Power BI Monthly Update - February 2025

Check out the February 2025 Power BI update to learn about new features.

March2025 Carousel

Fabric Community Update - March 2025

Find out what's new and trending in the Fabric community.

Top Solution Authors (Last Month)
Top Kudoed Authors (Last Month)