Oracle Retail11 min readBy Priyanshu Pandey

The RMS Data Model for Reporting

A guide to the most critical Oracle RMS tables every BI developer and data analyst needs to know for operational reporting.

Phase 9 · RMS Development & Customization

The essential tables you need to master to write BI queries against Oracle RMS.

11 min read📅Aug 22, 2026✍️Priyanshu Pandey📚Oracle RMS Series
OPERATIONAL REPORTING

Reporting out of RMS

While Oracle Retail Insights (RI) is the official data warehouse for the Oracle Retail suite, many retailers still write custom operational reports directly against the RMS database (or a near-real-time replica).

Navigating the 4,000+ tables in RMS can be daunting. As a BI developer, you need to focus on a few core reporting views and tables.

INVENTORY

Inventory & Stock Ledger

The most common reports in retail are inventory reports: "What do we have, where is it, and how much is it worth?"

Core Inventory Tables
ColumnTypeDescription
ITEM_LOC_SOH
Table

The real-time Stock On Hand table. Contains STOCK_ON_HAND, IN_TRANSIT_QTY, STOCK_ON_ORDER, and UNIT_COST (WAC).

TRAN_DATA
Table

The detailed transaction log. Every receipt, sale, and adjustment is logged here with a TRAN_CODE.

INV_STATUS_QTY
Table

Contains stock that is on hand but not available for sale (e.g., "Trouble", "Damaged").

⚠️

TRAN_DATA Size

Do NOT join directly to TRAN_DATA for real-time dashboards without strict partition filters (e.g., TRAN_DATE = SYSDATE). This table often contains billions of rows and requires heavy indexing to query efficiently.

DENORMALIZED HIERARCHIES

Denormalized Hierarchies

In RMS, the merchandise hierarchy is highly normalized (Dept, Class, Subclass are in separate tables). Writing joins across 5 tables just to get a roll-up report is terrible for performance.

Oracle provides Denormalized tables specifically designed for reporting.

Merchandise Hierarchy Denormalized

Use the DEPS table for departments, but for full roll-ups, look for the SUBCLASS table or specialized reporting views if your DBA has built them. However, RMS natively provides denormalized tables for Locations and Items.

Location Hierarchy Denormalized

Instead of joining STORE -> DISTRICT -> REGION -> AREA -> CHAIN, you can query the STORE_HIERARCHY table.

Querying STORE_HIERARCHY
SQL
SELECT 
    store,
    store_name,
    district,
    district_name,
    region,
    region_name,
    chain,
    chain_name
FROM 
    store_hierarchy
WHERE 
    store = 1001;

Using VDATE for Reporting

Always include the current business date on operational reports. Since server dates can shift mid-batch, pulling VDATE from the PERIOD table ensures the report's "As Of" date perfectly matches the financial postings.

Key Takeaways

  • For inventory positions, query ITEM_LOC_SOH.
  • For transaction history, query TRAN_DATA, but always filter by date partitions.
  • Use denormalized tables like STORE_HIERARCHY to avoid massive join chains.
RetailCoder
All systems operational
v1.0 Live

RC:OMS

Multi-channel order management with double-entry inventory ledger. Amazon, Flipkart, Shopify, WooCommerce — one source of truth.

Launch demo →
v1.0 Live

RC:Storefront

Self-hosted headless e-commerce. Your server, your data, zero transaction fees. Native RC:OMS inventory sync.

Visit Storefront →
Pipeline

RC:Pulse

AI-powered retail analytics and demand forecasting — built natively on top of your RC:OMS and Storefront data.

Request early access →
Built in India 🇮🇳  ·  Architected by Priyanshu PandeyTalk to an engineer →