DEPRECIATION
DEPRECIATION('ValueNode', 'DepreciationTime' [, "TimeLevel"])
The DEPRECIATION function calculates linear depreciation values per period from an investment node and a depreciation time node. The result is the depreciation amount for each time period, not the remaining book value. Depreciation from multiple investment periods stacks automatically.
Use this function when you need to calculate straight-line depreciation values per period from initial investments and their depreciation times: DEPRECIATION('Investments', 'DepreciationTime').
Parameters
- ValueNodeNode referenceRequired
- Input node with the values to depreciate over time. Must have a time level.
- DepreciationTimeNode referenceRequired
- Node containing the depreciation periods for each asset. Must not have a time level. Negative and non-integer values make the calculation fail; a depreciation time of 0 is accepted but produces nothing.
- TimeLevelLevel nameOptional
- The time level to which depreciation times correspond. Default:
"Year".
Output shape
- Dimensionality
- Same as ValueNode.
- Time range
- Extends beyond the input data. Depreciation continues for the specified number of periods after each investment.
- Values
- Linear depreciation amount per period:
investment / depreciation_periods. Values from investments in different periods are added together where they overlap. - Row count
- Expanded. Periods beyond the last investment are included as long as depreciation is still active.
Watch out
- The ValueNode must have a time level. The DepreciationTime node must not have a time level.
- Negative and non-integer depreciation times make the calculation fail with an error naming the offending value.
- A depreciation time of 0 does not error. It is accepted and silently returns 0 for every period, so an investment with a depreciation time of 0 disappears from the result without any warning. Check for zeros in the DepreciationTime node before you trust an empty result.
- When TimeLevel is omitted, depreciation times are assumed to be in years. If the ValueNode is at Quarter or Month granularity, the depreciation times are automatically converted (e.g. 4 years becomes 16 quarters or 48 months).
- The result is the depreciation amount per period, not the remaining book value. To get the remaining book value, subtract the cumulative depreciation (using RUNNINGSUM) from the original investment.
- The DepreciationTime node must not be more fine-grained than the ValueNode.
Examples
Overlapping depreciation from yearly investments
Two investments made in consecutive years are each depreciated over 4 periods. The result shows how depreciation amounts from different investments stack up.
Input node: 'Investments'
| Year | Value |
|---|---|
| 2025 | 1000 |
| 2026 | 400 |
Input node: 'DepreciationTime'
| Periods |
|---|
| 4 |
Formula: DEPRECIATION('Investments', 'DepreciationTime')
| Year | Calculation | Result |
|---|---|---|
| 2025 | N/A | 250 |
| 2026 | 250 + 100 | 350 |
| 2027 | 250 + 100 | 350 |
| 2028 | 250 + 100 | 350 |
| 2029 | N/A | 100 |
| 2030 | N/A | 0 |
Each investment is divided by 4 periods: 1000/4 = 250, 400/4 = 100. From 2026 to 2028 both depreciation streams overlap.
Per-category depreciation times
Two asset categories with different depreciation times show that each category is depreciated independently based on its own period count.
Input node: 'Investments'
| Year | Category | Value |
|---|---|---|
| 2026 | A | 2000 |
| 2026 | B | 1000 |
Input node: 'DepreciationTime'
| Category | Periods |
|---|---|
| A | 2 |
| B | 4 |
Formula: DEPRECIATION('Investments', 'DepreciationTime')
| Year | Category | DEPRECIATION Result |
|---|---|---|
| 2026 | A | 1000 |
| 2026 | B | 250 |
| 2027 | A | 1000 |
| 2027 | B | 250 |
| 2028 | A | 0 |
| 2028 | B | 250 |
| 2029 | A | 0 |
| 2029 | B | 250 |
| 2030 | A | 0 |
| 2030 | B | 0 |
Category A is fully depreciated after 2 periods, while Category B continues for 4 periods.
Related
- RUNNINGSUM
- Combine with DEPRECIATION to calculate remaining book value:
'Investment' - RUNNINGSUM(DEPRECIATION(...)).