[a] <= [b] is true when a is smaller or equal, null when either side is missing, the same as SQL's <=. When it feeds an IIF, remember that IIF returns null for a null test, while CASE falls through 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
Rows 2, 3 and 8 pass; rows 6 and 7 are null.
a
b
Result
7
2
false
−7
2
true
2
5
true
9
4
false
5
3
false
2
null
1
null
−3
−2
true
✓ 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
true
East
North
true
North
North
true
south
East
false
East
null
West
null
East
South
true
east
east
true
✓ 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
no
no
no
−7
2
yes
yes
yes
2
5
yes
yes
yes
9
4
no
no
no
5
3
no
no
no
2
null
no
null
1
null
no
null
−3
−2
yes
yes
yes
✓ 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.
How do I keep rows where b is missing?
Decide what a missing b means: [a] <= IFNULL([b], 0); in SQL, a <= coalesce(b, 0).