Data Ingestion

Transformation Rules

After data is parsed into the Stage Engine, Transformation Rules convert source field values into Cube dimension members. Account code 41137 becomes OneStream Account Revenue_Product_A. Entity TX-001 becomes Entity Texas. This guide covers the hierarchy of rule objects, every mapping type, and the nuances that trip up new implementers.

The Rule Hierarchy

Transformation Rules are organized in a three-level hierarchy:
diagramTransformation Rule Hierarchy

Loading diagram...

LevelWhat It IsKey Property
Rule GroupA set of mapping rules for a single Cube dimension (e.g., Account rules, Entity rules)Cube Dimension Name — ties the group to a specific dimension
Transformation ProfileA collection of Rule Groups — one per dimension that needs mappingAssigned to a Workflow Profile via Transformation Profile Name
Individual RulesThe actual source-to-target mappings within a Rule GroupMapping Type determines behavior

Security on Rule Groups

Each Rule Group has two security settings:
  • Access — Members of this group can view the Transformation Rules
  • Maintenance — Members of this group can edit rules and load/extract from the Transformation Rules page

Mapping Types

OneStream offers several mapping types, each suited to different transformation patterns:

One-to-One

The simplest mapping. One source value maps to exactly one target member.
Source ValueTarget Value
41137Revenue_Product_A
05/31/20212021M5
MonthlyMTD
One-to-One rules process in alphanumeric sort order by default. Use the Order field to assign a custom sort order.
ℹ️Info
The Scenario, Time, and View dimensions can only use One-to-One mapping rules. Other mapping types are not available for these dimensions.

Composite

Composite rules add conditional logic by referencing other dimensions. Dimensional tags let you include another dimension in the evaluation.
Syntax: DimensionTag#[pattern]:DimensionTag#[pattern]
For example, map any account starting with 199 in Entity Texas to a specific target:
plaintext
1A#[199?-???*]:E#[Texas]
Composite rules stop processing when a record meets the criteria. If a record could match more than one rule, set the Order field to ensure correct precedence — narrowest patterns first.

Range

Map a continuous range of source values to a single target. Ranges use the ~ separator.
Rule ExpressionTargetEffect
0004~3000General_ExpenseAccounts 0004 through 3000 map to one target
⚠️Warning
Range values must have the same number of characters. A range of 4~3000 will not work — pad it as 0004~3000.

List

Map multiple specific source values to a single target using a semicolon-delimited list.
Rule ExpressionTargetEffect
41137;41139;4114561000Three specific accounts map to one target

Mask (Wildcards)

Wildcards let you match patterns rather than exact values:
WildcardBehaviorExampleMatches
*Any number of characters27*270, 2709, 27XX-009
?Exactly one character27??2709, 2700 — but not 27999 or 2700-101
Double-sided wildcards work too: *000* matches any value with characters before and after 000.
Pass-through mapping: Use * to * to map every source value to a target with the same name. This is common when source and OneStream metadata are already aligned.
💡Tip
Mask rules with embedded wildcards (e.g., *84*7*) run less efficiently than simpler patterns. Use the most specific pattern possible.

Lookup

Lookup rules reference data from the transformation cache or Cube to determine the target value. They are useful when the mapping depends on previously transformed data or on values already in the Cube.

Derivative Rules

Derivative rules go beyond simple mapping — they apply logic to staged data and generate additional records in the Stage environment. There are two types:

Source Derivatives

Applied to inbound source data before transformation. Common uses:
  • Check if a trial balance equals zero
  • Detect when an asset goes negative and needs reclassification as a liability
  • Create summary accounts by aggregating source records
Example expressions:
ExpressionEffect
A#[11*]=CashAccounts starting with 11 aggregate to a new Account called Cash
A#[12*]=ARAccounts starting with 12 aggregate to AR (interim — not stored)

Target Derivatives

Applied after transformation, operating on post-transformed records. Target derivatives reference the mapped values rather than the original source values.

Derivative Expression Types

Derivative rules can use additional expression types to perform calculations on the resulting member's data:
TypeEffect
NoneDefault — no calculation
Business RuleRuns a Derivative-type Business Rule against the resulting data
Complex ExpressionInline script that runs against the resulting data
Multiply / Divide / Add / SubtractBasic math against a specified value
Create If > x / Create If < xOnly create the derivative record if the value exceeds or is below a threshold

Reserved Characters

Three characters are reserved for Transformation Rule operations:
CharacterUsage
!Negation / exclusion
?Single-character wildcard
|Logical OR
🛑Danger
Never use !, ?, or | in Source Member or Target Member names. They will cause mapping errors that are difficult to diagnose.

Rule Processing Order

Within a Rule Group, rules process in this order:
  1. Derivative rules (Source) — Generate additional records before mapping
  2. Mapping rules — Process in the order determined by the Rule Name (alphanumeric sort) unless overridden by the Order field
  3. Derivative rules (Target) — Generate additional records after mapping
Composite rules stop processing for a record when a match is found. One-to-One and Mask rules are evaluated in sequence — the first match wins.

Assigning Profiles to Workflow Profiles

After building your Rule Groups and collecting them into a Transformation Profile, assign the profile to the Workflow Profile:
  1. Navigate to the Workflow Profile's Integration Settings
  2. Set Transformation Profile Name to your profile
  3. The import process will now use these rules to transform staged data