# Assumptions & result sets
URL: https://docs.valsight.ai/assumptions-result-sets/
Description: Use this category when you need to control how assumptions affect a node’s values or when you want to combine 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
* **Combine result sets** from multiple nodes by appending non-overlapping slices
* Understand legacy disaggregation logic in older models

## Not here if you want to:

* Allocate values down to more detail → see [Dimensionality & hierarchies](/dimensionality-hierarchies/)
* Filter to a subset, fill gaps, or rank → see [Filtering & data shaping](/filtering-data-shaping/)

## Mental model

* `BASELINE` removes assumptions on the node and upstream
* `NONSIM` removes assumptions on the node itself but keeps upstream assumptions
* `UNION` combines non-overlapping result sets on the same levels
* `DISAGGREGATE` exists for legacy compatibility and should be replaced by `DISTRIBUTE` in new models

## Common patterns

| Name                                | What it does                                                                  | Formula                               |
| ----------------------------------- | ----------------------------------------------------------------------------- | ------------------------------------- |
| Compare against baseline            | Use when you want to validate how assumptions affect a result.                | `BASELINE('Revenue')`                 |
| Remove assumptions on the node only | Use when you want to isolate assumptions placed on the node itself.           | `NONSIM('Revenue')`                   |
| Append disjoint time slices         | Use when inputs cover different periods and you want one continuous output.   | `UNION('Actuals2024', 'Actuals2025')` |
| Use level matching as a guardrail   | Use when you want the model to fail fast if level structures diverge.         | `UNION('NodeA', 'NodeB')`             |
| Migrate legacy disaggregation logic | Use `DISAGGREGATE` only for backwards compatibility; prefer `DISTRIBUTE` now. | `DISAGGREGATE`                        |

## Functions in this category

| Function                       | Description                                                                                                      |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------- |
| [BASELINE](/baseline/)         | Returns the value of a node with no assumptions applied on the node or anywhere upstream.                        |
| [NONSIM](/nonsim/)             | Returns a node’s value without assumptions on the node itself while applying assumptions upstream.               |
| [UNION](/union/)               | Combines the result sets of two or more input nodes.                                                             |
| [DISAGGREGATE](/disaggregate/) | Distributes values of one node onto a level based on another node’s value distribution (legacy; use DISTRIBUTE). |

## Choosing between similar functions

**BASELINE vs NONSIM**

* Use `BASELINE` to remove assumptions on the node and upstream
* Use `NONSIM` to remove assumptions on the node only, while keeping upstream assumptions

**UNION vs** `+`

* Use `UNION` when 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 `UNION` to combine result sets from multiple nodes
* Use reshaping functions such as `ROLLUP` or `EXPAND` when you want to change granularity or dimensionality

**DISAGGREGATE vs DISTRIBUTE**

* Use `DISAGGREGATE` only for legacy compatibility
* Use `DISTRIBUTE` for new models and ongoing development

## Pitfalls & troubleshooting

* **Baseline looks “too different”:** verify where assumptions are applied (on the node vs upstream) and choose `BASELINE` vs `NONSIM` accordingly
* **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 to `DISTRIBUTE` to avoid legacy limitations and reduce maintenance risk

## Related

* [Operators](/operators/): using `+` when overlap in `UNION` is intended
* [Dimensionality & hierarchies](/dimensionality-hierarchies/): `DISTRIBUTE` and shaping before combining
* [Filtering & data shaping](/filtering-data-shaping/): reduce result sets before combining
* [Troubleshooting guide](/troubleshooting-guide/): assumptions, missing values, unexpected results
