Skip to main content

Transform node

Transform

What it does​

The Transform node builds each output row from the incoming row: it maps fields to output columns, renames them, and fills columns with expressions such as CONCAT(first_name, ' ', last_name). It is the most used node in the flow builder.

The output row holds the mapped columns only. A Transform with no mappings passes rows through unchanged.

Transform (Legacy)​

Some flows contain a Transform (Legacy) node. It is configured and runs exactly as a Transform does, with the same ports. It is not in the component browser. To replace one:

  1. Add a Transform node beside it.
  2. Recreate the same field mappings and custom fields.
  3. Move the incoming and outgoing edges to the new node.
  4. Run the flow, compare the output, then delete the legacy node.

When to use​

  • The target expects different columns from the source: renamed, fewer or extra.
  • A value is derived from other fields, such as fullName or LOWER(country_code).
  • Rows need light clean-up before a Load: a dedupe on an external id, a simple filter, or a count per group.

Configure​

The node panel​

  • Status: says the node is ready to run, or lists what needs fixing.
  • Node name: the name shown on the card.
  • Field mapping: how many mappings and custom fields the node has, and Configure Field Mapping, which opens the mapping editor.
  • Advanced: notifications. It starts closed.

The mapping editor​

Select the node and press Configure Field Mapping.

Input and output​

  • Input Node and Action: the node and action the input fields come from. When the upstream node has its own action, the Transform follows it and the picker is read-only. Set the action on that node.
  • Output Actions: the action the output columns come from, usually the downstream Load's action, with the same rule.
  • Output: the fields the target's write can fill. A read-only field a mapping writes stays listed, marked Read-only. Show read-only fields lists the rest.

After you clone a pipeline, point the cloned Source and Load at their actions. The Transform reads their current actions.

Schema source​

Each side has a Schema Source: Connected Schema reads the fields from the node's action, and Imported Schema reads them from a sample you provide.

With Imported Schema, choose the Format: CSV, Tab Delimited, Other Delimited with a Delimiter, JSON, XML or XML Schema. Then either:

  • Import schema: choose a file.
  • Paste sample: paste the content, then select Use sample. A pasted sample can be up to 1 MB.

Both read the content the same way. The line below the buttons names the source and the field count, such as orders.json, Imported Schema, 12 fields or Pasted sample, Imported Schema, 12 fields. Replace imported schema imports again, and Clear imported schema returns the side to its connected schema.

Field mappings​

Each mapping row has an input field, an output field, and an optional expression. Without an expression, the input value is copied as it is.

  • Drag a field from the input list, or click Add.
  • Auto Map by Name pairs fields with matching names. Clear Mappings removes every row.
  • Three views: Editor to edit rows, Rows to review them read-only, and Lines to see the wiring between the two field lists.
  • Click a row's expression to open the expression editor: fields, variables and caches on the left, the expression with a live preview in the middle, and the function library on the right. A row with a problem shows a warning mark.

Custom fields add output columns with a fixed value, such as created_by = system.

Suggest mappings in the toolbar asks Milo for mappings once the input and output fields are both known. It uses AI credits. For a very wide schema, Milo leaves out fields that are neither mapped nor required first, and the assistant shows "Some fields were left out of Milo's suggestions." The Milo mapping assistant lists each suggestion with Apply suggestion, and Apply all adds every one. A suggestion marked Review matched by words or meaning rather than by name. Only fields the target's write can fill are suggested, and a source field that is already mapped is not suggested for a second field unless the build's goal sets it. While a Milo build is open, and on the Transform a saved Milo build made, a field the goal sets from a source field is suggested first, marked From the goal. Existing mappings to look at again lists mapped rows to check: a field the target sets itself, a field the goal sets from another source field, or a field another source field matches by name. Use maps the suggested source field instead. The assistant also lists required target fields that are not mapped yet, and reviews types. Suggestions are not saved until you save the Transform.

Output actions​

Applied to the mapped rows, in this order:

  • Filter output: keep rows where every rule holds. Rules compare a field with equals, not equals, contains, empty or not empty.
  • Dedupe by key: one row per value of the Key field. When duplicates: Keep first or Keep last.
  • Group by: one row per combination of the group keys, with Aggregation Count rows in a __count column.

Functions​

Expressions can use:

KindFunctions
TextUPPER, LOWER, TRIM, CONCAT, SUBSTRING, INDEX_OF, SPLIT, REPLACE, LENGTH, COALESCE
LogicEQ, GT, LT, AND, OR, NOT, IF
NumbersADD, SUB, MUL, DIV, ROUND
DatesNOW, TODAY, ADD_DAYS, ADD_MONTHS, PARSE_DATE, FORMAT_DATE
OtherUUID, VAR, SYS, CACHE_KEY, CACHE_GET, CACHE_VALUE, CACHE_HAS

Calls can be nested, as in IF(EQ(status, 'active'), 1, 0). VAR reads a Variable; the CACHE_ functions read a Cache.

Ports​

PortDirectionKindNotes
inindataRows to shape.
outoutdataThe shaped rows, in input order.
erroroutcontrolReceives the input rows when the node fails.

Salesforce targets​

When the output action writes to Salesforce, each mapping is checked against the object's field metadata as you map. A row with findings shows a shield badge with a count; hover it for the detail. Saving is never blocked.

The checks read the object from the target node's saved action. Until that node has an action with an object, the sheet says so.

CheckedReported as
A target that cannot be written: a formula, an auto-number or a read-only fieldError
A field that cannot be set on insert, changed on update, or either on upsertError
An address or location field, which is mapped through its component fieldsError
A constant that is not in a restricted picklistError
A constant that is not in an unrestricted picklist, which Salesforce accepts as a new valueWarning
A picklist value that exists but is inactiveWarning
A dependent picklist value that cannot occur with the controlling field's valueError
An encrypted field, whose value travels in clear and is encrypted on arrivalWarning
An upsert key field that Salesforce does not match onError
A required field with no mappingWarning, above the rows

Only constants you type, such as "Hot" or 42, are checked as values. A field reference or an expression is not known until the run.

If the field metadata cannot be read, the sheet says so once, and mapping and saving work as for any other connector.

Validate the whole mapping​

When the target brings its own rules, a band above the mapping rows names the rule set and its rule count, with Rules, Validate mapping and a chevron to fold it.

Press Validate mapping for a full check:

  • One line per rule: Passed, or the number of findings and their rows. Click a line to read the findings.
  • Filters: All, Errors, Warnings and Passed, each with a count.
  • Required fields with no mapping, each with a picker to map a source field in place.
  • Fixes where one applies: Change the target, Remove this mapping, Open the target node, or relate a lookup by a key field.

Each finding links to its row number. Rows are tinted red for an error and amber for a warning.

After you edit a mapping, the band says the results are out of date. Validate again to refresh them. Row badges stay live. Fixes that act on a row are disabled until you validate again, because inserting or deleting rows moves row positions.

The chevron folds the band until you open it again. The summary line still shows the last result.

Other rule states

  • Not reached: an earlier rule already decided the row. A read-only target is not also checked for insert access.
  • Not run: nothing reported on the rule. When field metadata cannot be read, every rule that depends on it shows Not run.

Turn a rule off: Rules lists the target's rules with a switch each. A rule that is off does not run and shows no badges. The count beside Rules says how many are off. The choice is saved per Transform node. A row with no target, or a target mapped twice, is always reported.

Relate a Salesforce record by a key​

Map a column to a Salesforce lookup field and the row gains a Lookup line in the Editor and Rows views:

  • Related object: fixed when the lookup points at one object. Required when it points at several, such as Task.WhoId.
  • Match on: Record ID by default, or an external ID or indexed field of the related object.

For example, your source has an account external ID and no Salesforce account ID. Map that column to AccountId on a Contact target and set Match on to the account's external ID field. The target becomes Account.<your field>, and the account is found by your value during the run.

  • With Record ID, the column must hold a Salesforce ID.
  • With the Bulk API, Salesforce matches the records and reports per-row results.
  • With the REST API, each key is looked up first. A key that matches no record, or several, is reported on that row and the row is not written. Other rows still load.
  • An empty cell clears the relationship.

Examples​

Rename and derive. Map first_name to FirstName, last_name to LastName, and add an output field FullName with the expression CONCAT(first_name, ' ', last_name).

Flag active accounts. Output field is_active with IF(EQ(status, 'active'), 1, 0).

Upsert to Salesforce without duplicates. Map ext_id to External_Id__c, then turn on Dedupe by key on External_Id__c with Keep last before the Load upserts on that field.

Troubleshooting​

SymptomCauseWhat to do
A column from the source is missing in the outputOnly mapped columns are output.Add a mapping for it.
An expression shows a warning markThe expression has a syntax or field problem.Open the expression editor and check the preview.
The input fields are read-onlyThe upstream node has its own action.Change the action on that node.
Transform settings are not savedThe message names the reason, usually a connection the canvas does not allow.Remove that edge on the canvas, then save.
A Salesforce row shows Not runThe object's field metadata could not be read.Set an action with an object on the target node.