Analytics Catalog/Oracle Fusion ERP/General Ledger/Unrealized Foreign Currency Revaluation Report
Explore the catalogReportsModulesEnterprise modelOTBI subject areasBICC PVOs
Oracle Fusion · General Ledger

Unrealized Foreign Currency Revaluation Report

General Ledger

The unrealized gain or loss from revaluing foreign-currency balances to period-end rates — by account and currency, with the rate used and the revaluation journal it produces — so finance can book and explain FX movement at close.

Related  Scoped variants of this report also exist (Banks-only and All-revaluations) — same logic, narrower account ranges.

Run note · BIP run  High-volume GL extracts can exceed BI Publisher's online output limit and time out. Run it as a scheduled process (ESS) with output bursted to file or email rather than online preview, and bound it by ledger and period.

Sample build of the Unrealized Foreign Currency Revaluation Report — reconciled, and rendered tool-neutral so it runs in Power BI, ThoughtSpot, or Tableau.

Unrealized Foreign Currency Revaluation Report
Sample build · illustrative
Filters
Conversion Date
2026-02-28
From Entity
Globex Holdings
Ledger
US Primary
Period
FEB-26
Rate Type
Standard
Reval
Sample
210
Accounts revalued
-$420K
Unrealized G/L
3
Rate gaps
AccountCurrencyEntered BalanceRevaluation RateRevalued BalanceUnrealized Gain/loss
1000-2100-000USD$1,240,500.00Sample$1,240,500.00Sample
1000-5400-000USD$842,150.75$842,150.75
1000-1410-000USD$96,400.00Sample$96,400.00Sample
2000-2100-000USD$1,005,233.10$1,005,233.10
1000-6300-000USD$58,720.40Sample$58,720.40Sample
1000-2100-000USD$1,240,500.00Sample$1,240,500.00Sample
AI Analyst · active
reading

The report reads GL_BALANCES against GL_DAILY_RATES for the revaluation date, applying each revaluation rule's account ranges from GL_REVALUATIONS.

flag

Three currency-and-date combinations have no daily rate loaded, so their balances were skipped — the unrealized total is understated until those rates are entered.

root cause & next step

Load the missing daily rates and re-run; a missing period-end rate is the most common reason a revaluation total looks too small.

Illustrative data. The live interactive version — drill-through, filters, export, and the AI Analyst — runs on your warehouse. See it live →

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

How it interconnects: this data set reads the physical tables above. Those same tables surface in OTBI as subject areas and in BICC as PVOs — three lenses on one source. Open any table to trace its subject areas and View Objects.
SQL data set · genericized · parameterized · no hardcoded segments
Show / hide SQL
SELECT /*+parallel(12)*/
			LEDGER_NAME
		,	ACCOUNTING_STRING
		,	ACCOUNT_DECSCRIPTION
		,	FUNCTIONAL_CURRENCY
		,	JOURNAL_CURRENCY
		,	FOREIGN_CURRENCY_AMOUNT
		,	FUNCTIONAL_CURRENCY_AMOUNT 				
		,	ROUND(DECODE(FOREIGN_CURRENCY_AMOUNT,0,0,(FUNCTIONAL_CURRENCY_AMOUNT/FOREIGN_CURRENCY_AMOUNT)),7) AVERAGE_RATE
		,	ROUND(REVALUATION_RATE,30) REVALUATION_RATE									
		,	(FOREIGN_CURRENCY_AMOUNT*REVALUATION_RATE)				 								REVALUATED_BALANCE
		,	DECODE(FUNCTIONAL_CURRENCY_AMOUNT,0,0,(((FOREIGN_CURRENCY_AMOUNT*REVALUATION_RATE)-FUNCTIONAL_CURRENCY_AMOUNT)/FUNCTIONAL_CURRENCY_AMOUNT)*100) VARIANCE_PERCENT
		,	(FUNCTIONAL_CURRENCY_AMOUNT-(FOREIGN_CURRENCY_AMOUNT*REVALUATION_RATE))					UNREALIZED_GAIN_LOSS_AFT_REV
		,	ENTITY
		,	chart_of_accounts_id,code_combination_id
FROM 
	(
		SELECT /*+parallel(12)*/
				GL.name 				LEDGER_NAME
			,	GCC.segment1||'.'||GCC.segment2||'.'||GCC.segment3||'.'||GCC.segment4||'.'||GCC.segment5||'.'||GCC.segment6||'.'||GCC.segment7||'.'||GCC.segment8||'.'||GCC.segment9 	ACCOUNTING_STRING
			,	FFVV.description 		ACCOUNT_DECSCRIPTION
			--,	 GL_FLEXFIELDS_PKG.GET_DESCRIPTION_SQL(GCC.CHART_OF_ACCOUNTS_ID,4,GCC.SEGMENT4) 		ACCOUNT_DECSCRIPTION
			,	GL.currency_code 		FUNCTIONAL_CURRENCY
			,	GB.currency_code 		JOURNAL_CURRENCY
			,	(NVL(GB.begin_balance_dr,0))-(NVL(GB.begin_balance_cr,0))+(NVL(GB.period_net_dr,0))-(NVL(GB.period_net_cr,0)) 					FOREIGN_CURRENCY_AMOUNT
			,	(NVL(GB.begin_balance_dr_beq,0))-(NVL(GB.begin_balance_cr_beq,0))+(NVL(GB.period_net_dr_beq,0))-(NVL(GB.period_net_cr_beq,0))  	FUNCTIONAL_CURRENCY_AMOUNT
			,	(SELECT 
						DISTINCT GDR.Conversion_Rate
                 FROM 	
						gl_daily_conversion_types 		GDC
					,	gl_daily_rates 					GDR
				 WHERE 
						1					=1
					AND GDR.conversion_type	=GDC.conversion_type
					AND GDR.from_currency 	=GB.currency_code 
					AND GDR.to_currency 	=GL.currency_code
					AND (GDC.User_Conversion_Type IN (:P_RATE_TYPE) OR LEAST (:P_RATE_TYPE) IS NULL)
					AND GDR.Conversion_Date 	=:P_CONVERSION_DATE
                 --AND Rownum = 1
				 )					 	REVALUATION_RATE
			,	GCC.segment1 			ENTITY
			,	GCC.chart_of_accounts_id,GCC.code_combination_id

		FROM
				gl_balances						GB
			,	gl_code_combinations 			GCC
			,	gl_ledgers 						GL
			,	fnd_flex_values_vl 				FFVV
					
		WHERE
			1=1
			AND GB.code_combination_id			=GCC.code_combination_id
			AND GB.ledger_id					=GL.ledger_id
			AND GCC.chart_of_accounts_id		=GL.chart_of_accounts_id
			AND GB.translated_flag	IS NOT NULL 
			AND FFVV.flex_value					=GCC.segment4
			AND FFVV.flex_value_set_id IN (SELECT FLEX_VALUE_SET_ID 
                                   FROM fnd_id_flex_segments 
                                   WHERE 
										1=1 
								   and GL.chart_of_accounts_id = id_flex_num 
								   and application_id = '101' 
                                   AND id_flex_code = 'GL#' 
                                   AND enabled_flag = 'Y' 
                                   AND application_column_name = 'SEGMENT4')
			AND EXISTS (SELECT  /*+parallel(12)*/
							CODE_COMBINATION_ID 
						FROM 
							gl_code_combinations GCC1,
							gl_revaluations GR,
							gl_reval_account_ranges GRR
						WHERE 
							1 = 1
							AND CAST(GCC1.SEGMENT4 AS NUMERIC) BETWEEN NVL(CAST(GRR.SEGMENT4_LOW AS NUMERIC), CAST(GCC1.SEGMENT4 AS NUMERIC)) AND NVL(CAST(GRR.SEGMENT4_HIGH AS NUMERIC), CAST(GCC1.SEGMENT4 AS NUMERIC))
							AND GRR.REVALUATION_ID = GR.REVALUATION_ID
							AND GCC.CODE_COMBINATION_ID = GCC1.CODE_COMBINATION_ID
							AND GL.CHART_OF_ACCOUNTS_ID=GR.CHART_OF_ACCOUNTS_ID
							AND (GR.NAME IN (:P_REVAL) OR 'All' IN (:P_REVAL||'All'))
							AND (SELECT DISTINCT GDC.User_Conversion_Type
								 FROM 	
									gl_daily_conversion_types 		GDC
								WHERE 
										1					=1
								AND GR.conversion_rate_type	=GDC.conversion_type)=:P_RATE_TYPE
							AND GCC1.account_type IN ('L','A')
						)
			AND (GL.NAME IN (SELECT DISTINCT GL.NAME
					  FROM 
						gl_ledger_set_assignments 	GLSA,
						gl_ledgers 					GLS	
					  WHERE 
							GLSA.ledger_set_id 		=GLS.ledger_id
						AND GL.ledger_id 			=GLSA.ledger_id
						AND UPPER(GL.LEDGER_CATEGORY_CODE) <> 'NONE'
						AND GLS.name = :P_LEDGER) OR GL.NAME IN (:P_LEDGER) OR 'All' IN (:P_LEDGER||'All'))
			AND CAST(GCC.segment1 AS NUMERIC) BETWEEN NVL(:P_FROM_ENTITY,CAST(GCC.segment1 AS NUMERIC)) AND NVL(:P_TO_ENTITY,CAST(GCC.segment1 AS NUMERIC))
			AND (GB.period_name IN (:P_PERIOD) OR 'All' IN (:P_PERIOD||'All'))
	)
ORDER BY 
LEDGER_NAME,
JOURNAL_CURRENCY
:P_CONVERSION_DATE :P_FROM_ENTITY :P_LEDGER :P_PERIOD :P_RATE_TYPE :P_REVAL :P_TO_ENTITY

The 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.

GL_DAILY_RATESdimensionGL_BALANCESdimensionGL_CODE_COMBINATIONSdimensionGL_LEDGERSdimensionGL_DAILY_CONVERSION_TYPESfact · one row per source transactionEntered Balance · Revalued Balance
●— fact → dimension join
ElementTypeDefinition
GL_DAILY_RATESdimensiondimension
GL_BALANCESdimensiondimension
GL_CODE_COMBINATIONSdimensiondimension
GL_LEDGERSdimensiondimension
Entered Balancemeasuremeasure
Revalued Balancemeasuremeasure
Runs on your cloud warehouse — Snowflake, BigQuery, Redshift, or Synapse on AWS, Google Cloud, Azure, or any provider. Reconciled to the source control total — 0% variance by design. You own the code, the model, and the data.
How the data gets here: a BICC bulk extract of the source tables above, on the same pattern for every report. See the extraction pattern & data flow →
See the complete model
How this report's fact and dimensions fit the full picture, via conformed keys.
General Ledger data model →Enterprise model →

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.

TableReporting columnsSubject areas
GL_DAILY_CONVERSION_TYPES220
GL_DAILY_RATES110
GL_BALANCESSetup / configuration table — joined for reference, not exposed for analytics
GL_CODE_COMBINATIONS761
GL_LEDGERS10104
FND_FLEX_VALUES_VL720
FND_ID_FLEX_SEGMENTSSetup / configuration table — joined for reference, not exposed for analytics
GL_REVALUATIONSSetup / configuration table — joined for reference, not exposed for analytics
GL_REVAL_ACCOUNT_RANGESSetup / configuration table — joined for reference, not exposed for analytics
GL_LEDGER_SET_ASSIGNMENTS238
Reporting columns = fields the report selects that are exposed as analytics attributes; subject areas = the OTBI subject areas the table appears in. Setup and configuration tables (master data, ledger and book setup, lookups) are referenced by the report's joins but aren't exposed as analytics columns or subject areas — that's expected, not a gap.