# NOTDAX Operator

NOT inverts the state of a boolean expression, transforming FALSE to TRUE, or TRUE to FALSE.
NOT is an operator and not a function. Because of the precedence rules, the expression that follows NOT might be evaluated in an unexpected way if you think that NOT is a function.

EVALUATE
{
-- NOT evaluates the result of the multiplication
( "NOT ( FALSE ) * FALSE", "" & NOT ( FALSE ) * FALSE ),
-- NOT evaluates the result of the multiplication
( "NOT ( FALSE * FALSE )", "" & NOT ( FALSE * FALSE ) ),
-- NOT evaluates only the first FALSE function
( "( NOT FALSE ) * FALSE", "" & ( NOT FALSE ) * FALSE )
}
Value1 Value2
NOT ( FALSE ) * FALSE TRUE
NOT ( FALSE * FALSE ) TRUE
( NOT FALSE ) * FALSE 0

The following example has the purpose of clarifying that NOT is an operator and not a function.

DEFINE
TABLE 'NOT IN' =
CROSSJOIN (
{ FALSE, TRUE },
SELECTCOLUMNS ( { 0, 1, 2 }, "Expression #", [Value] ),
SELECTCOLUMNS (
{ ( FALSE, FALSE ), ( FALSE, TRUE ), ( TRUE, TRUE ) },
"List Item 1", [Value1],
"List Item 2", [Value2]
)
),
"Expression",
SWITCH (
[Expression #],
0,  "NOT ( " & [Value] & " ) IN …",
1,  "NOT ( " & [Value] & " IN … )",
2,  "( NOT " & [Value] & " ) IN …"
),
"Result",
SWITCH (
[Expression #],
0, NOT ( [Value] ) IN { [List Item 1], [List Item 2] },
1, NOT ( [Value] IN { [List Item 1], [List Item 2] } ),
2, ( NOT [Value] ) IN { [List Item 1], [List Item 2] }
)
)

EVALUATE
SELECTCOLUMNS (
VALUES ( 'NOT IN'[Expression] ),
"Expression", 'NOT IN'[Expression],
"…{ FALSE, FALSE }",
CALCULATE (
VALUES ( 'NOT IN'[Result] ),
'NOT IN'[List Item 1] = FALSE,
'NOT IN'[List Item 2] = FALSE
),
"…{ TRUE, TRUE }",
CALCULATE (
VALUES ( 'NOT IN'[Result] ),
'NOT IN'[List Item 1] = TRUE,
'NOT IN'[List Item 2] = TRUE
),
"…{ FALSE, TRUE }",
CALCULATE (
VALUES ( 'NOT IN'[Result] ),
'NOT IN'[List Item 1] = FALSE,
'NOT IN'[List Item 2] = TRUE
)
)
ORDER BY […{ FALSE, FALSE }] ASC

Expression …{ FALSE, FALSE } …{ TRUE, TRUE } …{ FALSE, TRUE }
NOT ( FALSE ) IN … false true false
NOT ( FALSE IN … ) false true false
( NOT FALSE ) IN … false true true
NOT ( TRUE ) IN … true false false
NOT ( TRUE IN … ) true false false
( NOT TRUE ) IN … true false true

Last update: Jan 31, 2023     » Show contributors

Contributors: Alberto Ferrari, Marco Russo, Kenneth Barber, Martin de la Herran

# Context Transition

This function performs a Context Transition if called in a Row Context. Click to read more.

# Row Context

This expression is executed in a Row Context. Click to read more.

# Not recommended

The use of this function is not recommended. See Remarks and Related functions for alternatives.

# Not recommended

The use of this parameter is not recommended.

# Deprecated

This function is deprecated. Jump to the Alternatives section to see the function to use.

# Volatile

A volatile function may return a different result every time you call it, even if you provide the same arguments. Click to read more.

# Deprecated

This parameter is deprecated and its use is not recommended.

# DirectQuery compatibility

Limitations are placed on DAX expressions allowed in measures and calculated columns.
The state below shows the DirectQuery compatibility of the DAX function.

### Contribute

Want to improve the content of NOT? Did you find any issue?
Please, report it us! All submissions will be evaluated for possible updates of the content.