# ROLLFORWARD
URL: https://docs.valsight.ai/rollforward/
Description: The ROLLFORWARD function rolls the values of the Original Node forward with the influence of optional driver nodes.
**Category:** [Rollforward & time series](/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](/rollforward-mul/) is how they treat multiple influence nodes. `ROLLFORWARD` **sums** the effects and then applies them to the original node. `ROLLFORWARD_MUL` **multiplies** 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.`'Revenue'`)                                                                           | Node reference | Yes      |
| **Driver Node**   | One or more driver nodes that influence the rollforward, specified in single quotes (e.g.`'Inflation'`). Multiple drivers can be provided as additional arguments. | 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_MUL` if 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.

**Original node:** `'Revenue'`

| Year | Value |
| ---- | ----- |
| 2025 | 95    |
| 2026 | 100   |

**Driver 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.

**Original node:** `'Revenue'`

| Year | Value |
| ---- | ----- |
| 2025 | 95    |
| 2026 | 100   |

**Driver node:** `'Market Size'`

| Year | Value |
| ---- | ----- |
| 2026 | 10000 |
| 2027 | 10100 |
| 2028 | 10500 |

**Formula:** `ROLLFORWARD('Revenue', 'Market Size')`

| Year | Calculation         | Result |
| ---- | ------------------- | ------ |
| 2025 | N/A                 | 95     |
| 2026 | N/A                 | 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.

**Driver node:** `'Inflation'`

| Year | Inflation |
| ---- | --------- |
| 2026 | 10%       |
| 2027 | 10%       |
| 2028 | 10%       |

**Driver node:** `'Growth'`

| Year | Growth |
| ---- | ------ |
| 2026 | 20%    |
| 2027 | 20%    |
| 2028 | 20%    |

**Original node:** `'Revenue'`

| Year | Revenue |
| ---- | ------- |
| 2026 | 1000    |

**Formula:** `ROLLFORWARD('Revenue', 'Inflation', 'Growth')`

| Year | Calculation                        | Result |
| ---- | ---------------------------------- | ------ |
| 2027 | 1000 + (1000 × 0.1) + (1000 × 0.2) | 1300   |
| 2028 | 1300 + (1300 × 0.1) + (1300 × 0.2) | 1690   |

## Related

| Function                                        | When to use instead                                                                                                                                                        |
| ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [ROLLFORWARD\_ADVANCED](/rollforward-advanced/) | When you need a more configurable rollforward setup with explicit control over timing, base behavior, or advanced driver handling beyond the standard `ROLLFORWARD` logic. |
| [ROLLFORWARD\_MUL](/rollforward-mul/)           | When multiple drivers should influence each other within the same period instead of being summed first.                                                                    |
| [PREVIOUS](/previous/)                          | When you need older loop-style logic with a defined base case instead of a direct rollforward from the latest available value.                                             |
