Assumptions & result sets
Overview
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 upstream.NONSIMremoves assumptions on the node itself but keeps upstream assumptions.UNIONcombines non-overlapping result sets on the same levels.DISAGGREGATEexists 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 guardrailUNION('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 |
|---|---|
Returns the value of a node with no assumptions applied on the node or anywhere upstream. | |
Returns a node’s value without assumptions on the node itself while applying assumptions upstream. | |
Combines the result sets of two or more input nodes. | |
Legacy function that distributes values onto a level based on another node’s distribution; use |
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 intendedDimensionality & hierarchies :
DISTRIBUTEand shaping before combiningFiltering & data shaping: reduce result sets before combining
Troubleshooting guide: assumptions, missing values, unexpected results