DB

Returns the depreciation of an asset for a specified period using the fixed-declining balance method.

Syntax

DB(<cost>, <salvage>, <life>, <period>[, <month>])

Parameters

Term Definition
cost The initial cost of the asset.
salvage The value at the end of the depreciation (sometimes called the salvage value of the asset). This value can be 0.
life The number of periods over which the asset is being depreciated (sometimes called the useful life of the asset).
period The period for which you want to calculate the depreciation. Period must use the same units as life. Must be between 1 and life (inclusive).
month (Optional) The number of months in the first year. If month is omitted, it is assumed to be 12.

Return Value

The depreciation over the specified period.

Remarks

  • The fixed-declining balance method computes depreciation at a fixed rate. DB uses the following formulas to calculate depreciation for a period:

    $$(\text{cost} - \text{total depreciation from prior periods}) \times \text{rate}$$

    where:

    • $\text{rate} = 1 - ((\frac{\text{salvage}}{\text{cost}})^{(\frac{1}{\text{life}})})\text{, rounded to three decimal places}$
  • Depreciation for the first and last periods is a special case.

    • For the first period, DB uses this formula:

      $$\frac{\text{cost} \times \text{rate} \times \text{month}}{12}$$

    • For the last period, DB uses this formula:

      $$\frac{(\text{cost} - \text{total depreciation from prior periods}) \times \text{rate} \times (12 - \text{month})}{12}$$

  • period and month are rounded to the nearest integer.

  • An error is returned if:

    • cost < 0.
    • salvage < 0.
    • life < 1.
    • period < 1 or period > life.
    • month < 1 or month > 12.
  • This function is not supported for use in DirectQuery mode when used in calculated columns or row-level security (RLS) rules.

Examples

Example 1

The following DAX query:

EVALUATE
{
  DB(1000000, 0, 6, 1, 2)
}

Returns an asset's depreciation in the last two months of the first year, assuming it will be worth \$0 after 6 years.

[Value]
166666.666666667

Example 2

The following calculates the total depreciation of all assets in different years over their lifetimes. Here, the first year only includes 7 months of depreciation, and the last year only includes 5 months.

DEFINE
VAR NumDepreciationPeriods = MAX(Asset[LifeTimeYears])+1
VAR DepreciationPeriods = GENERATESERIES(1, NumDepreciationPeriods)
EVALUATE
ADDCOLUMNS (
  DepreciationPeriods,
  "Current Period Total Depreciation",
  SUMX (
    FILTER (
      Asset,
      [Value] <= [LifetimeYears]+1
    ),
    DB([InitialCost], [SalvageValue], [LifetimeYears], [Value], 7)
  )
)