Analytics Catalog/Oracle Fusion ERP/General Ledger/General Ledger Trial Balance Monthly Movements Report
Explore the catalogReportsModulesEnterprise modelOTBI subject areasBICC PVOs
Oracle Fusion · General Ledger

General Ledger Trial Balance Monthly Movements Report

General Ledger

A trial balance that shows each account's opening balance, the month's debit and credit movement, and the closing balance — the movement view controllers and auditors use to see what changed in a period, not just where balances landed.

Related  The movement view (opening / debits / credits / closing) that pairs with the flagship General Ledger Trial Balance Report.

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 General Ledger Trial Balance Monthly Movements Report — reconciled, and rendered tool-neutral so it runs in Power BI, ThoughtSpot, or Tableau.

General Ledger Trial Balance Monthly Movements Report
Sample build · illustrative
Filters
Entity
Globex Holdings
From Account
1000-1410-000
Ledger Name
Globex Holdings
To Account
1000-1410-000
Year
Sample
P Brand Segment1
Sample
1,420
Accounts
$3.80M
Net movement
$0 diff
In balance
AccountOpening BalancePeriod DebitsPeriod CreditsNet MovementClosing Balance
1000-2100-000$1,240,500.00APR-26APR-26Sample$1,240,500.00
1000-5400-000$842,150.75MAR-26MAR-26$842,150.75
1000-1410-000$96,400.00FEB-26FEB-26Sample$96,400.00
2000-2100-000$1,005,233.10JAN-26JAN-26$1,005,233.10
1000-6300-000$58,720.40DEC-25DEC-25Sample$58,720.40
1000-2100-000$1,240,500.00APR-26APR-26Sample$1,240,500.00
AI Analyst · active
reading

The report reads GL_BALANCES for opening and closing positions and nets period debits against credits per account and ledger.

flag

Total debits and credits tie, but one revenue account shows a large in-and-out movement — a posting and same-period reversal that nets near zero and can mask a miscoded entry.

root cause & next step

Open the account's movement detail; a big in-and-out within one period is usually a correction that should have been a single net entry — confirm the final position is right.

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 

main.Account,
COALESCE(main.Account_desc_Local_lan,main.Account_desc) account_description,
main.Account_combination,
main.currency_code,
NVl(sum(main.beginning_balance),0) beginning_balance,
NVL(sum(main.Jan_activity),0) Jan_activity,
(NVL(sum(main.beginning_balance),0) + NVL(sum(main.Jan_activity),0)) jan_ending,
NVL(sum(main.feb_activity),0) feb_activity,
(NVL(sum(main.beginning_balance),0) + NVL(sum(main.Jan_activity),0) + NVL(sum(main.feb_activity),0)) feb_ending,
NVL(sum(main.mar_activity),0) mar_activity,
((NVL(sum(main.beginning_balance),0) + NVL(sum(main.Jan_activity),0) + NVL(sum(main.feb_activity),0)) + NVL(sum(main.mar_activity),0)) mar_ending,
NVL(sum(main.apr_activity),0) apr_activity,
(((NVL(sum(main.beginning_balance),0) + NVL(sum(main.Jan_activity),0) + NVL(sum(main.feb_activity),0)) + NVL(sum(main.mar_activity),0)) + NVL(sum(main.apr_activity),0)) apr_ending,

NVL(sum(main.may_activity),0) may_activity,
((((NVL(sum(main.beginning_balance),0) + NVL(sum(main.Jan_activity),0) + NVL(sum(main.feb_activity),0)) + NVL(sum(main.mar_activity),0)) + NVL(sum(main.apr_activity),0))+NVL(sum(main.may_activity),0)) may_ending,

NVL(sum(main.jun_activity),0) jun_activity,
(((((NVL(sum(main.beginning_balance),0) + NVL(sum(main.Jan_activity),0) + NVL(sum(main.feb_activity),0)) + NVL(sum(main.mar_activity),0)) + NVL(sum(main.apr_activity),0))+NVL(sum(main.may_activity),0))+NVL(sum(main.jun_activity),0)) jun_ending,

NVL(sum(main.jul_activity),0) jul_activity,
((((((NVL(sum(main.beginning_balance),0) + NVL(sum(main.Jan_activity),0) + NVL(sum(main.feb_activity),0)) + NVL(sum(main.mar_activity),0)) + NVL(sum(main.apr_activity),0))+NVL(sum(main.may_activity),0))+NVL(sum(main.jun_activity),0))+NVL(sum(main.jul_activity),0)) jul_ending,

NVL(sum(main.aug_activity),0) aug_activity,
(((((((NVL(sum(main.beginning_balance),0) + NVL(sum(main.Jan_activity),0) + NVL(sum(main.feb_activity),0)) + NVL(sum(main.mar_activity),0)) + NVL(sum(main.apr_activity),0))+NVL(sum(main.may_activity),0))+NVL(sum(main.jun_activity),0))+NVL(sum(main.jul_activity),0))+NVL(sum(main.aug_activity),0)) aug_ending,

NVL(sum(main.sep_activity),0) sep_activity,
((((((((NVL(sum(main.beginning_balance),0) + NVL(sum(main.Jan_activity),0) + NVL(sum(main.feb_activity),0)) + NVL(sum(main.mar_activity),0)) + NVL(sum(main.apr_activity),0))+NVL(sum(main.may_activity),0))+NVL(sum(main.jun_activity),0))+NVL(sum(main.jul_activity),0))+NVL(sum(main.aug_activity),0))+NVL(sum(main.sep_activity),0)) sep_ending,

NVL(sum(main.oct_activity),0) oct_activity,
(((((((((NVL(sum(main.beginning_balance),0) + NVL(sum(main.Jan_activity),0) + NVL(sum(main.feb_activity),0)) + NVL(sum(main.mar_activity),0)) + NVL(sum(main.apr_activity),0))+NVL(sum(main.may_activity),0))+NVL(sum(main.jun_activity),0))+NVL(sum(main.jul_activity),0))+NVL(sum(main.aug_activity),0))+NVL(sum(main.sep_activity),0))+NVL(sum(main.oct_activity),0)) oct_ending,

NVL(sum(main.nov_activity),0) nov_activity,
((((((((((NVL(sum(main.beginning_balance),0) + NVL(sum(main.Jan_activity),0) + NVL(sum(main.feb_activity),0)) + NVL(sum(main.mar_activity),0)) + NVL(sum(main.apr_activity),0))+NVL(sum(main.may_activity),0))+NVL(sum(main.jun_activity),0))+NVL(sum(main.jul_activity),0))+NVL(sum(main.aug_activity),0))+NVL(sum(main.sep_activity),0))+NVL(sum(main.oct_activity),0))+NVL(sum(main.nov_activity),0)) nov_ending,

NVL(sum(main.dec_activity),0) dec_activity,
(((((((((((NVL(sum(main.beginning_balance),0) + NVL(sum(main.Jan_activity),0) + NVL(sum(main.feb_activity),0)) + NVL(sum(main.mar_activity),0)) + NVL(sum(main.apr_activity),0))+NVL(sum(main.may_activity),0))+NVL(sum(main.jun_activity),0))+NVL(sum(main.jul_activity),0))+NVL(sum(main.aug_activity),0))+NVL(sum(main.sep_activity),0))+NVL(sum(main.oct_activity),0))+NVL(sum(main.nov_activity),0))+NVL(sum(main.dec_activity),0)) dec_ending,

NVL(sum(main.dec_adj_activity),0) dec_adj_activity,
((((((((((((NVL(sum(main.beginning_balance),0) + NVL(sum(main.Jan_activity),0) + NVL(sum(main.feb_activity),0)) + NVL(sum(main.mar_activity),0)) + NVL(sum(main.apr_activity),0))+NVL(sum(main.may_activity),0))+NVL(sum(main.jun_activity),0))+NVL(sum(main.jul_activity),0))+NVL(sum(main.aug_activity),0))+NVL(sum(main.sep_activity),0))+NVL(sum(main.oct_activity),0))+NVL(sum(main.nov_activity),0))+NVL(sum(main.dec_activity),0))+NVL(sum(main.dec_adj_activity),0)) dec_adj_ending

FROM 

(SELECT
	  gcc.segment4    Account,
	  (GL_FLEXFIELDS_PKG.GET_DESCRIPTION_SQL(GCC.CHART_OF_ACCOUNTS_ID,4,gcc.segment4)) Account_desc,
	  (
	  select ffvtl.description
						from fnd_flex_values_vl ffv,
						     fnd_flex_values_tl ffvtl ,
						     gl_ledgers gll,
							 FND_ID_FLEX_SEGMENTS_VL ffs,
							 GL_LEDGER_LE_V lele,
							 xle_entity_profiles lep,
							 hz_geographies geo,
							 fnd_languages lan,
							 gl_ledger_norm_seg_vals leseg
						where 1=1 
						and gll.CHART_OF_ACCOUNTS_ID = ffs.ID_FLEX_NUM 
						and ffs.segment_name = 'Account'
						and ffs.FLEX_VALUE_SET_ID = ffv.FLEX_VALUE_SET_ID
						and ffv.flex_value = gcc.segment4
						and gll.ledger_id =lele.ledger_id
                        and lele.legal_entity_id=lep.legal_entity_id
                        and lep.geography_id=geo.geography_id
						and ffv.flex_value_id = ffvtl.flex_value_id
                        and ffvtl.LANGUAGE= lan.LANGUAGE_CODE
					    and lan.ISO_TERRITORY=geo.GEOGRAPHY_CODE
					    and leseg.ledger_id= gll.ledger_id
					    and leseg.LEGAL_ENTITY_ID=lep.legal_entity_id
                        and leseg.segment_value =gcc.segment1
						and gll.name = gl.name  and rownum=1
	  ) Account_desc_Local_lan,
	  gb.currency_code,
	  (gcc.segment1||'.'||gcc.segment2||'.'||gcc.segment3||'.'||gcc.segment4||'.'||gcc.segment5||'.'||gcc.segment6||'.'||gcc.segment7||'.'||gcc.segment8||'.'||segment9) Account_combination,
	  (select NVL (SUM (gb.begin_balance_dr), 0) - NVL (SUM (gb.begin_balance_cr), 0)
	    from dual where gp.period_num ='1') beginning_balance,
	  (select NVL (SUM (gb.period_net_dr), 0) - NVL (SUM (gb.period_net_cr), 0) cr
	    from dual where gp.period_num ='1') Jan_activity,
	  (select NVL (SUM (gb.period_net_dr), 0) - NVL (SUM (gb.period_net_cr), 0) cr
	    from dual where gp.period_num ='2') feb_activity,
	  (select NVL (SUM (gb.period_net_dr), 0) - NVL (SUM (gb.period_net_cr), 0) cr
	    from dual where gp.period_num ='3') mar_activity,
	  (select NVL (SUM (gb.period_net_dr), 0) - NVL (SUM (gb.period_net_cr), 0) cr
	    from dual where gp.period_num ='4') apr_activity,
	   (select NVL (SUM (gb.period_net_dr), 0) - NVL (SUM (gb.period_net_cr), 0) cr
	    from dual where gp.period_num ='5') may_activity,
		(select NVL (SUM (gb.period_net_dr), 0) - NVL (SUM (gb.period_net_cr), 0) cr
	    from dual where gp.period_num ='6') jun_activity,
		(select NVL (SUM (gb.period_net_dr), 0) - NVL (SUM (gb.period_net_cr), 0) cr
	    from dual where gp.period_num ='7') jul_activity,
		(select NVL (SUM (gb.period_net_dr), 0) - NVL (SUM (gb.period_net_cr), 0) cr
	    from dual where gp.period_num ='8') aug_activity,
		(select NVL (SUM (gb.period_net_dr), 0) - NVL (SUM (gb.period_net_cr), 0) cr
	    from dual where gp.period_num ='9') sep_activity,
		(select NVL (SUM (gb.period_net_dr), 0) - NVL (SUM (gb.period_net_cr), 0) cr
	    from dual where gp.period_num ='10') oct_activity,
		(select NVL (SUM (gb.period_net_dr), 0) - NVL (SUM (gb.period_net_cr), 0) cr
	    from dual where gp.period_num ='11') nov_activity,
		(select NVL (SUM (gb.period_net_dr), 0) - NVL (SUM (gb.period_net_cr), 0) cr
	    from dual where gp.period_num ='12') dec_activity,
		(select NVL (SUM (gb.period_net_dr), 0) - NVL (SUM (gb.period_net_cr), 0) cr
	    from dual where gp.period_num ='13') dec_adj_activity

from gl_balances gb,
     gl_periods gp,
	 gl_code_combinations gcc,
	 gl_ledgers gl
	 
where 1=1
 AND gb.period_name = gp.period_name
 AND gb.code_combination_id = gcc.code_combination_id
 AND gb.ledger_id = gl.ledger_id 
 AND gp.period_set_name = gl.period_set_name --'Common Calendar'
 --AND gp.adjustment_period_flag = 'N'
 and gb.currency_code=gl.currency_code
and gb.ACTUAL_FLAG ='A'
 AND gp.period_year = :P_YEAR
 AND gl.name IN nvl(:P_LEDGER_NAME, gl.name)
 --AND gcc.segment1 IN nvl(:P_ENTITY,gcc.segment1)
  and  ( nvl(gcc.segment1,0)  between nvl(:p_company_segment1,nvl(gcc.segment1,0)) and nvl(:p_company_segment2,nvl(gcc.segment1,0)) )

and  ( nvl(gcc.segment2,0)  between nvl(:p_Selling_Method_segment1,nvl(gcc.segment2,0)) and nvl(:p_Selling_Method_segment2,nvl(gcc.segment2,0)) )

and  ( nvl(gcc.segment3,0)  between nvl(:p_Cost_Center_segment1,nvl(gcc.segment3,0)) and nvl(:p_Cost_Center_segment2,nvl(gcc.segment3,0)) )

and  ( nvl(gcc.segment4,0)  between nvl(:p_account_segment1,nvl(gcc.segment4,0)) and nvl(:p_account_segment2,nvl(gcc.segment4,0)) )

and  ( nvl(gcc.segment5,0)  between nvl(:p_location_segment1,nvl(gcc.segment5,0)) and nvl(:p_location_segment2,nvl(gcc.segment5,0)) )

and  ( nvl(gcc.segment6,0)  between nvl(:p_Brand_segment1,nvl(gcc.segment6,0)) and nvl(:p_Brand_segment2,nvl(gcc.segment6,0)) )

and  ( nvl(gcc.segment7,0)  between nvl(:p_Intercompany_segment1,nvl(gcc.segment7,0)) and nvl(:p_Intercompany_segment2,nvl(gcc.segment7,0)) )

and  ( nvl(gcc.segment8,0)  between nvl(:p_Future1_segment1,nvl(gcc.segment8,0)) and nvl(:p_Future1_segment2,nvl(gcc.segment8,0)) )

and  ( nvl(gcc.segment9,0)  between nvl(:p_Future2_segment1,nvl(gcc.segment9,0)) and nvl(:p_Future2_segment2,nvl(gcc.segment9,0)) )
 --AND gl.name = 'US PRIMARY LEDGER USD'
 --AND gcc.segment4 = '111102'
 --AND gcc.segment4 in ('151309','152101','152102','216153','672051')
 ) main
  /* WHERE  1=1
main.Account_combination between NVL(LEAST(:P_FROM_ACCOUNT),main.Account_combination) and NVL(GREATEST(:P_TO_ACCOUNT),main.Account_combination) */

 GROUP By main.Account , main.Account_desc, main.Account_desc_Local_lan,
		  main.Account_combination,
		  main.currency_code
ORDER BY 1 ASC
:P_ENTITY :P_FROM_ACCOUNT :P_LEDGER_NAME :P_TO_ACCOUNT :P_YEAR :p_Brand_segment1 :p_Brand_segment2 :p_Cost_Center_segment1 :p_Cost_Center_segment2 :p_Future1_segment1 :p_Future1_segment2 :p_Future2_segment1 :p_Future2_segment2 :p_Intercompany_segment1 :p_Intercompany_segment2 :p_Selling_Method_segment1 :p_Selling_Method_segment2 :p_account_segment1 :p_account_segment2 :p_company_segment1 :p_company_segment2 :p_location_segment1 :p_location_segment2

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.

FND_FLEX_VALUES_TLdimensionGL_LEDGERSdimensionFND_ID_FLEX_SEGMENTS_VLdimensionGL_LEDGER_LE_VdimensionFND_FLEX_VALUES_VLfact · one row per source transactionOpening Balance · Period Debits · P…
●— fact → dimension join
ElementTypeDefinition
FND_FLEX_VALUES_TLdimensiondimension
GL_LEDGERSdimensiondimension
FND_ID_FLEX_SEGMENTS_VLdimensiondimension
GL_LEDGER_LE_Vdimensiondimension
Opening Balancemeasuremeasure
Period Debitsmeasuremeasure
Period Creditsmeasuremeasure
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
FND_FLEX_VALUES_VL720
FND_FLEX_VALUES_TLSetup / configuration table — joined for reference, not exposed for analytics
GL_LEDGERS10104
FND_ID_FLEX_SEGMENTS_VLSetup / configuration table — joined for reference, not exposed for analytics
GL_LEDGER_LE_VSetup / configuration table — joined for reference, not exposed for analytics
XLE_ENTITY_PROFILES73161
HZ_GEOGRAPHIES1020
FND_LANGUAGESSetup / configuration table — joined for reference, not exposed for analytics
GL_LEDGER_NORM_SEG_VALSSetup / configuration table — joined for reference, not exposed for analytics
GL_BALANCESSetup / configuration table — joined for reference, not exposed for analytics
GL_PERIODSSetup / configuration table — joined for reference, not exposed for analytics
GL_CODE_COMBINATIONS761
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.