Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Kashinoda
Advocate I
Advocate I

Conditional statements within a CALCULATE filter

Hello,

I have a simple measure which intersects my fact table with several disconnected tables and works without issue:

 

Intersect = 
VAR varInter1 = INTERSECT(ALL('Fact'[County]),  VALUES ( 'Treatas1'[Values] ))
VAR varInter2 = INTERSECT(ALL('Fact'[Town]),  VALUES ( 'Treatas2'[Values] ))
RETURN
CALCULATE ( sum('Fact'[Amount]),varInter1, varInter2 ) 

 

Output:

Kashinoda_0-1645173417315.png

I would like to dynamically control which types are used via a slicer, making the INTERSECT dynamic.

Kashinoda_1-1645173727026.png

The code I attempted does not work as CALCULATE is expecting a column filter.

 

Intersect = 
VAR varSelect1 = IF (HASONEVALUE(Treatas1[Type]), VALUES(Treatas1[Type]))
VAR varInter1 = SWITCH ( TRUE (), varSelect1 = "County", INTERSECT(ALL('Fact'[County]),  VALUES ( 'Treatas1'[Values] )), 
                                 varSelect1 = "Town", INTERSECT(ALL('Fact'[Town]),  VALUES ( 'Treatas1'[Values] )),
                                 varSelect1 = "Road", INTERSECT(ALL('Fact'[Road]),  VALUES ( 'Treatas1'[Values] )))

VAR varSelect2 = IF (HASONEVALUE(Treatas2[Type]), VALUES(Treatas2[Type]))
VAR varInter2 = SWITCH ( TRUE (), varSelect2 = "County", INTERSECT(ALL('Fact'[County]),  VALUES ( 'Treatas2'[Values] )), 
                                 varSelect2 = "Town", INTERSECT(ALL('Fact'[Town]),  VALUES ( 'Treatas2'[Values] )),
                                 varSelect2 = "Road", INTERSECT(ALL('Fact'[Road]),  VALUES ( 'Treatas2'[Values] )))
RETURN
CALCULATE ( sum('Fact'[Amount]), varInter1, varInter2 ) 

 

 

I could obviously use a conditional statement before CALCULATE for this example, but the final product will be using up to 10 types with up to 4 combinations which would be an enormous bit of code.

 

3 REPLIES 3
v-yanjiang-msft
Community Support
Community Support

Hi @Kashinoda ,

I think the error is caused of the SWITCH function can't return a column or table, but only a value.

Best Regards,
Community Support Team _ kalyj

amitchandak
Super User
Super User

@Kashinoda , Try if this can work

 

Intersect =
VAR varSelect1 = IF (HASONEVALUE(Treatas1[Type]), VALUES(Treatas1[Type]))
VAR varInter1 = SWITCH ( TRUE (), varSelect1 = "County", filter('Fact', 'Fact'[County] in INTERSECT(ALL('Fact'[County]), VALUES ( 'Treatas1'[Values] ))),
varSelect1 = "Town", filter('Fact', 'Fact'[Town] in INTERSECT(ALL('Fact'[Town]), VALUES ( 'Treatas1'[Values] ))),
varSelect1 = "Road", filter('Fact', 'Fact'[Road] in INTERSECT(ALL('Fact'[Road]), VALUES ( 'Treatas1'[Values] ))))

VAR varSelect2 = IF (HASONEVALUE(Treatas2[Type]), VALUES(Treatas2[Type]))
VAR varInter2 = SWITCH ( TRUE (), varSelect2 = "County", filter('Fact', 'Fact'[County] in INTERSECT(ALL('Fact'[County]), VALUES ( 'Treatas2'[Values] ))),
varSelect2 = "Town", filter('Fact', 'Fact'[Town] in IINTERSECT(ALL('Fact'[Town]), VALUES ( 'Treatas2'[Values] ))),
varSelect2 = "Road", filter('Fact', 'Fact'[Road] in INTERSECT(ALL('Fact'[Road]), VALUES ( 'Treatas2'[Values] ))))
RETURN
CALCULATE ( sum('Fact'[Amount]), varInter1, varInter2 )

Thanks for your reply, unfortunately this errors with "The expression refers to multiple columns. Multiple columns cannot be converted to a scalar value".

I uploaded the PBIX here: https://drive.google.com/file/d/1j9watMGIEvBB82nMzP0h3bxJolUD6twl

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

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

Top Solution Authors