Logo
NeoArc Studio

Transformation Types Reference

Complete reference for the transformation types available in projection property mappings, including their parameters, conflict behaviour, and usage examples.

Every property-level mapping in a projection carries a TransformationDefinition that describes what happens to data as it moves from source to target. The transformation type determines which additional fields are relevant and how conflict detection behaves.

TransformationType Union

export type TransformationType =
  | 'direct'        // 1:1 pass-through (same name and type)
  | 'rename'        // 1:1 with name change
  | 'type-cast'     // 1:1 with type change
  | 'aggregate'     // Many:1 with aggregation function
  | 'concatenate'   // Many:1 string concatenation
  | 'calculate'     // Many:1 arithmetic expression
  | 'derive'        // 0:1 computed (no source, expression-based)
  | 'split'         // 1:many (one source to multiple targets)
  | 'custom';       // Free-text notes only

TransformationDefinition Interface

export interface TransformationDefinition {
  type: TransformationType;
  aggregateFunction?: AggregateFunction;
  expression?: string;
  separator?: string;
  targetType?: string;
  notes?: string;
}

Transformation Type Details

direct

A 1:1 pass-through mapping where the source property is copied to the target with no changes to name or type. This is the default transformation type assigned when a source property is first connected to a target property.

AspectDetail
Cardinality1 source to 1 target
Relevant fieldsnotes (optional)
Conflict detectionType mismatches and constraint narrowing are detected. If source and target types differ, the mapping should be changed to type-cast.
ExampleSource: customer.firstName (string) to Target: customer.firstName (string)

rename

A 1:1 mapping where the source property name changes in the target but the type remains the same. Used when the target system has different naming conventions or business terminology.

AspectDetail
Cardinality1 source to 1 target
Relevant fieldsnotes (optional)
Conflict detectionSame as direct - type and constraint conflicts are detected.
ExampleSource: customer.firstName (string) to Target: customer.first_name (string)

type-cast

A 1:1 mapping where the target property has a different type from the source. Conflict detection raises type conversion warnings or errors depending on the direction of the cast.

AspectDetail
Cardinality1 source to 1 target
Relevant fieldstargetType (the explicit target type override), expression (optional conversion expression), notes
Conflict detectionSafe widenings (integer to decimal, date to datetime, boolean to string, etc.) produce info-level notifications. Narrowing casts (float to integer, datetime to date, string to integer) produce warnings or errors with resolution options.
ExampleSource: order.totalAmount (decimal) to Target: report.totalAmount (float) with targetType 'float'

aggregate

A many-to-one mapping where multiple source values are reduced to a single target value using an aggregation function. Typically used when projecting from a detail level to a summary level.

AspectDetail
CardinalityMany source rows to 1 target value
Relevant fieldsaggregateFunction (required), expression (optional filter/group expression), notes
Available functionscount, sum, avg, min, max, count_distinct, first, last, list, concat, exists, all, none
Conflict detectionMulti-input conflicts may apply. Type compatibility between source and aggregation result is checked.
ExampleSource: orderLine.quantity (integer) to Target: orderSummary.totalItems (integer) with aggregateFunction 'sum'

concatenate

A many-to-one mapping that joins multiple source property values into a single string target using a separator character.

AspectDetail
CardinalityMultiple sources to 1 string target
Relevant fieldsseparator (e.g. ' ', '_', ', '), notes
Conflict detectionTarget must be string or text type. Multi-input conflicts prompt for separator selection.
ExampleSource: customer.firstName + customer.lastName to Target: customer.fullName with separator ' '

calculate

A many-to-one mapping that evaluates an arithmetic or logical expression combining multiple source properties into a single target value.

AspectDetail
CardinalityMultiple sources to 1 target
Relevant fieldsexpression (required, e.g. '{price} * {quantity}'), notes
Expression syntaxField references use curly braces: {fieldName}. Standard arithmetic operators (+, -, *, /, %) and SQL-style functions (ROUND, COALESCE, CAST) are supported.
Conflict detectionExpression return type is inferred and checked against the target type.
ExampleExpression: '{unitPrice} * {quantity} * (1 - {discountRate})' to Target: orderLine.lineTotal (decimal)

derive

A zero-source mapping where the target value is computed entirely from an expression. No source property is connected. Used for generated columns, computed defaults, and audit fields.

AspectDetail
Cardinality0 sources to 1 target
Relevant fieldsexpression (required), notes
Conflict detectionNo source-target conflicts (no source exists). Expression syntax is validated.
ExampleExpression: 'CURRENT_TIMESTAMP' to Target: audit.createdAt (datetime)

split

A one-to-many mapping where a single source property feeds multiple target properties. Each target extracts a different portion or aspect of the source value.

AspectDetail
Cardinality1 source to multiple targets
Relevant fieldsexpression (extraction logic per target), notes
Conflict detectionEach target has independent type and constraint checking against the source.
ExampleSource: address.fullAddress (string) split to Target: address.street, address.city, address.postCode using SPLIT_PART expressions

custom

A free-text mapping where the architect documents the transformation logic in natural language. No automated expression evaluation or conflict detection is applied. Used for complex business rules that cannot be expressed in the built-in expression language.

AspectDetail
CardinalityAny (architect-defined)
Relevant fieldsnotes (required - the transformation description)
Conflict detectionNone. The mapping is treated as documentation only.
ExampleNotes: 'Apply business rule BR-042: if customer tier is Gold and order total exceeds 1000, apply 15% loyalty discount before tax calculation.'

Aggregate Function Reference

The following aggregate functions are available when the transformation type is 'aggregate'.

FunctionReturn TypeDescription
countintegerCount the number of values (including nulls)
sumnumeric (same as input)Sum all numeric values
avgdecimalCalculate the arithmetic mean
minsame as inputReturn the smallest value
maxsame as inputReturn the largest value
count_distinctintegerCount the number of unique values
firstsame as inputReturn the first value in order
lastsame as inputReturn the last value in order
listarrayCollect all values into an array
concatstringConcatenate all values as a string
existsbooleanReturn true if any value exists (non-null)
allbooleanReturn true if all values satisfy the condition
nonebooleanReturn true if no values satisfy the condition