Skip to main content
Skip table of contents

CAGR

Category: Compare periods

Overview

The CAGR function computes the Compound Annual Growth Rate between a current value and the value N periods earlier, taking compounding into account. It works along a chosen level (e.g. Year, Month) or any non-time dimension.

Use this function when you need to measure compound growth over multiple periods, for example multi-year revenue growth.

Syntax

CAGR('Node', NumberOfPeriods [, "Level" [, "InvalidHandling"]])

Example usage: CAGR('Revenue', 3)

Parameters

Parameter

Description

Type

Required

Default

Node

Input node whose values provide the end and start of the CAGR calculation

Node reference

Yes

--

NumberOf
Periods

How many steps back to compare. Must be a whole number >= 1. Can also be a node without dimensionality.

Number or node reference

Yes

--

Level

The level along which periods are counted

Level name

No

Time dimension

InvalidHandling

Controls how rows with calculation errors (e.g. division by zero) are treated

Keyword

No

"FailOnInvalid"

InvalidHandling options:

  • "FailOnInvalid": Any invalid entry causes an error. This is the default.

  • "IgnoreInvalid": Invalid entries are silently omitted from the result. If all rows are invalid, the result is empty.

Output Shape

Aspect

Behavior

Dimensionality

Same as input.

Time range

The first N periods are dropped (no start value N periods back to compare against). Periods with missing start or end values are also dropped.

Values

CAGR as a ratio:(end_value / start_value)^(1/N) - 1. A result of 0.5 means 50% compound annual growth.

Row count

Reduced. At minimum, the first N periods are removed.

Watch Out

  • If Level is omitted, the node must include a level from the time dimension.

  • The Level must be the lowest level in its dimension hierarchy on the input node. You cannot use a higher level (e.g. "Year" when the node has "Month" data).

  • The Level cannot be a linked level of another level on the node.

  • NumberOfPeriods must be a whole number >= 1. If it is a node, that node must have no levels.

  • A start value of 0 causes a division-by-zero error. Use "IgnoreInvalid" to skip these entries instead of failing.


Examples

CAGR along the time dimension

This example calculates the compound growth rate over 2 years for each country. Note that missing data points (e.g. US 2028) cause gaps in the result.

Input node: Revenue

Year

Country

Value

2025

DE

100

2026

DE

200

2027

DE

300

2028

DE

400

2029

DE

500

2030

DE

600

2025

US

100

2026

US

200

2027

US

250

2029

US

300

2030

US

400

Formula: CAGR('Revenue', 2) = CAGR('Revenue', 2, "Year") = CAGR('Revenue', 2, "Year", "FailOnInvalid")

Year

Country

→ CAGR Result

2027

DE

73.21%

2028

DE

41.42%

2029

DE

29.10%

2030

DE

22.47%

2027

US

58.11%

2029

US

9.54%

There is no 2028 value for the US in the original data. This means the CAGR value cannot be calculated for 2028 (no end value) and 2030 (no start value 2 years prior).

CAGR along a non-time dimension

This example computes CAGR along the Product dimension instead of time, comparing each product to its predecessor in the dimension hierarchy.

Dimension: Product

Level Name

Level Key

Product A

1

Product B

2

Product C

3

Input node: Revenue

Year

Product

Value

2025

Product A

100

2025

Product B

250

2025

Product C

200

2026

Product A

150

2026

Product B

250

2026

Product C

250

2027

Product A

200

2027

Product C

300

Formula: CAGR('Revenue', 1, "Product")

Year

Product

→ CAGR Result

2025

Product B

150%

2025

Product C

-20%

2026

Product B

66.67%

2026

Product C

0.00%

Product A has no prior level in the dimension hierarchy, so no CAGR can be calculated. Product B and Product C both have prior levels.


Related Functions

Function

When to use instead

YOY_REL

When you only need growth compared to one period back (no compounding). CAGR smooths growth over N periods; YOY_REL gives the raw single-period change.

YOY_ABS

When you need the absolute difference to the previous year, not a percentage growth rate.

DELTA_REL

When you need relative change along any dimension (not just time), without compounding.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.