General Ledger Trial Balance Monthly Movements Report
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.
| Account | Opening Balance | Period Debits | Period Credits | Net Movement | Closing Balance |
|---|---|---|---|---|---|
| 1000-2100-000 | $1,240,500.00 | APR-26 | APR-26 | Sample | $1,240,500.00 |
| 1000-5400-000 | $842,150.75 | MAR-26 | MAR-26 | — | $842,150.75 |
| 1000-1410-000 | $96,400.00 | FEB-26 | FEB-26 | Sample | $96,400.00 |
| 2000-2100-000 | $1,005,233.10 | JAN-26 | JAN-26 | — | $1,005,233.10 |
| 1000-6300-000 | $58,720.40 | DEC-25 | DEC-25 | Sample | $58,720.40 |
| 1000-2100-000 | $1,240,500.00 | APR-26 | APR-26 | Sample | $1,240,500.00 |
The report reads GL_BALANCES for opening and closing positions and nets period debits against credits per account and ledger.
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.
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.
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
- FND_FLEX_VALUES_VL
- FND_FLEX_VALUES_TL
- GL_LEDGERS
- FND_ID_FLEX_SEGMENTS_VL
- GL_LEDGER_LE_V
- XLE_ENTITY_PROFILES
- HZ_GEOGRAPHIES
- FND_LANGUAGES
- GL_LEDGER_NORM_SEG_VALS
- GL_BALANCES
- GL_PERIODS
- GL_CODE_COMBINATIONS
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 ASCThe 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 |
|---|---|---|
| FND_FLEX_VALUES_TL | dimension | dimension |
| GL_LEDGERS | dimension | dimension |
| FND_ID_FLEX_SEGMENTS_VL | dimension | dimension |
| GL_LEDGER_LE_V | dimension | dimension |
| Opening Balance | measure | measure |
| Period Debits | measure | measure |
| Period Credits | 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 |
|---|---|---|
| FND_FLEX_VALUES_VL | 72 | 0 |
| FND_FLEX_VALUES_TL | Setup / configuration table — joined for reference, not exposed for analytics | |
| GL_LEDGERS | 10 | 104 |
| FND_ID_FLEX_SEGMENTS_VL | Setup / configuration table — joined for reference, not exposed for analytics | |
| GL_LEDGER_LE_V | Setup / configuration table — joined for reference, not exposed for analytics | |
| XLE_ENTITY_PROFILES | 73 | 161 |
| HZ_GEOGRAPHIES | 102 | 0 |
| FND_LANGUAGES | Setup / configuration table — joined for reference, not exposed for analytics | |
| GL_LEDGER_NORM_SEG_VALS | Setup / configuration table — joined for reference, not exposed for analytics | |
| GL_BALANCES | Setup / configuration table — joined for reference, not exposed for analytics | |
| GL_PERIODS | Setup / configuration table — joined for reference, not exposed for analytics | |
| GL_CODE_COMBINATIONS | 7 | 61 |