Forum Discussion
DAX IF() not working as expected.
I am new to Power BI. I am trying to use the IF(<logical_test>,<value_if_true>[, <value_if_false>]) function.
This is my code:
But I get a syntax error for "timeFromQuoting", error is: "unexpected expression 'timeFromQuoting'".
However, when I replace the variable for the <value_if_true> parameter, with a hardcoded value, the error seems to disappear.
example if I do something like this:
Can anyone tell me why this would be happenning?
PS. I also think this related to my previous post: DAX-IF-no-longer-working
- Anonymous6 years ago
Yes i think it is the same solution from your other post.
In the first case you got the same problem that Power BI thinks "0,timeFromQuoting" is one expression. In the second example you have timeFromPending<0,0 (international timeFromPending<0.0) and and only the true case timeFromPending (because the real true case 0 is in the inequality statement).
So again try the second "," should work
var timeFromPending = DATEDIFF(RequestWorkflowHistory[Quote Pending Max], RequestWorkflowHistory[Quoted], MINUTE) / 60var timeFromQuoting = DATEDIFF(RequestWorkflowHistory[Quoting], RequestWorkflowHistory[Quoted], MINUTE) / 60var QuotingTime = IF(timeFromPending<0,, timeFromQuoting, timeFromPending)return QuotingTimeBest regards
Bruening
- When I wrote my first book, I had some of these issues when formulas were checked with international settings and I found that putting spaces after my commas in my formulas tended to fix the issues. Basically what was going on from what I could tell is that DAX ends up thinking it is a decimal point because everything is numeric. but when you put a space in, DAX wises up and realizes it is not just all one decimal number.
Spaces BEFORE the comma seems to do the trick.
So instead of:
IF(_time < 0, BLANK(), _time)
you would make it:
IF(_time < 0 , BLANK(), _time)
8 Replies
- AnonymousNot applicable
Yes i think it is the same solution from your other post.
In the first case you got the same problem that Power BI thinks "0,timeFromQuoting" is one expression. In the second example you have timeFromPending<0,0 (international timeFromPending<0.0) and and only the true case timeFromPending (because the real true case 0 is in the inequality statement).
So again try the second "," should work
var timeFromPending = DATEDIFF(RequestWorkflowHistory[Quote Pending Max], RequestWorkflowHistory[Quoted], MINUTE) / 60var timeFromQuoting = DATEDIFF(RequestWorkflowHistory[Quoting], RequestWorkflowHistory[Quoted], MINUTE) / 60var QuotingTime = IF(timeFromPending<0,, timeFromQuoting, timeFromPending)return QuotingTimeBest regards
Bruening
- TBardien
Helper I
Anonymous
Yes, It is the same issue. Thank You.
Greg_DecklerWhen I add a second comma in the IF() after the logical_test, it seems to work.
Doing this: var QuotingTime = IF(timeFromPending<0,, timeFromQuoting, timeFromPending)
Anonymousseems to think its some numer/regional setting, but we can't seem to figure out what exactly it is.
- Greg_Deckler
Community Champion
When I wrote my first book, I had some of these issues when formulas were checked with international settings and I found that putting spaces after my commas in my formulas tended to fix the issues. Basically what was going on from what I could tell is that DAX ends up thinking it is a decimal point because everything is numeric. but when you put a space in, DAX wises up and realizes it is not just all one decimal number.
- Greg_Deckler
Community Champion
So can you post some sample data so that we can try to replicate this easily?- TBardien
Helper I
Greg_Deckler
It does return if I remove the IF(). However, im going to need to be able to use the IF().
I uninstalled PowerBI and reinstalled, it still did not work.
I also downloaded the PowerBI sample "Sales & Returns Sample v201912Sales & Returns Sample v201912" and I got the error there too for the code:
Product Returns Top 3 = IF([ProductR Top N]<4,[Returns],0)
The syntax for '[Returns]' is incorrect. (DAX(IF([ProductR Top N]<4.[Returns],0))).This makes me think there is a bigger issue.
- Greg_Deckler
Community Champion
There is something not correct in your first comma. The error is showing that it thinks it is a period. Also, you can tell that there is a difference in your two commas in that IF statement. Did you copy and paste this code from somewhere? Thinking that first comma is some extended character set. Try replacing that comma with a normal comma.