Assumptions & result sets
Use this category when you need to control how assumptions affect a node’s values or when you want to combine result sets.
These functions help you compare results with and without assumptions, append non-overlapping outputs, and support legacy behavior during migration.
Start here if…
- You want to see a node without assumptions applied for comparison or debugging
- You want to combine result sets from multiple nodes by appending non-overlapping slices
- You’re migrating older models and encounter legacy disaggregation logic
Not here if…
- You want to allocate values down to more detail → see Dimensionality & hierarchies
- You want to filter to a subset, fill gaps, or rank → see Filtering & data shaping
Mental model
BASELINEremoves assumptions on the node and upstreamNONSIMremoves assumptions on the node itself but keeps upstream assumptionsUNIONcombines non-overlapping result sets on the same levelsDISAGGREGATEexists for legacy compatibility and should be replaced byDISTRIBUTEin new models
Common patterns
Compare “with assumptions” vs “baseline”
BASELINE('Revenue')
Use when you want to validate how assumptions affect a result.
Remove assumptions on the node only
NONSIM('Revenue')
Use when you want to isolate the effect of assumptions placed on the node itself.
Append disjoint time slices
UNION('Actuals2024', 'Actuals2025')
Use when each input covers different periods (no overlap) but you want one continuous output.
Use level matching as a guardrail
UNION('NodeA', 'NodeB')
Use when you want the model to fail fast if level structure diverges (instead of silently combining).
Migrate legacy disaggregation logic
DISAGGREGATE(...) → replace with DISTRIBUTE(...)
Use DISAGGREGATE only for backwards compatibility; prefer DISTRIBUTE for new models.
Functions in this category
| Function | Description |
|---|---|
| BASELINE | Returns the value of a node with no assumptions applied on the node or anywhere upstream. |
| NONSIM | Returns a node’s value without assumptions on the node itself while applying assumptions upstream. |
| UNION | Combines the result sets of two or more input nodes. |
| DISAGGREGATE | Legacy function that distributes values onto a level based on another node’s distribution; use DISTRIBUTE instead. |
Choosing between similar functions
BASELINE vs NONSIM
- Use
BASELINEto remove assumptions on the node and upstream - Use
NONSIMto remove assumptions on the node only, while keeping upstream assumptions
UNION vs +
- Use
UNIONwhen you want to append disjoint slices and enforce the same levels with no overlap - Use
+when you want to combine overlapping values arithmetically
UNION vs reshaping functions
- Use
UNIONto combine result sets from multiple nodes - Use reshaping functions such as
ROLLUPorEXPANDwhen you want to change granularity or dimensionality
DISAGGREGATE vs DISTRIBUTE
- Use
DISAGGREGATEonly for legacy compatibility - Use
DISTRIBUTEfor new models and ongoing development
Pitfalls & troubleshooting
- Baseline looks “too different”: verify where assumptions are applied (on the node vs upstream) and choose
BASELINEvsNONSIMaccordingly - UNION fails because levels don’t match: confirm both inputs have the exact same level set
- UNION fails because rows overlap: ensure the same intersection does not exist in more than one input; split inputs into disjoint slices, or use
+if overlap is intended - Legacy function in active use: if you still rely on
DISAGGREGATE, plan migration toDISTRIBUTEto avoid legacy limitations and reduce maintenance risk
Related sections
- Operators: using
+when overlap inUNIONis intended - Dimensionality & hierarchies :
DISTRIBUTEand shaping before combining - Filtering & data shaping: reduce result sets before combining
- Troubleshooting guide: assumptions, missing values, unexpected results