ROLLFORWARD
Category: Rollforward & time series
Overview
The ROLLFORWARD function rolls the values of the Original Node forward with the influence of optional driver nodes.
Use this function when you want to project a base series forward starting after the last available value with one or more driver nodes.
Function alternative
The difference between this function and ROLLFORWARD_MUL is how they treat multiple influence nodes.
ROLLFORWARDsums up the effects and then applies them to the original node.ROLLFORWARD_MULmultiplies up the effects and then applies them to the original node.
Syntax
ROLLFORWARD('OriginalNode' [, 'DriverNode', ...])
Example usage: ROLLFORWARD('Revenue', 'Inflation')
Parameters
Parameter | Description | Type | Required |
|---|---|---|---|
Original Node | Input node whose values are rolled forward, specified in single quotes (e.g. | Node reference | Yes |
Driver Node | One or more driver nodes that influence the rollforward, specified in single quotes (e.g. | Node reference | No |
Output Shape
Aspect | Behavior |
|---|---|
Dimensionality | Same as the Original Node |
Values | Original values are preserved for existing time periods. Future periods are projected from the last value, adjusted by cumulative driver effects (or flat if no drivers). |
Row count | Expands to fill time periods within the horizon where driver data exists |
Watch Out
All input nodes (original and drivers) must have a time level.
The driver's time level cannot be coarser than the original node's time level (e.g. yearly driver with monthly original data is not allowed).
If a driver node is not a percent node, it is automatically converted to relative year-over-year changes before being applied.
Original data values are preserved as-is. The rollforward only applies to time periods after the last existing data point.
With multiple drivers, effects are summed per period, then applied. Use
ROLLFORWARD_MULif you need multiplicative combination instead.Driver nodes are automatically rolled up to match the dimensionality of the Original Node if they have finer granularity.
If no driver nodes are specified, the last value is projected forward as a flat line (0% growth).
Examples
Rollforward with a percentage driver
This example uses a percentage driver. Each future period applies the driver value to the latest rolled result.
Input node: Revenue
Year | Value |
|---|---|
2025 | 95 |
2026 | 100 |
Input node: Inflation
Year | Value in % |
|---|---|
2026 | 0.02 |
2027 | 0.1 |
2028 | 0.2 |
Formula: ROLLFORWARD('Revenue', 'Inflation')
Year | → ROLLFORWARD Result |
|---|---|
2025 | 95 |
2026 | 100 |
2027 | 110 |
2028 | 132 |
Rollforward with an absolute driver
If the driver node is not a percent node, ROLLFORWARD converts it into a yoy-growth effect before applying it to the latest rolled value.
Input node: Revenue
Year | Value |
|---|---|
2025 | 95 |
2026 | 100 |
Input node: Market Size
Year | Value |
|---|---|
2026 | 10000 |
2027 | 10100 |
2028 | 10500 |
Formula: ROLLFORWARD('Revenue', 'Market Size')
Year | → ROLLFORWARD Result |
|---|---|
2025 | 95 |
2026 | 100 |
2027 | 100 + (10100/10000) = 101 |
2028 | 101 + (10500/10100) = 102.03 |
Rollforward with multiple driver nodes
With multiple drivers, ROLLFORWARD sums the individual effects per period before applying them to the latest rolled value.
Input node: Inflation
Year | Inflation |
|---|---|
2026 | 10% |
2027 | 10% |
2028 | 10% |
Input node: Growth
Year | Growth |
|---|---|
2026 | 20% |
2027 | 20% |
2028 | 20% |
Input node: Revenue
Year | Revenue |
|---|---|
2026 | 1000 |
Formula: ROLLFORWARD('Revenue', 'Inflation', 'Growth')
Year | → ROLLFORWARD Result |
|---|---|
2027 | 1000 + (1000 * 0.1) + (1000 * 0.2) = 1300 |
2028 | 1300 + (1300 * 0.1) + (1300 * 0.2) = 1690 |
Related Functions
Function | When to use instead |
When you need a more configurable rollforward setup with explicit control over timing, base behavior, or advanced driver handling beyond the standard | |
When multiple drivers should influence each other within the same period instead of being summed first. | |
When you need older loop-style logic with a defined base case instead of a direct rollforward from the latest available value. |