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

Score big with last-minute savings on the final tickets to FabCon Vienna. Secure your discount

Reply
Kelsey024
Frequent Visitor

DAX formula help for multiple IF statements

I am trying to create a calc column (“Meter Charges by Acct type and season”) to calculate out the metered charges based on consumption for a specific account depending on Account type AND season (summer or winter). I am able to work out the formula in DAX if I am passing only 1 condition statement, but I need to be able to look at my conditions and then either multiply by the winter rate or else by the summer rate for 7  different account types all in 1 column.

 

This is more or less what I want:

 

ACCT TYPE

Season

Consumption

Meter Charges by Acct type and season

DF

Winter

120

277.2

IRR-R

Winter

4

0.96

IRR

Winter

5

5.3

BLDG

Winter

34

78.54

POOL

Winter

18

19.08

FTN

Winter

57

60.42

FNT

Winter

2

2.12

 

 

     

 

 

This is what I was trying to pass:

 

Acct Type Calc Rates = IF('DETAIL WATER'[ACCT TYPE]="IRR" && ('DETAIL WATER'[Season]="Winter"),'DETAIL WATER'[CONS]*1.06,'DETAIL WATER'[CONS]*2.65)

OR

IF('DETAIL WATER'[ACCT TYPE]="POOL" && ('DETAIL WATER'[Season]="Winter"),'DETAIL    WATER'[CONS]*1.06,'DETAIL WATER'[CONS]*2.65)

OR

IF('DETAIL WATER'[ACCT TYPE]="FTN" && ('DETAIL WATER'[Season]="Winter"),'DETAIL WATER'[CONS]*1.06,'DETAIL WATER'[CONS]*2.65)

OR

IF('DETAIL WATER'[ACCT TYPE]="FNT" && ('DETAIL WATER'[Season]="Winter"),'DETAIL WATER'[CONS]*1.06,'DETAIL WATER'[CONS]*2.65)

OR

IF('DETAIL WATER'[ACCT TYPE]="BLDG" && ('DETAIL WATER'[Season]="Winter"),'DETAIL WATER'[CONS]*2.31,'DETAIL WATER'[CONS]*2.31)

OR

IF('DETAIL WATER'[ACCT TYPE]="DF" && ('DETAIL WATER'[Season]="Winter"),'DETAIL WATER'[CONS]*2.31,'DETAIL WATER'[CONS]*2.31)

OR

IF('DETAIL WATER'[ACCT TYPE]="IRR-R" && ('DETAIL WATER'[Season]="Winter"),'DETAIL WATER'[CONS]*0.24,'DETAIL WATER'[CONS]*0.24)

 

I was able to get Power BI to accept the syntax if I used a logical like || between each statement, but then it only returned 1’s and 0’s and not the calculation.

 

What do I need to do in order to make this work? Is it possible?

 

Thank you!

-Kelsey 

2 ACCEPTED SOLUTIONS
MarkS
Resolver IV
Resolver IV

Hi @Kelsey024

I think that this will do what you are looking for 

Meter Charges by Acct type and Season = 
'DETAIL WATER'[Consumption]
    * IF (
        'DETAIL WATER'[Season] = "Winter",
        IF (
            'DETAIL WATER'[Acct Type] = "IRR"
                || 'DETAIL WATER'[Acct Type] = "POOL"
                || 'DETAIL WATER'[Acct Type] = "FTN"
                || 'DETAIL WATER'[Acct Type] = "FNT",
            1.06,
            IF (
                'DETAIL WATER'[Acct Type] = "BLDG"
                    || 'DETAIL WATER'[Acct Type] = "DF",
                2.31,
                .24
            )
        ),
        IF (
            'DETAIL WATER'[Acct Type] = "IRR"
                || 'DETAIL WATER'[Acct Type] = "POOL"
                || 'DETAIL WATER'[Acct Type] = "FTN"
                || 'DETAIL WATER'[Acct Type] = "FNT",
            2.65,
            IF (
                'DETAIL WATER'[Acct Type] = "BLDG"
                    || 'DETAIL WATER'[Acct Type] = "DF",
                2.31,
                .24
            )
        )
    )

However I would suggest creating a rates table and using the lookup function.  Rate Table like the following related to the other table by ACCT Type

 

 RateTable.PNG

 

Then the calculated column formula 

Rate = LOOKUPVALUE(Rates[Rate],Rates[Season],'DETAIL WATER'[Season],Rates[ACCT Type],'DETAIL WATER'[Acct Type])

would get the correct rates and is easier to maintain if the rates change.

View solution in original post

Phil_Seamark
Microsoft Employee
Microsoft Employee

HI @Kelsey024

 

Here is an alternative.  Personally I'd put the weightings in a different table and join to that for the calcs

 

Acct Type Calc Rates = 

'DETAIL WATER'[CONS] * 
    SWITCH(
        TRUE() ,
        'DETAIL WATER'[ACCT TYPE]="IRR" && 'DETAIL WATER'[Season]="Winter" , 1.06 ,
        'DETAIL WATER'[ACCT TYPE]="IRR" , 2.65 ,
        ----------------------------------------------------------------------------
        'DETAIL WATER'[ACCT TYPE]="FTN" && 'DETAIL WATER'[Season]="Winter" , 1.06 ,
        'DETAIL WATER'[ACCT TYPE]="FTN" , 2.65 ,
        ----------------------------------------------------------------------------
        'DETAIL WATER'[ACCT TYPE]="FNT" && 'DETAIL WATER'[Season]="Winter" , 1.06 ,
        'DETAIL WATER'[ACCT TYPE]="FNT" , 2.65 ,
        ----------------------------------------------------------------------------
        'DETAIL WATER'[ACCT TYPE]="BLDG" && 'DETAIL WATER'[Season]="Winter" , 2.31 ,
        'DETAIL WATER'[ACCT TYPE]="BLDG" , 2.31 ,
        ----------------------------------------------------------------------------
        'DETAIL WATER'[ACCT TYPE]="DF" && 'DETAIL WATER'[Season]="Winter" , 2.31 ,
        'DETAIL WATER'[ACCT TYPE]="DF" , 2.31 ,        
        ----------------------------------------------------------------------------
        'DETAIL WATER'[ACCT TYPE]="IRR-R" && 'DETAIL WATER'[Season]="Winter" , 0.24 ,
        'DETAIL WATER'[ACCT TYPE]="IRR-R" , 0.24  ,
        1
        )

To learn more about DAX visit : aka.ms/practicalDAX

Proud to be a Datanaut!

View solution in original post

4 REPLIES 4
Tatyasaheb
New Member

 

Below if and code is not working in adding the column : need help

 

Break Excceded = IF(AND('GCC Break'[Unavailable Code]="Break",'GCC Break'[Unavailable Time]>30.5),1,IF(AND('GCC Break'[Unavailable Code]="Lunch",'GCC Break'[Unavailable Code]>30.5),1,IF(AND('GCC Break'[Unavailable Code]="Personal",'GCC Break'[Unavailable Time]>6.5),1,0)))

 

and below is the error:

DAX comparison operations do not support comparing values of type Text with values of type Number. Consider using the VALUE or FORMAT function to convert one of the values.

Phil_Seamark
Microsoft Employee
Microsoft Employee

HI @Kelsey024

 

Here is an alternative.  Personally I'd put the weightings in a different table and join to that for the calcs

 

Acct Type Calc Rates = 

'DETAIL WATER'[CONS] * 
    SWITCH(
        TRUE() ,
        'DETAIL WATER'[ACCT TYPE]="IRR" && 'DETAIL WATER'[Season]="Winter" , 1.06 ,
        'DETAIL WATER'[ACCT TYPE]="IRR" , 2.65 ,
        ----------------------------------------------------------------------------
        'DETAIL WATER'[ACCT TYPE]="FTN" && 'DETAIL WATER'[Season]="Winter" , 1.06 ,
        'DETAIL WATER'[ACCT TYPE]="FTN" , 2.65 ,
        ----------------------------------------------------------------------------
        'DETAIL WATER'[ACCT TYPE]="FNT" && 'DETAIL WATER'[Season]="Winter" , 1.06 ,
        'DETAIL WATER'[ACCT TYPE]="FNT" , 2.65 ,
        ----------------------------------------------------------------------------
        'DETAIL WATER'[ACCT TYPE]="BLDG" && 'DETAIL WATER'[Season]="Winter" , 2.31 ,
        'DETAIL WATER'[ACCT TYPE]="BLDG" , 2.31 ,
        ----------------------------------------------------------------------------
        'DETAIL WATER'[ACCT TYPE]="DF" && 'DETAIL WATER'[Season]="Winter" , 2.31 ,
        'DETAIL WATER'[ACCT TYPE]="DF" , 2.31 ,        
        ----------------------------------------------------------------------------
        'DETAIL WATER'[ACCT TYPE]="IRR-R" && 'DETAIL WATER'[Season]="Winter" , 0.24 ,
        'DETAIL WATER'[ACCT TYPE]="IRR-R" , 0.24  ,
        1
        )

To learn more about DAX visit : aka.ms/practicalDAX

Proud to be a Datanaut!

MarkS
Resolver IV
Resolver IV

Hi @Kelsey024

I think that this will do what you are looking for 

Meter Charges by Acct type and Season = 
'DETAIL WATER'[Consumption]
    * IF (
        'DETAIL WATER'[Season] = "Winter",
        IF (
            'DETAIL WATER'[Acct Type] = "IRR"
                || 'DETAIL WATER'[Acct Type] = "POOL"
                || 'DETAIL WATER'[Acct Type] = "FTN"
                || 'DETAIL WATER'[Acct Type] = "FNT",
            1.06,
            IF (
                'DETAIL WATER'[Acct Type] = "BLDG"
                    || 'DETAIL WATER'[Acct Type] = "DF",
                2.31,
                .24
            )
        ),
        IF (
            'DETAIL WATER'[Acct Type] = "IRR"
                || 'DETAIL WATER'[Acct Type] = "POOL"
                || 'DETAIL WATER'[Acct Type] = "FTN"
                || 'DETAIL WATER'[Acct Type] = "FNT",
            2.65,
            IF (
                'DETAIL WATER'[Acct Type] = "BLDG"
                    || 'DETAIL WATER'[Acct Type] = "DF",
                2.31,
                .24
            )
        )
    )

However I would suggest creating a rates table and using the lookup function.  Rate Table like the following related to the other table by ACCT Type

 

 RateTable.PNG

 

Then the calculated column formula 

Rate = LOOKUPVALUE(Rates[Rate],Rates[Season],'DETAIL WATER'[Season],Rates[ACCT Type],'DETAIL WATER'[Acct Type])

would get the correct rates and is easier to maintain if the rates change.

Both of these worked really well! I think you are right, it will be much easier for any future metered changes to use the lookupvalue function with a seperate table.

Thank you so much for your help! 

Helpful resources

Announcements
August Power BI Update Carousel

Power BI Monthly Update - August 2025

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

August 2025 community update carousel

Fabric Community Update - August 2025

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