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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Anonymous
Not applicable

Can I use a conditional filter expression?

I'm trying to create a dynamic measure that can be configured using a drop-down. This way someone can choose the period over which to sum sales. I already got this working with Month / MQT / MAT, by using the following measure:

 

# Sales = CALCULATE(
     [Total Sales], 
     DATESINPERIOD(
         'Date'[Date];
        MAX('Date'[Date]);
        SELECTEDVALUE(Period[offset]);
        MONTH
    )
)
Now I'm looking to add a YTD. Unfortunataly I can't use the DATESINPERIOD because of the fact that the amount of months changes on regular basis. I'm looking for a way to conditionally choose between DATESYTD & DATESINPERIOD. Unfortunataly it seems I can't use an IF statement like this, since that will result in an error "A function 'FILTER' has been used in a True/False expression that is used as a table filter expression". Do I need to do this differently?
 
IF(
   condition = true;
   DATESYTD(....);
   DATESINPERIOD(...);
)
1 ACCEPTED SOLUTION
d_gosbell
Super User
Super User


@Anonymous wrote:
Unfortunataly it seems I can't use an IF statement like this, since that will result in an error "A function 'FILTER' has been used in a True/False expression that is used as a table filter expression". Do I need to do this differently?

Both DATESYTD and DATESINPERIOD return tables and unfortunately you can't return a table value from the IF function. So you will need to put your calculate inside the IF so that it is returning a scalar value.

 

eg.

 

# Sales = 
IF(
  condition = true;
    CALCULATE(
       [Total Sales], 
       DATESYTD( ... )
  );
  CALCULATE(
       [Total Sales], 
       DATESINPERIOD( ... )
  );
)

View solution in original post

1 REPLY 1
d_gosbell
Super User
Super User


@Anonymous wrote:
Unfortunataly it seems I can't use an IF statement like this, since that will result in an error "A function 'FILTER' has been used in a True/False expression that is used as a table filter expression". Do I need to do this differently?

Both DATESYTD and DATESINPERIOD return tables and unfortunately you can't return a table value from the IF function. So you will need to put your calculate inside the IF so that it is returning a scalar value.

 

eg.

 

# Sales = 
IF(
  condition = true;
    CALCULATE(
       [Total Sales], 
       DATESYTD( ... )
  );
  CALCULATE(
       [Total Sales], 
       DATESINPERIOD( ... )
  );
)

Helpful resources

Announcements
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.