[a] > [b] is true when a is larger, false when it isn't, null when either is missing, as in SQL. The trap sits around it: IIF([a] > [b], ...) returns null for those rows, while a SQL CASE sends them to ELSE.
Updated · Checked on the xmetric engine
What is the syntax?
a > b
a, b
two values of the same kind: numbers, strings, dates or booleans.
Returns true, false, or null when either side is null.
What does it return, and what is the SQL?
Each example runs on the same 8 sample rows twice: the Tableau formula on the xmetric engine, and the SQL in DuckDB.
Which rows pass a > b?
Tableau
[a]>[b]
SQL (DuckDB)
SELECT a > b AS result
FROM input
ORDERBY id
Row 2 (-7 > 2) is false; rows 6 and 7 are null.
a
b
Result
7
2
true
−7
2
false
2
5
false
9
4
true
5
3
true
2
null
1
null
−3
−2
false
✓ The Tableau formula and the SQL return the same 8 rows.
How does > compare two text fields?
Tableau
[s]>[t]
SQL (DuckDB)
SELECTlower(s) >lower(t) AS result
FROM input
ORDERBY id
Case is ignored, so row 1 (West, west) compares as equal text.
s
t
Result
West
west
false
East
North
false
North
North
false
south
East
true
East
null
West
null
East
South
false
east
east
false
✓ The Tableau formula and the SQL return the same 8 rows.
Where does a straight translation go wrong?
Common mistake
Why does the CASE return "no" where Tableau returns null?
IIF returns null when its test is null (row 6 has no a, row 7 no b). A SQL CASE sends a null test to ELSE. Add a WHEN NOT branch so nulls fall through to null.
Tableau
IIF([a]>[b], 'yes', 'no')
Tempting SQL
SELECTCASEWHEN a > b THEN'yes'ELSE'no'ENDAS result
FROM input
ORDERBY id
SQL that matches
SELECTCASEWHEN a > b THEN'yes'WHENNOT (a > b) THEN'no'ENDAS result
FROM input
ORDERBY id
a
b
Tableau
Tempting SQL
SQL that matches
7
2
yes
yes
yes
−7
2
no
no
no
2
5
no
no
no
9
4
yes
yes
yes
5
3
yes
yes
yes
2
null
no
null
1
null
no
null
−3
−2
no
no
no
✓ The SQL that matches returns the Tableau result on every row; the marked cells are where the tempting SQL differs.
How do I write it in Snowflake or BigQuery?
The first example, written for each warehouse from its documentation. These are not run here; DuckDB is.
Snowflake
SELECTLOWER(s) >LOWER(t) AS result
FROM input
ORDERBY id
The comparison returns null, not false, in Tableau and in SQL. A filter drops those rows, and IIF returns null for them.
Is the string comparison case sensitive?
On an extract or a file source, no: Tableau's default string collation ignores case, so West and west compare as equal. On a live connection the database's collation decides. DuckDB compares case sensitively, so lower both sides to match an extract.