Reference Updated April 7, 2026

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

ParameterDescriptionTypeRequiredDefault
NodeInput node whose values provide the end and start of the CAGR calculationNode referenceYes
NumberOf PeriodsHow many steps back to compare. Must be a whole number >= 1. Can also be a node without dimensionality.Number or node referenceYes
LevelThe level along which periods are countedLevel nameNoTime dimension
InvalidHandlingControls how rows with calculation errors (e.g. division by zero) are treatedKeywordNo"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

AspectBehavior
DimensionalitySame as input.
Time rangeThe first N periods are dropped (no start value N periods back to compare against). Periods with missing start or end values are also dropped.
ValuesCAGR as a ratio:(end_value / start_value)^(1/N) - 1. A result of 0.5 means 50% compound annual growth.
Row countReduced. 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

YearCountryValue
2025DE100
2026DE200
2027DE300
2028DE400
2029DE500
2030DE600
2025US100
2026US200
2027US250
2029US300
2030US400

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

YearCountry→ CAGR Result
2027DE73.21%
2028DE41.42%
2029DE29.10%
2030DE22.47%
2027US58.11%
2029US9.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 NameLevel Key
Product A1
Product B2
Product C3

Input node: Revenue

YearProductValue
2025Product A100
2025Product B250
2025Product C200
2026Product A150
2026Product B250
2026Product C250
2027Product A200
2027Product C300

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

YearProduct→ CAGR Result
2025Product B150%
2025Product C-20%
2026Product B66.67%
2026Product C0.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.


FunctionWhen to use instead
YOY_RELWhen 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_ABSWhen you need the absolute difference to the previous year, not a percentage growth rate.
DELTA_RELWhen you need relative change along any dimension (not just time), without compounding.
Was this page helpful?