# SCHEDULEPROJECTS
URL: https://docs.valsight.ai/scheduleprojects/
Description: Combines project KPI blueprints over time with timing information that defines when projects start.
**Category:** [Rollforward & time series](/rollforward-time-series/)

## Overview

The **SCHEDULEPROJECTS** function **combines project KPI blueprints** over time with timing information that defines when projects start.

Use this function when you want to place reusable project blueprints onto actual start periods based on a timing node.

For a worked example, see the training model T02 Hochlaufkurven in [Trainingsmodelle - Modelle](/hochlaufkurven/).

## Syntax

`SCHEDULEPROJECTS('ProjectKPI', 'TimingNode' [, "TimeLevel"])`

## Parameters

| Parameter      | Description                                                                                                                                                                                                           | Type           | Required |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | -------- |
| **ProjectKPI** | Contains the project KPI data over time (e.g. revenue).                                                                                                                                                               | Node reference | Yes      |
| **TimingNode** | Contains data for the starting points of projects. This node is typically a simulation node used to simulate different starting points for projects.                                                                  | Node reference | Yes      |
| **TimeLevel**  | Specifies the time level (`"Month"`, `"Quarter"`, `"Year"`) in which the offset is given in the ProjectsNode. If this parameter is omitted, `ProjectKPI` is assumed to be on the lowest time level in the TimingNode. | Level name     | No       |

## Example

### Scheduling project blueprints by start period

This example shows how reusable project KPI blueprints are placed onto actual years based on a timing node. A small and a large project each span two years and start in different periods.

**Input node:** `'ProjectKPI'`

| Project       | Sequence | Value (Revenue) |
| ------------- | -------- | --------------- |
| Small Project | 1        | 500             |
| Small Project | 2        | 700             |
| Large Project | 1        | 8,000           |
| Large Project | 2        | 9,000           |

The Sequence column shows that the Small Project generates 500 of revenue in the first year and 700 in the second year. Instead of year, month or quarter can also be used by changing the time column in the TimingNode or by specifying the TimeLevel parameter.

**Input node:** `'TimingNode'`

| Project       | Year | Value (Number of projects) |
| ------------- | ---- | -------------------------- |
| Small Project | 2025 | 2                          |
| Small Project | 2026 | 5                          |
| Large Project | 2025 | 0                          |
| Large Project | 2026 | 10                         |

Here we specify how many projects start when. Two Small Project items start in 2025, while five Small Project and ten Large Project items start in 2026.

**Formula:** `SCHEDULEPROJECTS('ProjectKPI', 'TimingNode')`

| Project/Year  | 2025         | 2026           | 2027           | 2028 |
| ------------- | ------------ | -------------- | -------------- | ---- |
| Small Project | **1,000**(2) | **3,900**(2+5) | **3,500**(5)   | 0    |
| Large Project | 0            | **80,000**(10) | **90,000**(10) | 0    |

## Related Functions

| Function           | When to use instead                                                                                                  |
| ------------------ | -------------------------------------------------------------------------------------------------------------------- |
| [SHIFT](/shift/)   | When you already have values and only need to move them along a time level by a defined offset.                      |
| [EXPAND](/expand/) | When you first need to create the target shape or add missing level combinations before applying further time logic. |
