Skip to main content

Built-in operators

Crosswalk ships with 48 operators. Every one is included by default; Your own operators shows how to choose a subset or add your own.

An operator's inputs are filled in the order you link them, and any input can be a constant typed into the inspector instead. When an input has no value, most operators produce nothing too, and the target field is left out. See How a map runs.

Text​

OperatorIdInputsWhat it does
ab+ Concatenatetext.concat1 or moreJoins its inputs into one piece of text, in input order.
AB Uppercasetext.upper1The text in capitals.
ab Lowercasetext.lower1The text in lower case.
⎵ Trimtext.trim1The text without spaces at either end.
len Lengthtext.length1How many characters the text has.
◧ Lefttext.lefttext, countThe first count characters.
◨ Righttext.righttext, countThe last count characters.
sub Substringtext.substringtext, start, length (optional)Takes length characters from a 0-based start, or the rest of the text when length is left out.
⇄ Replacetext.replacetext, find, replace withReplaces every occurrence of find with replace with. An empty find leaves the text as it is.

Math​

OperatorIdInputsWhat it does
+ Addmath.add2 or moreThe sum of its inputs.
− Subtractmath.subtract2The first input minus the second.
× Multiplymath.multiply2 or moreThe product of its inputs.
÷ Dividemath.divide2The first input divided by the second. Dividing by zero is an error.
% Remaindermath.modulo2The remainder when the first input is divided by the second.
≈ Roundmath.roundvalue, decimals (optional)Rounds to decimals places (0 if left out), with halves rounded away from zero: 2.5 gives 3 and -2.5 gives -3.
|x| Absolutemath.abs1The number without its sign.
min Smallestmath.min2 or moreThe smallest of its inputs.
max Largestmath.max2 or moreThe largest of its inputs.

Logic​

OperatorIdInputsWhat it does
= Equalslogic.equal2True when the inputs are equal: as numbers if both are numeric, otherwise as text.
≠ Not equallogic.notEqual2True when the inputs differ.
> Greater thanlogic.greaterThan2True when the first input is greater than the second.
≥ At leastlogic.greaterOrEqual2True when the first input is at least the second.
< Less thanlogic.lessThan2True when the first input is less than the second.
≤ At mostlogic.lessOrEqual2True when the first input is at most the second.
∧ Andlogic.and2 or moreTrue when every input is true.
∨ Orlogic.or2 or moreTrue when any input is true.
! Notlogic.not1The opposite of its input.
1? Is a numberlogic.isNumber1True when the input is a number, or text holding a plain decimal number such as "12.5" (not "0x10").
∃ Existslogic.exists1True when the input has a value. null counts as a value.

Date​

OperatorIdInputsWhat it does
now Todaydate.today0Today's date, in UTC, such as 2026-03-04.
rd Read datedate.parsetext, patternReads a date written another way, such as 04/03/2026 with the pattern dd/MM/yyyy, as 2026-03-04. The pattern uses yyyy, yy, MMM, MM, M, dd, d, HH, mm and ss; anything else must match exactly.
fmt Format datedate.formatdate, patternWrites a date with a pattern, such as dd MMM yyyy for 04 Mar 2026. The pattern uses yyyy, yy, MMM, MM, M, dd, d, HH, mm and ss.
+dt Add to datedate.adddate, amount, unitAdds whole days, months or years to a date; a negative amount goes back. The 31st plus a month stops at the end of a shorter month.
Δdt Date differencedate.difffrom, to, unitWhole days, months or years from one date to another, such as an age in years from a date of birth to today.
dt. Part of datedate.partdate, partOne part of a date as a number: year, month, day, weekday (Monday is 1), hour, minute or second.

Convert​

OperatorIdInputsWhat it does
→1 To numberconvert.toNumber1Reads the input as a number. Text that isn't a plain decimal number is an error.
→a To textconvert.toText1Reads the input as text.
→? To true/falseconvert.toBoolean1Reads true, false, their text, or a number (0 is false) as true or false.
tbl Look upconvert.lookupvalue, table, if not found (optional)Finds the value in a table, such as { "M": "Male" }, and gives what it maps to. With no match it gives if not found, or leaves the field out.

Flow​

OperatorIdInputsWhat it does
⇥ Only ifflow.onlyIfcondition, valuePasses the value through when the condition is true; otherwise the output is left out.
?: If / elseflow.ifElsecondition, then, elseThe then input when the condition is true, otherwise the else input.
?? First offlow.firstOf1 or moreThe first input that has a value and isn't null.

Aggregate​

OperatorIdInputsWhat it does
Σ Sumaggregate.sum1Adds up the input across every item.
# Countaggregate.count1How many items have a value for the input.
x̄ Averageaggregate.average1The mean of the input across every item.
↓ Minimumaggregate.min1The smallest value of the input across every item.
↑ Maximumaggregate.max1The largest value of the input across every item.
Σab Joinaggregate.join1Joins the input from every item into one piece of text.

Aggregate operators take a scope: the repeating record they aggregate over, such as PhoneCalls[]. In the editor, drag the record onto the operator to set it.