Asset Retirements Report
Assets retired or disposed in a period — proceeds, cost removed, accumulated depreciation backed out, and the resulting gain or loss — so finance can record disposals correctly and confirm retired assets stop depreciating.
Sample build of the Asset Retirements Report — reconciled, and rendered tool-neutral so it runs in Power BI, ThoughtSpot, or Tableau.
| Asset Number | Description | Retirement Date | Proceeds | Cost Retired | Gain/loss |
|---|---|---|---|---|---|
| 1001 | Sample | 2026-04-30 | Sample | $1,240,500.00 | Sample |
| 1002 | — | 2026-03-31 | — | $842,150.75 | — |
| 1003 | Sample | 2026-02-28 | Sample | $96,400.00 | Sample |
| 1004 | — | 2026-01-31 | — | $1,005,233.10 | — |
| 1005 | Sample | 2025-12-31 | Sample | $58,720.40 | Sample |
| 1001 | Sample | 2026-04-30 | Sample | $1,240,500.00 | Sample |
The report reads FA_RETIREMENTS with the asset and depreciation tables, computing gain or loss as proceeds less net book value at retirement.
Disposals netted a $240K loss this period, concentrated in one category retired well before the end of its useful life.
If a category keeps retiring at a loss, its assigned useful life is likely too long; review the category-book life so depreciation tracks real asset life.
This is the report's BI Publisher data model — the SQL data set BI Publisher runs against Oracle tables to produce the output. The same SQL becomes a dbt model in your warehouse, so one definition drives both the formatted report and the analytics layer.
Data sources
Show / hide SQL
SELECT
ASSET_NUMBER,
ASSET_DESCRIPTION,
MANUFACTURER_NAME,
SERIAL_NUMBER,
DATE_PLACED_IN_SERVICE,
PERIOD_NAME,
BOOK_TYPE_CODE,
TRANSACTION_HEADER_ID_IN,
SOURCE_TYPE_CODE,
ASSET_ID,
DATE_RETIRED,
ASSET_MAJOR_MINOR_CATEGORY,
UNITS,
DEPRN_GBU,
DEPRN_EXPENSE_ACCOUNT,
DEPRN_GBU_DESC,
LOCATION,
COMMENTS,
COST_RETIRED,
NBV_RETIRED,
PROCEEDS_OF_SALE,
COST_REMOVAL,
REVAL_RSV_RET,
NON_SALE_GAIN,
--((NBV_RETIRED+PROCEEDS_OF_SALE) - (COST_REMOVAL+NON_SALE_GAIN)) GL_GAIN_LOSS
( -1 * NBV_RETIRED + PROCEEDS_OF_SALE - COST_REMOVAL + REVAL_RSV_RET + NON_SALE_GAIN) GL_GAIN_LOSS
FROM
(
SELECT
ASSET_NUMBER,
ASSET_DESCRIPTION,
MANUFACTURER_NAME,
SERIAL_NUMBER,
DATE_PLACED_IN_SERVICE,
PERIOD_NAME,
BOOK_TYPE_CODE,
TRANSACTION_HEADER_ID_IN,
SOURCE_TYPE_CODE,
ASSET_ID,
DATE_RETIRED,
ASSET_MAJOR_MINOR_CATEGORY,
DEPRN_GBU,
DEPRN_EXPENSE_ACCOUNT,
DEPRN_GBU_DESC,
LOCATION,
COMMENTS,
SUM(COST_RETIRED) COST_RETIRED,
SUM(NBV_RETIRED) NBV_RETIRED,
SUM(PROCEEDS_OF_SALE) PROCEEDS_OF_SALE,
SUM(COST_REMOVAL) COST_REMOVAL,
SUM(NON_SALE_GAIN) NON_SALE_GAIN,
SUM(REVAL_RSV_RET) REVAL_RSV_RET,
SUM(UNITS) UNITS
,period_counter
FROM (
SELECT
FAB.ASSET_NUMBER AS ASSET_NUMBER,FTH.transaction_header_id ,
FAB.DESCRIPTION AS ASSET_DESCRIPTION,
FAB.MANUFACTURER_NAME,
FAB.SERIAL_NUMBER,
FB.DATE_PLACED_IN_SERVICE DATE_PLACED_IN_SERVICE,
FDP.PERIOD_NAME,
FB.BOOK_TYPE_CODE,
FB.TRANSACTION_HEADER_ID_IN,
FR.RETIREMENT_TYPE_CODE SOURCE_TYPE_CODE,
FAB.ASSET_ID,
FR.DATE_RETIRED,
FC.SEGMENT1||'-'||FC.SEGMENT2 ASSET_MAJOR_MINOR_CATEGORY,
--FR.UNITS,
GCCI.SEGMENT6 DEPRN_GBU,
GCCI.SEGMENT1||'.'||GCCI.SEGMENT2||'.'||GCCI.SEGMENT3||'.'||GCCI.SEGMENT4||'.'||GCCI.SEGMENT5||'.'|| GCCI.SEGMENT6||'.'||GCCI.SEGMENT7||'.'||GCCI.SEGMENT8||'.'||GCCI.SEGMENT9 DEPRN_EXPENSE_ACCOUNT,
A6.DESCRIPTION DEPRN_GBU_DESC,
(FL.SEGMENT1||'-'||FL.SEGMENT2||'-'||FL.SEGMENT3||'-'||FL.SEGMENT4||'-'||FL.SEGMENT5) LOCATION,
--(FAK.SEGMENT1||'-'||FAK.SEGMENT2||'-'||FAK.SEGMENT3||'-'||FAK.SEGMENT4||'-'||FAK.SEGMENT5) COMMENTS,
FTH.TRANSACTION_NAME COMMENTS,
(SELECT ACCOUNTING_DATE FROM XLA_AE_HEADERS
WHERE EVENT_ID=FTH.EVENT_ID AND AE_HEADER_ID = XAH.AE_HEADER_ID) ACCOUNTING_DATE,
(decode(FA.adjustment_type, 'COST', 1, 'CIP COST', 1, 0) *
decode(FA.debit_credit_flag, 'DR', -1, 'CR', 1, 0) *
FA.adjustment_amount) COST_RETIRED,
(decode(FA.adjustment_type, 'NBV RETIRED', -1,'LEASE GAIN LOSS', - 1, 0) *
decode(FA.debit_credit_flag, 'DR', -1, 'CR', 1, 0) *
FA.adjustment_amount) NBV_RETIRED,
/*(decode(FA.adjustment_type, 'PROCEEDS', 1, 0) *
decode(FA.debit_credit_flag, 'DR', 1, 0) *
FA.adjustment_amount) PROCEEDS_OF_SALE,*/
NVL((case when fa.adjustment_type = 'PROCEEDS' THEN
decode(FA.debit_credit_flag, 'DR', -1, 'CR', 1, 0) * FA.adjustment_amount END ),0) PROCEEDS_OF_SALE,
(decode(FA.adjustment_type, 'REMOVALCOST', -1, 0) *
decode(FA.debit_credit_flag, 'DR', -1, 'CR', 1, 0) *
FA.adjustment_amount) COST_REMOVAL,
(decode(FA.adjustment_type,'NON SALE GAIN',1,0)*
decode(FA.debit_credit_flag, 'DR',-1,'CR',1,0)*
FA.adjustment_amount) NON_SALE_GAIN,
(decode(FA.adjustment_type,'REVAL RSV RET',1,0)*
decode(FA.debit_credit_flag, 'DR',-1,'CR',1,0)*
FA.adjustment_amount) REVAL_RSV_RET,
(decode (FTH.transaction_type_code,'REINSTATEMENT',
decode(FA.adjustment_type,'COST',decode(FA.debit_credit_flag,'DR',FR.units,0),0)*-1,
decode(FR.units,null,0, decode(FDH.transaction_units,null,0,decode(FA.adjustment_type,'COST',decode(FA.debit_credit_flag,'CR',FDH.transaction_units * -1,0),0)))
)) UNITS,fdp.period_counter
FROM FA_RETIREMENTS FR
,FA_ADDITIONS_VL FAB
,FA_TRANSACTION_HEADERS FTH
,XLA_AE_HEADERS XAH
,FA_BOOKS FB
,fa_deprn_summary FDS
,FA_DEPRN_PERIODS FDP
,FA_CATEGORIES_B FC
,FA_DISTRIBUTION_HISTORY FDH
,GL_CODE_COMBINATIONS GCCI
,fnd_flex_values_vl A6
,FA_LOCATIONS FL
,FA_ADJUSTMENTS FA
,FA_BOOK_CONTROLS FBC
WHERE 1=1
AND FR.ASSET_ID=FAB.ASSET_ID
AND FTH.ASSET_ID=FAB.ASSET_ID
AND FR.book_type_code = FTH.book_type_code
AND decode (
FTH.transaction_type_code, 'REINSTATEMENT',
FR.transaction_header_id_out,
FR.transaction_header_id_in
) = FTH.transaction_header_id
AND XAH.EVENT_ID=FTH.EVENT_ID
AND XAH.JE_CATEGORY_NAME='Retirement'
AND TRUNC(XAH.ACCOUNTING_DATE) BETWEEN
(SELECT MIN(TRUNC(FD.CALENDAR_PERIOD_OPEN_DATE))
FROM FA_DEPRN_PERIODS FD
WHERE 1=1
AND (FD.BOOK_TYPE_CODE IN (:P_BOOK ) OR 'All' IN ( 'All' || :P_BOOK))
AND FD.PERIOD_NAME=:PERIOD1)
AND (SELECT MAX(TRUNC(FD.CALENDAR_PERIOD_CLOSE_DATE))
FROM FA_DEPRN_PERIODS FD
WHERE 1=1
AND (FD.BOOK_TYPE_CODE IN (:P_BOOK ) OR 'All' IN ( 'All' || :P_BOOK))
AND FD.PERIOD_NAME=:PERIOD2)
AND FB.transaction_header_id_out = FTH.transaction_header_id
AND FR.ASSET_ID=FB.ASSET_ID
AND FR.book_type_code = FB.book_type_code
AND FR.asset_id = fds.asset_id
AND FR.book_type_code = FDS.book_type_code
AND FDS.DEPRN_SOURCE_CODE='DEPRN'
AND FDS.PERIOD_COUNTER BETWEEN
(SELECT MIN(PERIOD_COUNTER)
FROM FA_DEPRN_PERIODS FD
WHERE 1=1
AND (FD.BOOK_TYPE_CODE IN (:P_BOOK ) OR 'All' IN ( 'All' || :P_BOOK))
AND FD.PERIOD_NAME=:PERIOD1)
AND (SELECT MAX(PERIOD_COUNTER)
FROM FA_DEPRN_PERIODS FD
WHERE 1=1
AND (FD.BOOK_TYPE_CODE IN (:P_BOOK ) OR 'All' IN ( 'All' || :P_BOOK))
AND FD.PERIOD_NAME=:PERIOD2)
AND fdp.period_counter = fds.period_counter
AND fdp.book_type_code = fds.book_type_code
AND FAB.ASSET_CATEGORY_ID = FC.CATEGORY_ID
AND FAB.ASSET_ID = FDH.ASSET_ID
AND FB.BOOK_TYPE_CODE = FDH.BOOK_TYPE_CODE
--AND FDH.DATE_INEFFECTIVE IS NULL
AND FDH.CODE_COMBINATION_ID=GCCI.CODE_COMBINATION_ID
AND a6.flex_value = GCCI.segment6
AND a6.FLEX_VALUE_SET_ID IN
(SELECT FLEX_VALUE_SET_ID
FROM fnd_id_flex_segments
WHERE application_id='101'
AND id_flex_code='GL#'
AND enabled_flag='Y'
AND application_column_name='SEGMENT6')
AND FDH.LOCATION_ID = FL.LOCATION_ID
AND FB.BOOK_TYPE_CODE = FA.BOOK_TYPE_CODE
AND FAB.ASSET_ID = FA.ASSET_ID
AND FTH.TRANSACTION_HEADER_ID = FA.TRANSACTION_HEADER_ID
AND FB.BOOK_TYPE_CODE = FBC.BOOK_TYPE_CODE
AND FBC.SET_OF_BOOKS_ID = xah.LEDGER_ID
AND FDH.DISTRIBUTION_ID=FA.DISTRIBUTION_ID
AND (FC.SEGMENT1 IN (:P_MAJOR_CAT)
OR 'All' IN (:P_MAJOR_CAT||'All'))
AND (FC.SEGMENT2 IN (:P_MINOR_CAT)
OR 'All' IN (:P_MINOR_CAT||'All'))
AND (FB.BOOK_TYPE_CODE IN (:P_BOOK) OR LEAST (:P_BOOK) IS NULL)
UNION
SELECT
FAB.ASSET_NUMBER AS ASSET_NUMBER,FTH.transaction_header_id ,
FAB.DESCRIPTION AS ASSET_DESCRIPTION,
FAB.MANUFACTURER_NAME,
FAB.SERIAL_NUMBER,
FB.DATE_PLACED_IN_SERVICE DATE_PLACED_IN_SERVICE,
FDP.PERIOD_NAME,
FB.BOOK_TYPE_CODE,
FB.TRANSACTION_HEADER_ID_IN,
FR.RETIREMENT_TYPE_CODE SOURCE_TYPE_CODE,
FAB.ASSET_ID,
FR.DATE_RETIRED,
FC.SEGMENT1||'-'||FC.SEGMENT2 ASSET_MAJOR_MINOR_CATEGORY,
--FR.UNITS,
GCCI.SEGMENT6 DEPRN_GBU,
GCCI.SEGMENT1||'.'||GCCI.SEGMENT2||'.'||GCCI.SEGMENT3||'.'||GCCI.SEGMENT4||'.'||GCCI.SEGMENT5||'.'|| GCCI.SEGMENT6||'.'||GCCI.SEGMENT7||'.'||GCCI.SEGMENT8||'.'||GCCI.SEGMENT9 DEPRN_EXPENSE_ACCOUNT,
A6.DESCRIPTION DEPRN_GBU_DESC,
(FL.SEGMENT1||'-'||FL.SEGMENT2||'-'||FL.SEGMENT3||'-'||FL.SEGMENT4||'-'||FL.SEGMENT5) LOCATION,
--(FAK.SEGMENT1||'-'||FAK.SEGMENT2||'-'||FAK.SEGMENT3||'-'||FAK.SEGMENT4||'-'||FAK.SEGMENT5) COMMENTS,
FTH.TRANSACTION_NAME COMMENTS,
(SELECT ACCOUNTING_DATE FROM XLA_AE_HEADERS
WHERE EVENT_ID=FTH.EVENT_ID AND AE_HEADER_ID = XAH.AE_HEADER_ID) ACCOUNTING_DATE,
(decode(FA.adjustment_type, 'COST', 1, 'CIP COST', 1, 0) *
decode(FA.debit_credit_flag, 'DR', -1, 'CR', 1, 0) *
FA.adjustment_amount) COST_RETIRED,
(decode(FA.adjustment_type, 'NBV RETIRED', -1,'LEASE GAIN LOSS', - 1, 0) *
decode(FA.debit_credit_flag, 'DR', -1, 'CR', 1, 0) *
FA.adjustment_amount) NBV_RETIRED,
/*(decode(FA.adjustment_type, 'PROCEEDS', 1, 0) *
decode(FA.debit_credit_flag, 'DR', 1, 0) *
FA.adjustment_amount) PROCEEDS_OF_SALE,*/
NVL((case when fa.adjustment_type = 'PROCEEDS' THEN
decode(FA.debit_credit_flag, 'DR', -1, 'CR', 1, 0) * FA.adjustment_amount END ),0) PROCEEDS_OF_SALE,
(decode(FA.adjustment_type, 'REMOVALCOST', -1, 0) *
decode(FA.debit_credit_flag, 'DR', -1, 'CR', 1, 0) *
FA.adjustment_amount) COST_REMOVAL,
(decode(FA.adjustment_type,'NON SALE GAIN',1,0)*
decode(FA.debit_credit_flag, 'DR',-1,'CR',1,0)*
FA.adjustment_amount) NON_SALE_GAIN,
(decode(FA.adjustment_type,'REVAL RSV RET',1,0)*
decode(FA.debit_credit_flag, 'DR',-1,'CR',1,0)*
FA.adjustment_amount) REVAL_RSV_RET,
(decode (FTH.transaction_type_code,'REINSTATEMENT',
decode(FA.adjustment_type,'COST',decode(FA.debit_credit_flag,'DR',FR.units,0),0)*-1,
decode(FR.units,null,0, decode(FDH.transaction_units,null,0,decode(FA.adjustment_type,'COST',decode(FA.debit_credit_flag,'CR',FDH.transaction_units * -1,0),0)))
)) UNITS,fdp.period_counter
FROM FA_RETIREMENTS FR
,FA_ADDITIONS_VL FAB
,FA_TRANSACTION_HEADERS FTH
,XLA_AE_HEADERS XAH
,FA_BOOKS FB
,fa_deprn_summary FDS
,FA_DEPRN_PERIODS FDP
,FA_CATEGORIES_B FC
,FA_DISTRIBUTION_HISTORY FDH
,GL_CODE_COMBINATIONS GCCI
,fnd_flex_values_vl A6
,FA_LOCATIONS FL
,FA_ADJUSTMENTS FA
,FA_MC_BOOK_CONTROLS FBC
WHERE 1=1
AND FB.book_type_code IN ('MX FA STAT BOOK MXN USD','CA FA STAT BOOK CAD USD')
AND FR.ASSET_ID=FAB.ASSET_ID
AND FTH.ASSET_ID=FAB.ASSET_ID
AND FR.book_type_code = FTH.book_type_code
AND decode (
FTH.transaction_type_code, 'REINSTATEMENT',
FR.transaction_header_id_out,
FR.transaction_header_id_in
) = FTH.transaction_header_id
AND XAH.EVENT_ID=FTH.EVENT_ID
AND XAH.JE_CATEGORY_NAME='Retirement'
AND TRUNC(XAH.ACCOUNTING_DATE) BETWEEN
(SELECT MIN(TRUNC(FD.CALENDAR_PERIOD_OPEN_DATE))
FROM FA_DEPRN_PERIODS FD
WHERE 1=1
AND (FD.BOOK_TYPE_CODE IN (:P_BOOK ) OR 'All' IN ( 'All' || :P_BOOK))
AND FD.PERIOD_NAME=:PERIOD1)
AND (SELECT MAX(TRUNC(FD.CALENDAR_PERIOD_CLOSE_DATE))
FROM FA_DEPRN_PERIODS FD
WHERE 1=1
AND (FD.BOOK_TYPE_CODE IN (:P_BOOK ) OR 'All' IN ( 'All' || :P_BOOK))
AND FD.PERIOD_NAME=:PERIOD2)
AND FB.transaction_header_id_out = FTH.transaction_header_id
AND FR.ASSET_ID=FB.ASSET_ID
AND FR.book_type_code = FB.book_type_code
AND FR.asset_id = fds.asset_id
AND FR.book_type_code = FDS.book_type_code
AND FDS.DEPRN_SOURCE_CODE='DEPRN'
AND FDS.PERIOD_COUNTER BETWEEN
(SELECT MIN(PERIOD_COUNTER)
FROM FA_DEPRN_PERIODS FD
WHERE 1=1
AND (FD.BOOK_TYPE_CODE IN (:P_BOOK ) OR 'All' IN ( 'All' || :P_BOOK))
AND FD.PERIOD_NAME=:PERIOD1)
AND (SELECT MAX(PERIOD_COUNTER)
FROM FA_DEPRN_PERIODS FD
WHERE 1=1
AND (FD.BOOK_TYPE_CODE IN (:P_BOOK ) OR 'All' IN ( 'All' || :P_BOOK))
AND FD.PERIOD_NAME=:PERIOD2)
AND fdp.period_counter = fds.period_counter
AND fdp.book_type_code = fds.book_type_code
AND FAB.ASSET_CATEGORY_ID = FC.CATEGORY_ID
AND FAB.ASSET_ID = FDH.ASSET_ID
AND FB.BOOK_TYPE_CODE = FDH.BOOK_TYPE_CODE
--AND FDH.DATE_INEFFECTIVE IS NULL
AND FDH.CODE_COMBINATION_ID=GCCI.CODE_COMBINATION_ID
AND a6.flex_value = GCCI.segment6
AND a6.FLEX_VALUE_SET_ID IN
(SELECT FLEX_VALUE_SET_ID
FROM fnd_id_flex_segments
WHERE application_id='101'
AND id_flex_code='GL#'
AND enabled_flag='Y'
AND application_column_name='SEGMENT6')
AND FDH.LOCATION_ID = FL.LOCATION_ID
AND FB.BOOK_TYPE_CODE = FA.BOOK_TYPE_CODE
AND FAB.ASSET_ID = FA.ASSET_ID
AND FTH.TRANSACTION_HEADER_ID = FA.TRANSACTION_HEADER_ID
AND FB.BOOK_TYPE_CODE = FBC.BOOK_TYPE_CODE
AND FBC.SET_OF_BOOKS_ID = xah.LEDGER_ID
AND FDH.DISTRIBUTION_ID=FA.DISTRIBUTION_ID
AND (FC.SEGMENT1 IN (:P_MAJOR_CAT)
OR 'All' IN (:P_MAJOR_CAT||'All'))
AND (FC.SEGMENT2 IN (:P_MINOR_CAT)
OR 'All' IN (:P_MINOR_CAT||'All'))
AND (FB.BOOK_TYPE_CODE IN (:P_BOOK) OR LEAST (:P_BOOK) IS NULL)
)
GROUP BY
ASSET_NUMBER,
ASSET_DESCRIPTION,
MANUFACTURER_NAME,
SERIAL_NUMBER,
DATE_PLACED_IN_SERVICE,
PERIOD_NAME,
BOOK_TYPE_CODE,
TRANSACTION_HEADER_ID_IN,
SOURCE_TYPE_CODE,
ASSET_ID,
DATE_RETIRED,
ASSET_MAJOR_MINOR_CATEGORY,
DEPRN_GBU,
DEPRN_EXPENSE_ACCOUNT,
DEPRN_GBU_DESC,
LOCATION,
COMMENTS,period_counter
)
WHERE
1=1
AND (SOURCE_TYPE_CODE IN (:P_TRX_TYPE) OR 'All' IN (:P_TRX_TYPE||'All'))
ORDER BY period_counter,ASSET_NUMBER, DATE_PLACED_IN_SERVICEThe data-warehouse model — one fact surrounded by conformed dimensions (what you slice by) and measures (what you aggregate), expressed as dbt so it migrates with you. Grain: one row per source transaction.
| Element | Type | Definition |
|---|---|---|
| FA_BOOKS | dimension | dimension |
| FA_ADDITIONS_B | dimension | dimension |
| FA_DEPRN_DETAIL | dimension | dimension |
| FA_TRANSACTION_HEADERS | dimension | dimension |
| Cost Retired | measure | measure |
Every source object behind this report. Each linked table has its own page with full column descriptions, drawn from the Oracle BICC lineage and articulated for practitioners.
| Table | Reporting columns | Subject areas |
|---|---|---|
| FA_RETIREMENTS | Setup / configuration table — joined for reference, not exposed for analytics | |
| FA_BOOKS | 20 | 2 |
| FA_ADDITIONS_B | 15 | 9 |
| FA_DEPRN_DETAIL | 16 | 2 |
| FA_TRANSACTION_HEADERS | 7 | 5 |