EPM Data Integration · Comprehensive Course
Deep Dive Free
🚨
Action Required — 25.09 Scheduler Migration Deadline
The "Migrate Schedules to Platform Job Scheduler" utility is removed in the September 2025 (25.09) update. Any Data Management scheduled jobs not migrated before then will be permanently lost. See for steps. Not applicable to Account Reconciliation or Profitability & Cost Management.
Eliot — your guide
👤
Look, I'm going to break this down for you the way I see systems — not the way Oracle's marketing team does. Data Integration is the pipe. Your EPM apps are the tank. Your ERP, your SAP, your flat files — those are the water source. The question isn't whether data moves. The question is: do you control how it moves, or does it control you? That's what this course is about.
Module 01 · Foundation

EPM Data Integration — Platform Overview

The successor to FDMEE and Data Management. An auditable, extensible ETL+ pipeline connecting any source to any Oracle EPM Cloud business process.

Replaces FDMEE / Data Management All EPM Business Processes 4-Step Pipeline Any Source · Any Target · Any Volume
The three external load methods
📄

Native Import

Pre-mapped files for all EPM business processes. Data must match expected format. Drill-through from release 22.08 onwards.

🔌

REST API

Programmatic loads via importDataSlice. Used for real-time triggers, Groovy Business Rules, and middleware integration patterns.

⚙️

Data Integration

Full governed pipeline. All EPM Business Processes. Any source, any volume. Includes the EPM Integration Agent for on-premises connectivity.

The four-step pipeline — what happens to your data
Step 1
Import
Step 2
Validate
Step 3
Export
Step 4
Check

Import pulls source data into staging tables (TDATASEG_T). Validate applies member mappings and expressions — unmapped members surface here. Export pushes mapped data into the EPM target Essbase cube. Check runs optional Business Rules (e.g. consolidation trigger). Every step logs to Process Details.

Why Data Integration is more than ETL

🗺️ Member Mapping Engine

Explicit, Between, In, Like — four rule types with deterministic priority order. SQL Mapping and Expressions for complex transformations without writing code.

🔍 Audit Transparency

Every load is auditable. Workbench shows source-to-target data with original values. Process Details records timing, row counts, and errors per step.

📤 Writeback Capability

Not just inbound. Push EPM budget and actual data back to Oracle Cloud ERP GL journal interface or directly to ERP Essbase cubes.

🔗 Drill-Through

Navigate from an EPM cell all the way back to the ERP source transaction — via URL, Agent SQL query, BI Publisher report, or custom presentation layer.

ℹ️
Migration note: Data Integration runs on the same data model as classic Data Management. All existing Data Load Rules and mappings are visible in both UIs. New features ship only in Data Integration — Data Management is being progressively retired starting from the 23.07 update.
BrainSpring study material. This course is produced independently for educational purposes. All product names and feature descriptions refer to Oracle EPM Cloud. This is not an official Oracle publication. Always validate against the current Oracle documentation for your environment version.
Eliot
👤
Every system I've ever hacked had one thing in common — an exposed pipe with no one watching it. The EPM Integration Agent is different. Oracle designed it so credentials stay in the cloud, not on your server. The Agent polls. It doesn't listen. That's a security architecture choice, and it's a good one. Pay attention to where data actually flows, not where the UI says it flows.
Module 02 · Architecture

Integration Architecture & EPM Agent

How cloud and on-premises sources connect to EPM. The Integration Agent is the secure bridge for anything that isn't a native cloud-to-cloud connection.

Architecture overview
Source
Oracle Cloud ERP / HCM / NetSuite
⟷ direct ⟷
Target
Cloud EPM
Source
On-Prem EBS · PeopleSoft · SQL DB
Agent
EPM Integration Agent
Target
Cloud EPM
Source
3rd-Party APIs (Workday, SFDC, SAP)
⟷ scripted ⟷
Agent
Python / Groovy Pre/Post Scripts

Cloud EPM orchestrates all jobs end-to-end. The Agent polls for work, executes SQL locally, and returns a data file upward. Credentials live in the cloud, never on the agent server.

Why the Agent matters — the FDMEE replacement
🪶

Lightweight footprint

Similar install to EPMAutomate. Minimal configuration. Connectivity credentials stored securely in cloud — not on the local server. Agent polls cloud for jobs rather than exposing a port.

📦

Pre-seeded GL extracts

Ships with ready-made SQL queries for Oracle EBS General Ledger and PeopleSoft GL. Any other source uses custom SQL queries you define in the UI.

📝

Script extensions

Python (Jython) or Groovy pre/post-process scripts call any REST API — Workday, Salesforce, SAP BAPIs — without middleware or OIC. The scripting engine is full-featured.

🔍

No-URL drill-through

Drill from an EPM cell into on-premises transaction data without publishing a URL. The Agent resolves the drill query live using its SQL connection.

JDBC source compatibility
Oracle DatabaseMS SQL ServerSnowflakeTeradataIBM DB2Apache HiveMySQLJD Edwards (DAD)Any Type 3 / 4 JDBC driver
Cloud compute deployment

The Agent does not have to run on-premises. Deploying it on an Oracle Cloud Infrastructure (OCI) compute node creates a 100% cloud solution. Use Dynamic Routing Gateway (DRG) and VPN to reach on-premises resources from OCI. This also enables direct connectivity to Autonomous Data Warehouse (ADW) and Autonomous Transaction Processing (ATP) without any extra configuration.

3rd-party ERP integration patterns
ERPFlat fileAgentOIC
SAPSAP Basis exports CSV → EPMAutomate uploadsAgent + Groovy BAPI calls, or JDBC (check SAP licence)SAP Adapter + OIC REST to EPM
JD EdwardsJDE extract → EPMAutomateAgent + Data Access Driver (DAD)JDE Adapter available in OIC
Workday / SFDCAPI export → stage as CSVAgent + Python script calling REST APIOIC pre-built connectors
💡
Launch from Groovy: Define a Connection object in Data Integration, then call the Data Integration REST API from a Groovy Business Rule using operation.application.getConnection("DM").post(). Pair with an Action Menu item in Planning — users click a button on a form, and the integration fires automatically.
Agent installation — step by step
1

Download from EPM Cloud console

In Cloud EPM: Navigator → Data Integration → Actions → Agent. Download the installer for your OS (Windows or Linux). The installer is version-matched to your Cloud EPM instance — always re-download after a Cloud update if the Agent version is out of sync.

2

Run the installer

Interactive or silent mode. Default install path: C:\Oracle\EPMAgent (Windows) or /home/oracle/EPMAgent (Linux). Creates three key folders: bin (executables), appdata (configs and logs), epmagent.log (root log file).

3

Encrypt credentials

Run encryptpassword.bat (Windows) or encryptpassword.sh (Linux) from the bin folder. This generates an encrypted password string to use in agentparams.ini — never store plaintext passwords in the config file.

4

Configure agentparams.ini

Edit EPMAgent/appdata/agentparams.ini. Set the required parameters (see table below). This is the single configuration file that controls all Agent behaviour.

5

Create the Cluster in Cloud EPM

In Data Integration: Actions → Agent → Clusters → + Add. Set Cluster Name (must match AGENT_NAME in agentparams.ini exactly), select connection mode (Async recommended), and save. The Cluster is how Cloud EPM routes jobs to the correct Agent instance.

6

Start the Agent and verify

Run epmagent.bat start or epmagent.sh start. Check epmagent.log for a Connected to EPM Cloud confirmation line. In Cloud EPM, the Cluster status should show Active.

agentparams.ini key parameters
ParameterDescriptionExample
AGENT_NAMEMust match the Cluster Name created in Cloud EPM exactly (case-sensitive)PROD_AGENT_01
EPM_AGENT_HOMERoot install directory of the AgentC:\Oracle\EPMAgent
EPM_APP_DATA_HOMELocation of the appdata folder (configs, logs, scripts)C:\Oracle\EPMAgent\appdata
CUSTOM_CLASS_PATHPath to additional JDBC driver jars (Snowflake, SQL Server, etc.)C:\Oracle\EPMAgent\jdbc\snowflake-jdbc-3.13.jar
POLL_INTERVALSeconds between Cloud EPM polls for queued jobs. Default: 55
MAX_PARALLEL_JOBSMaximum concurrent jobs the Agent will execute simultaneously3
Synchronous vs asynchronous connection modes
⬅️

Synchronous (Web URL)

Cloud EPM makes a direct inbound call to the Agent via a published URL. Faster response — no polling delay. Requires inbound network access from Oracle Cloud to your Agent server (firewall rule, reverse proxy, or DMZ). Rarely used in practice.

🔄

Asynchronous (Poll — recommended)

Agent polls Cloud EPM at intervals (default 5s) for queued jobs. No inbound ports required — the Agent initiates all connections outbound. Credentials never touch the local machine. This is the security-first architecture and the recommended mode for all production deployments.

Event script hooks (BefExtract / AftExtract)

The Agent supports Jython (Python) or Groovy pre/post-process scripts that execute around each integration run. Scripts receive job context variables including job type, session ID, and bind variable values.

EventTimingCommon use
BefExtractBefore SQL query runs against sourceValidate source DB connectivity, pre-stage data, set session variables
AftExtractAfter SQL query, before file sent to CloudTransform or filter the extracted file, add audit header rows
BefExportBefore writeback export data sent to AgentPrepare target table for incoming data (truncate staging table)
AftExportAfter writeback INSERT statements completeSend Slack/email notification, trigger downstream process, log completion
💡
Slack notification example (AftExtract Groovy): Use the new URL("https://hooks.slack.com/...").openConnection() pattern in an AftExtract Groovy script to post a completion message to a Slack channel after every successful Agent job. The script receives jobName, startPeriod, and endPeriod as context variables — include them in the notification body for instant traceability.
Eliot
👤
First rule of system access: use the right credentials, configured the right way. SSO accounts look fine on the surface. They authenticate in the browser. But they can't authenticate via API. Data Integration doesn't use your browser — it makes REST calls. That's why a federated account fails every single time, even though the same human can log in manually. The system and the human are not the same entity.
Module 03 · Setup

Creating the ERP Cloud Connection

The foundational step before any GL data, metadata, or writeback can flow. A one-time setup that underpins all ERP integration patterns.

Prerequisites checklist
  • Non-SSO native ERP service account — must authenticate via username/password API call, not via federated/SAML identity. Password ideally set to never expire.
  • Required GL job role — one of: Financial Analyst, General Accountant, or General Accounting Manager in Oracle Fusion security.
  • Registered EPM target application — the Planning, FCCS, or other EPM application must already exist.
  • Correct ERP pod URL — log into ERP first, copy URL from browser. Format: https://xxxx.fa.ocs.oraclecloud.com. No trailing slash. Not the IDCS redirect URL.
Step-by-step: create the source connection
1

Actions → Applications → Connections

In Data Integration, go to Actions → Applications. Click the Connections chain-link icon in the toolbar.

2

+ → Oracle Cloud ERP

Click the "+" dropdown. Choose Oracle Cloud ERP. (Other types include Oracle HCM Cloud, NetSuite.)

3

Enter connection details

Fill: Connection Name (e.g. ERP_Demo), Service URL, Username, Password. The Connection Name you set here is referenced everywhere — integrations, ESS jobs, writeback configs, BI Publisher setups.

4

Test Connection → OK

Click Test Connection first. Successful response confirms URL format, credentials, network, and GL roles are all correct. Only then save with OK. If the test fails, go to Module 07 Troubleshooting.

⚠️
URL gotcha: Remove any trailing slash "/". https://xxxx.fa.ocs.oraclecloud.com/ → Invalid URL error. Correct: https://xxxx.fa.ocs.oraclecloud.com
Register the ERP source application
1

Actions → Applications → + Add

Category = Data Source, Type = Oracle Cloud ERP.

2

Select connection and apply filter

Choose your registered connection (e.g. ERP_Demo). Use the optional Application Filter (e.g. InFusionLedger) to import only specific ledgers. Without a filter, all GL ledgers import.

3

Import Applications

A background ESS job runs and imports the application. Monitor in Process Details. Once complete: Period Mappings auto-import, Drill URL auto-sets. Neither can be manually added in the new Data Integration UI.

Postman / cURL diagnostic test

When Test Connection fails with an unclear error, use Postman or cURL to isolate the issue. The response tells you exactly what's wrong — credentials, role, IP firewall.

// POST — ERP REST API endpoint URL: https://<your-erp-pod>/fscmRestApi/resources/latest/erpintegrations // JSON Body { "OperationName": "submitESSJobRequest", "JobPackageName": "oracle/apps/ess/financials/generalLedger/ledgers/ledgerDefinitions", "JobDefName": "ExtractCubeInformation", "ESSParameters": "null" } // HTTP 201 CREATED → credentials + roles are good // HTTP 401 → authentication failure (wrong password or SSO account) // HTTP 403 → IP Firewall / Allowlist blocking EPM Cloud IPs
Eliot
👤
Four screens. That's all an integration is. General → Map Dimensions → Map Members → Options. But don't mistake simplicity for triviality. The mapping rules you write here are the ones that decide whether your CFO sees the right numbers or the wrong ones. Overlapping period keys. Wildcard mappings that match too broadly. Source filters that return a million cells. These are the bugs that surface at 11pm on close day. Build it right once.
Module 04 · Configuration

Configuring an Integration — End to End

The complete four-screen wizard. Period mapping, category mapping, dimension mapping, member mapping, source filters — all in sequence.

Step A — Period mapping

Default — no mapping needed

ERP and EPM period names match exactly. Data Integration uses the global calendar. Most common scenario — do nothing.

Explicit — mapping required

ERP and EPM period names differ (e.g. "Dec-22" vs "FY22-Dec"). Create Source Mapping via Actions → Period Mapping. Set integration to use Explicit type.

⚠️
Overlapping Period Keys — including adjustment periods in Source Mapping — cause record duplication AND import failures. Always verify uniqueness. After adding new ERP periods, run Application Update.
Step B — Category mapping

Maps ERP ledger categories (e.g. Actual) to EPM Scenario members (e.g. Current). Navigate: Actions → Category Mapping. Set the ERP Category, Frequency (Monthly / Quarterly / Annually), and Target EPM Category.

Step C — Four-screen integration wizard
1

General tab — Name, Location, Source, Target

Click + → Integration. Enter meaningful Name and Location. Select Source (e.g. InFusionLedger) and Target (e.g. Vision). Set Target Cube, Category Mapping. If reusing an existing Location, it must have been created for the same Source/Target pair.

2

Map Dimensions tab

Map each source segment to its target dimension (e.g. Company → Entity, Account → Account). Build Expressions for complex transforms. Best practice: use Expressions or SQL Mapping instead of * to * wildcards — wildcards are slower and harder to audit. Access advanced options via the ⚙ cog per dimension row.

3

Map Members tab

Define Source → Target member mappings per dimension. Use the Member Selector — not manual typing — to avoid casing mismatches. Additional types (Between, In, Like, Multi-Dim) via magnifying glass icon. Set Processing Order where rules may conflict.

4

Options tab — filters, period type, load method

Define Source Filters (default: iLvl0 members all dimensions). Set Period Mapping Type (Default or Explicit). Choose Load Method: Numeric Data Only / All Data with Data Protection / Replace / Merge. Set Batch Size (default 10,000). Configure Drill Region and validation message display.

Mapping rule priority order
TypeExamplePriorityBest for
Explicit4001-GBP → Revenue_UKHighest — always winsExact one-to-one overrides
In5001,5003,5007 → DirectCosts2ndDiscrete, non-contiguous codes
Between4000–4999 → Revenue3rdRanges of numeric GL codes
LikeIC_* → ICElimAcctLowestWildcard / pattern match as fallback
Running the integration

Play button on the integration row

Set Import Mode (Replace / Append / Recalculate), Export Mode (Store Data / Add Data / Subtract / Replace), and Start/End Periods. Click Run. Monitor in-browser or click "Continue Offline" and track via Process Details.

Setup checklist: Connection created → ERP Application registered → Period Mappings defined (if needed) → Category Mappings set → Integration General configured → Dimension Mappings → Member Mappings → Filters/Options → Execute → Validate in Process Details.
Eliot
👤
The CSV header. That's the thing people don't think about until it breaks. You register a custom application against a CSV file. The column headers become your dimension list. Six months later, someone adds a column to the BIP report. Nothing fails. No error. The data just starts landing in the wrong dimensions. That's the kind of silent bug that lives in production for three months before someone notices the numbers are wrong. Watch your headers.
Module 05 · Advanced Integration

Metadata Integration & Custom ERP Extracts

Chart of Accounts metadata loading, BI Publisher custom queries, ESS Job execution mode, and drill-back to source transactions.

Integrating Chart of Accounts metadata from ERP

Loads the Oracle GL hierarchy directly into EPM dimension members — segment values, parent-child relationships, descriptions, account type, hierarchy top node — without manual dimension maintenance.

1

Register the COA application

Category = Data Source, Type = Oracle ERP Cloud (Chart of Accounts). Exposes metadata dimensions: Segment Value, Description, Parent Value, Hierarchy Top Node, Level, Account Type, Variance Reporting.

2

Set source filters

Configure: COA Application Name (e.g. InFusionLedger), Segment Name (e.g. Account), Hierarchy Top Node (e.g. All Account Values), Refresh from Source = Yes.

3

Create the metadata integration

Source = COA application, Target = EPM Account dimension. Map and run. EPM dimension members update automatically on each execution.

Prepackaged ERP data extracts (ready to use)
📦
Four out-of-the-box extracts: Payable Transactions, Receivable Transactions, Trial Balance - Average, Trial Balance. Register via matching Type. Only periods and Ledger ID can be passed at runtime — all other filters are predefined.
Custom BI Publisher extract — 4-step build
1

Create the BIP report in Fusion

Write SQL against GL or other Fusion tables. Specify bind variables (:PERIOD_NAME, :LEDGER_NAME). Create Data Model → Report layout. Output format = CSV only — all other formats fail. Save in Custom folder (not Shared). Bind parameters use tilde syntax: ~PERIOD~.

2

Create an ESS Job for large reports

Direct BIP mode times out after 5 minutes. For large extracts, create an Oracle Enterprise Scheduler (ESS) Job in Fusion. Job Type = BIPJobType, provide Report ID path. ESS runs asynchronously, uploads CSV to UCM. EPM polls UCM — up to 6.5 minutes total wait (12 retries × 5s intervals, increasing).

3

Register the custom application

Upload sample CSV to EPM Inbox. Create application: Category = Data Source, Type = Oracle ERP Cloud (Custom). Browse to CSV — column headers define the dimension list. The filename becomes the application name. If the report header ever changes without re-registering, data maps to wrong dimensions silently.

4

Configure execution method and parameters

In Application Options: set Execution Method = BIP Report (sync, 5-min timeout) or ESS Job (async). Provide Report Name or ESS Job Path/Name. Define Parameter List e.g. argument1=Ledger ES;argument2=$START_PERIODKEY[MMM-yy]$. Dynamic parameters via custom Property and $PropertyName$ substitution.

🚨
Critical — CSV header stability: The dimension list locks at registration time based on the CSV header. Any subsequent change to the BIP report's column structure without re-registering means data extracts into wrong dimensions. No error is thrown. This is a silent data integrity failure.
Execution mode comparison
MethodModeTimeoutRetriesUse case
BIP ReportSynchronous30 seconds3 retries (5s intervals)Small, fast queries
ESS JobAsynchronous~6.5 minutes12 retries (escalating)Large extracts, complex joins
Eliot
👤
Three writeback patterns. Three completely different destinations. Actuals go to GL_INTERFACE. Budget goes to the ERP Essbase cube. On-premises writeback goes through the Agent into a database table. The number one mistake is treating them as variations of the same thing. They're not. The ERP pre-validation for budgets runs in a different system from the ImportJournals job for actuals. Misdiagnose the destination and you'll be reading the wrong log, contacting the wrong team, and wondering why fixing the mapping didn't change anything.
Module 06 · Writeback

Writing Back — All Three Patterns

Actuals to GL Journal Interface, Budget to ERP Essbase cube, on-premises to database via EPM Agent. Each has its own architecture, prerequisites, configuration path, and failure modes.

The three writeback patterns — side by side
EPM SOURCE EPBCS / FCCS Actuals Scenario Budget / Plan Any EPM Value Actuals Budget Agent WB DATA INTEGRATION Export step Flat file → UCM EPM → ERP EPM AGENT INSERT statements GL_INTERFACE table → ImportJournals ESS job → GL ERP Essbase cube → Budgetary Control On-premises database Any JDBC-compatible table Actuals WB Budget WB Agent WB
AttributeActuals WritebackBudget WritebackAgent Writeback
ERP DestinationGL_INTERFACE tableERP Essbase cubeAny on-prem DB table
Downstream processImportJournals ESS job → GL journal entriesTransfer Budget Balances to Essbase → Budgetary ControlNone — INSERT directly to target table
Balance Type settingActualBudgetN/A (export application)
ERP prerequisiteJournal Source + Category defined in ERP; integration user has journal authorisationERP Essbase cube created via "Create GL Balances Cube"; scenarios deployed via "Create Scenario Dimension Members"Agent installed; target table registered as export application
Error locationERP Scheduled Processes log (GL side)ERP → General Accounting Dashboard → Correct Budget Import ErrorsAgent process log + EPM Process Details
Period range ruleStart/end must be within a single fiscal year — cross-year = duplicate dataMap fiscal calendar if ERP and EPM calendars differNo restriction — controlled by EPM export filter
Pattern 1 — Actuals writeback to Oracle GL
EPM Application Actuals Scenario Data Integration Export → flat file → UCM GL_INTERFACE ERP staging table ImportJournals ESS job in ERP Oracle GL Posted journals 1 · extract 2 · populate 3 · trigger 4 · post
Actuals writeback — ERP prerequisites checklist
  • ERP Essbase cube exists — created via "Create General Ledger Balances Cube" ESS job. This cube underlies all GL balance integration in both directions.
  • Journal Source defined in ERP — navigate to ERP: General Ledger → Journal → Manage Journal Sources. Must match exactly what you enter in the Data Integration Application Options. Case-sensitive.
  • Journal Category defined in ERP — navigate to ERP: General Ledger → Journal → Manage Journal Categories. Same exact-match requirement.
  • Integration user has Journal Source authorisation — in ERP security, the service account must be authorised to post journals from the specific Journal Source you defined.
  • Do NOT cross fiscal years in a single run — start and end periods must be within the same fiscal year. Cross-year date ranges cause duplicate data. Run as two separate integrations if spanning year-end.
Actuals writeback — step-by-step configuration
1

Application Options — set Balance Type

In Data Integration: Actions → Applications → click the EPM source application → Application Detail → Options tab. Set Balance Type = Actual. Enter Journal Source (must match ERP exactly). Enter Journal Category (must match ERP exactly). Click Save.

2

Create the integration — reversed direction

Click + → Integration. In General tab: Source = EPM application (e.g. Vision), Target = ERP Ledger application (e.g. InFusionLedger). Category = Actual. Note: this reverses the normal direction — EPM is the source, ERP is the target.

3

Map dimensions in reverse

On the Map Dimensions tab: map EPM dimensions back to ERP GL segments. Entity → Company segment, Account → Account segment, Cost Centre → Department segment. All mapped ERP values must be valid in ERP — pre-validation rejects any row with an invalid segment value.

4

Period mapping — Application Mapping tab

Navigate to Actions → Period Mapping → Application Mapping tab. Select the ERP GL target application. Add one row per period: set Period Key (last day of month, MM/DD/YY format in US locale), Target Period Month (must match ERP accounting calendar exactly), and Target Period Year. Periods crossing fiscal years require separate integrations.

5

Run and verify

Execute the integration. In Process Details, a successful run shows status is: SUCCEEDED from the ERP ESS job. Verify in ERP: Scheduled Processes → find the ImportJournals job → output shows journals created. Or navigate to General Ledger → Journals → Manage Journals and filter by your Journal Source.

Pattern 2 — Budget writeback to ERP Essbase / Budgetary Control
EPM Planning Budget / Plan scenario Data Integration Import Budget Amounts ERP Essbase Cube Control Budget dimension Budgetary Control Funds Available check PO / AP Commitment control ERP prerequisite: "Create GL Balances Cube" + "Create Scenario Dimension Members" jobs must be run first
Budget writeback — ERP prerequisites checklist
  • "Create General Ledger Balances Cube" ESS job run in ERP — creates the underlying ERP Essbase cube that holds both GL actuals balances and budget balances. Without this, there is no target cube for budget writeback.
  • Budget/Forecast scenarios added to Chart of Accounts — in ERP: navigate to Setup and Maintenance → Manage Chart of Accounts Value Sets. Add the budget scenario as a value in the Scenario value set.
  • "Create Scenario Dimension Members" ESS job run in ERP — deploys the scenario values added above to the ERP Essbase cube. Verify in Smart View: the new budget scenario should appear under the ERP Scenario dimension.
  • Control Budget created with Source Budget Type = "EPM Financials module" — in ERP Budgetary Control. Not "Hyperion Planning" — that is a different type. Currency must match the EPM Planning application currency. The Control Budget name is case-sensitive.
  • Budgetary Control module enabled in ERP — required if you are pushing budget data for commitment control. The Budgetary Control work area must be accessible by the integration service account.
Budget writeback — step-by-step configuration
1

Register Budgetary Control as a target application

In Data Integration: Actions → Applications → + Add → Data Export. Import the Budgetary Control Essbase cube — this generates a target application appended with "BAR" in the application name (Budget Adjustment Request). Do not change, add, or delete dimension details on this system-generated application.

2

Application Options — set Balance Type = Budget

On the EPM source application: Application Detail → Options tab. Set Balance Type = Budget. Set Source Budget Type = EPM Financials module (not Hyperion Planning). Set the Control Budget Name exactly as configured in ERP — case-sensitive.

3

Create the integration and map dimensions

Source = EPM Planning application, Target = Budgetary Control BAR application. Map EPM dimensions to ERP Control Budget segments. If the EPM and ERP calendars differ, map Year and Period dimensions explicitly. Set default values for any Budget Segments not present in EPM.

4

Run and verify in ERP

Execute. In ERP, navigate to: Budgetary Control → Review Budget Balances. Verify the budget amounts have loaded against the correct Control Budget and periods. If the ERP system is not configured for continuous balance transfer, first submit the "Transfer Control Budget Balances to Essbase" process to update the cube.

⚠️
Budgetary Control writeback vs standard budget writeback: Writing budget data to the standard ERP GL Balances cube (for reporting) is different from writing to a Budgetary Control cube (for commitment control enforcement). The standard GL route uses Balance Type = Budget and targets the GL Essbase cube directly. The Budgetary Control route uses the BAR application type and targets Budgetary Control specifically. Mixing up the target application type causes silent data routing failures.
Pattern 3 — On-premises writeback via EPM Integration Agent
EPM Cloud Any EPM application Data Integration Export → TDATASEGW EPM Agent BefExport / AftExport On-prem DB table INSERT (auto or custom) AftExport script Notify / trigger next Simple mode: Agent auto-generates INSERT. Advanced mode: you supply the INSERT statement with column mappings.
1

Create a CSV with target table column headers

Create a CSV file whose headers exactly match the column names of the target on-premises database table. The filename becomes the application name in Data Integration. This is the column contract — every header must be an exact, case-sensitive match.

2

Register a Data Export application

In Data Integration: Actions → Applications → + Add → Data Export → On Premise Database. Upload the CSV. Change the Amount dimension class to Amount and clear the Data Table Column Name for numeric columns. Enter database credentials and table name in the Application Options tab.

3

Choose Simple or Advanced INSERT mode

Simple: Agent auto-generates INSERT INTO table (col1, col2…) VALUES (?,?…) statements. Use when EPM dimension names match DB column names exactly. Advanced: You supply a custom INSERT statement with SQL expressions. Use when transformation is needed — e.g. concatenating EPM dimensions, applying functions, or inserting constants.

4

Create the integration — EPM source → Export target

Source = EPM application, Target = the Data Export application you registered. Map EPM dimensions to the export application's column definitions. Run the integration — the Agent downloads the export file, executes INSERT statements, and logs completion.

5

Add BefExport / AftExport event scripts (optional)

BefExport: runs before INSERT — use to TRUNCATE the target table or validate connectivity. AftExport: runs after INSERT — use to send a Slack/email notification, trigger a downstream process, or log a completion record. Scripts are Jython or Groovy, placed in the Agent's appdata/scripts folder.

Writeback troubleshooting — all three patterns
"Create Scenario Dimension Members" ESS job hasn't been run after adding the budget scenario to the CoA value set
Error / symptomPatternRoot causeResolution
ORA-01400: cannot insert NULLActualsA required GL_INTERFACE column is null — a mandatory ERP GL segment has no mappingCheck dimension mappings. Every required ERP segment (Ledger ID, Currency, Accounting Date, ACTUAL_FLAG) must be populated. Use an Expression to set a constant value for non-EPM segments.
ORA-06502: character to number conversionActualsA numeric GL_INTERFACE column is receiving a text value — typically Data Access Set ID = -1Verify the ERP connection's Data Access Set configuration. A -1 Data Access Set ID indicates the service account doesn't have data access to the target ledger.
EP01: date not in open/future periodActualsThe Accounting Date mapped into GL_INTERFACE falls in a closed ERP periodERP GL period must be open or future-enterable. Ask ERP admin to open the period, or map the Accounting Date to a valid open date using an Expression.
EM01: Invalid journal entry categoryActualsJournal Category in DI Application Options doesn't match the ERP-defined category — case mismatch or typoIn ERP: General Ledger → Journal → Manage Journal Categories. Copy the exact name including capitalisation and paste into DI Application Options.
Error in Validating the Budget LoadBudgetERP pre-validation rejected one or more budget rows — invalid currency, account value, or budget nameERP: General Accounting Dashboard → Correct Budget Import Errors. Review each error row. Most common: Control Budget Name mismatch (case-sensitive), currency not matching, or ERP segment value that doesn't exist.
Scenarios not visible in ERP EssbaseBudgetIn ERP Scheduled Processes: run "Create Scenario Dimension Members". Verify the scenario appears in Smart View under the ERP Essbase cube before re-running the writeback.
Agent writeback inserts 0 rows silentlyAgentColumn name mismatch between CSV header and actual database table columnsOpen the Agent process log — it logs each column mapping. Compare the header column names to the DB table DDL. Even a single character difference causes that column to silently receive no data.
Agent writeback: ORA-00942 table not foundAgentThe table name in Application Options either doesn't exist or the DB user lacks SELECT/INSERT privilegeVerify the exact schema-qualified table name (e.g. HR.ACTUALS_STAGING). Grant INSERT privilege to the DB user configured in the Application Options credentials.
GL_INTERFACE required fields — mapping reference

These are the non-nullable GL_INTERFACE columns that the ImportJournals ESS job validates before posting. Missing any one of them causes ORA-01400 NULL errors. Confirm each is mapped explicitly in your dimension mappings or set via an Expression.

GL_INTERFACE columnRequired?Typical EPM sourceNotes
LEDGER_IDRequiredERP Connection / source systemAuto-populated from the ERP target application — don't manually map
ACTUAL_FLAGRequiredSet by Balance Type = ActualMust be A for actuals, B for budgets, E for encumbrances
CURRENCY_CODERequiredEPM Currency dimension → mapped to ISO codeMust be a valid ISO 4217 currency code. A common failure: EPM stores "USD" but mapping sends "US Dollar"
ACCOUNTING_DATERequiredDerived from Period mappingMust fall within an open or future-enterable ERP GL period. Use period last-day convention.
JOURNAL_ENTRY_SOURCE_NAMERequiredApplication Options → Journal Source fieldExact match to the source defined in ERP. Integration user must be authorised for this source.
JOURNAL_ENTRY_CATEGORY_NAMERequiredApplication Options → Journal Category fieldExact match to the category defined in ERP. Common failure: trailing space.
ENTERED_DR / ENTERED_CRRequiredEPM amount valueDebit and Credit amounts must balance per journal entry. Unbalanced journals are rejected unless suspense posting is enabled in ERP.
SEGMENT1–SEGMENT30ConditionalEPM dimensions → ERP CoA segmentsMap all active Chart of Accounts segments. Unmapped active segments default to NULL and fail validation.
💡
Suspense posting diagnostic: If journals are being created but amounts are landing in the wrong accounts, check whether ERP Suspense Posting is enabled. With suspense posting enabled, GL_INTERFACE accepts journals with invalid account combinations by routing them to the suspense account — the data appears to load successfully but lands in the wrong place. Disable suspense posting during testing to surface account combination errors explicitly.
Eliot
👤
HTTP 401 vs HTTP 403. Most people confuse them. 401 is "I don't know who you are." Wrong password, SSO account. 403 is "I know exactly who you are, and you're not allowed here." IP firewall. The ERP knows your credentials are valid — it's just blocking your IP. These are fundamentally different problems. Misdiagnose them and you'll spend three hours resetting passwords for a firewall problem. Read the error code. Actually read it.
Module 07 · Operations

Troubleshooting Common Issues

Organised by failure category. Always start with Process Details in Data Integration, then trace to ERP-side ESS logs if the error references an ERP job ID.

A — Connection & initialisation errors
ErrorRoot causeResolution
HTTP 401Wrong credentials or SSO-enabled accountTest ERP login directly. Confirm account is non-SSO. Re-enter credentials in Connection.
HTTP 403IP Firewall / Allowlist blocking EPM Cloud IPsContact ERP admin to add EPM Cloud IP ranges to ERP allowlist.
Connection refused / timed outWrong pod URL, trailing slash, or ERP pod downRemove trailing slash. Validate URL. Test via Postman (Module 03).
Cannot import ERP applicationsMissing GL job role on service accountAssign: General Accountant / General Accounting Manager / Financial Analyst in ERP Identity Management.
B — No records / duplicate data
B1

Validate period mappings

Check for overlapping period keys including adjustment periods. Overlapping keys cause both duplication and import failure. Verify Default vs Explicit type matches config.

B2

Check source filters

Confirm ERP records exist for your filter conditions. Use Member Selector, not manual typing. Use Fully Qualified Members if members exist in multiple hierarchies.

B3

Essbase error 1200766 — 1M cell limit

Hard-coded in ERP Fusion Cloud. Cannot be increased by Oracle Support. Resolution: narrow source filters to reduce cells per run (e.g. filter by specific ledger, company, cost centre).

C — Drill-through failures
SymptomCauseFix
Wrong landing pageIncorrect Drill URL set in classic Data ManagementDelete and recreate ERP Source System — new UI auto-sets Drill URL.
ERP login screenUser not logged into ERP before drillingLog into ERP first. Verify service account has Financial Analyst role.
No drill resultsDrill Through not enabled; dimension classification mismatch; too many Drill Region membersEnable in Application Options. Check dimension classification consistency. Define Custom Drill Region.
Partial / wrong results1,000-member-per-dimension query limitDisable in Application Options (max 3 dimensions may exceed 1,000 members).
D — Performance optimisation

⚡ Expressions over wildcards

Replace * to * with SQL Mapping and Expressions. Significantly reduces Transform step processing time.

🔄 Quick Mode (Direct Load)

Bypasses TDATASEG staging and Validate step. No Workbench data, no drill-through — but dramatically faster for high-volume loads.

⚙️ Workflow mode

Full: All events + drill. Full No Archive: All events, no drill (TDATASEG purged after load). Simple: Import + Export only.

🗂️ Batch size & maintenance

Tune Batch Size (default 10,000). Purge historical data. Run "Maintain Data Table" and "Relocate Tablespace" from System Maintenance Tasks.

E — BIP / ESS job errors
ErrorMeaningResolution
Read timed outBIP report exceeded timeout. 3 retries (BIP) or 12 retries (ESS) exhausted.Switch Execution Method from BIP Report to ESS Job. Check UCM job timing and integration user UCM privileges.
Request ID = -1ESS job failed to trigger. Parameter mismatch. (Doc 2915658.1)Verify ESS Job Path, Name, Parameter List against Fusion Job Definition. Test resubmitting ESS job directly in ERP using integration user.
💡
Which support team? Log line contains "BEGIN: Process Log From the Ess Job" or references XXXXXXX.logERP Support first. Error directly in DI log lines → EPM Data Integration Support. Always include: Process Log, ESS log, and whether CSV was generated.
F — Unmapped member handling

Unmapped members are the most frequent cause of Validate-step failures. The Process Log surfaces the first batch of unmapped values, but diagnosing and preventing them requires a systematic approach.

SymptomCauseResolution
Validate step fails — "No mapping found for [source value]"Source member exists in staging but has no matching rule in any active mapping typeOpen Workbench, identify red-highlighted rows. Add the missing Explicit, Between, In, or Like rule. Re-run Validate only (no need to re-import).
Load aborts on first unmapped member (Planning/EPBCS)Default Essbase load behaviour — stops on first bad rowImplement Unclassified_Actuals catch-all (Like rule, source=*, highest Processing Order) to prevent rejections. Or use FCCS Partial Loading if available.
FCCS partial load — valid rows load, invalid rows appear in Process DetailsFCCS via OLU supports partial loading — valid data proceeds, invalid rows are reported not rejectedReview the rejected row list in Process Details. Add mappings and re-run for the missing values only.
New GL accounts appear mid-year with no mappingFinance added accounts in ERP without notifying the EPM teamImplement Unclassified_Actuals catch-all pattern. Configure monitoring alert when any balance appears in Unclassified_Actuals.
Dry Run shows 99 errors then stopsFCCS Dry Run mode stops after 99 errors — not a bugFix the first batch of errors and re-run Dry Run. Repeat until Dry Run completes cleanly before running the real load.
💡
Workbench re-validate shortcut: When you find unmapped members in Workbench and add the missing rules, you don't need to re-run the full integration. Click Validate in the integration run dialog without re-importing — this re-applies all mapping rules against the already-staged data in TDATASEG_T. Saves significant time on large data sets during close.
Eliot
👤
The Pipeline is the thing I wish I'd had years ago. Not because it's clever — because it makes the invisible visible. Month-end processes used to live in batch scripts nobody documented, scheduled by people who've since left the company. Now it's a visual graph. Load metadata → BSO cube → ASO cube → email notification. Every step logged. Every failure surfaced. Operationalise your integrations. Stop relying on tribal knowledge.
Module 08 · Advanced

Pipeline, Quick Mode & Roadmap

Multi-step orchestration, high-volume patterns, FCCS-specific behaviour, and where the product is heading.

Data Integration Pipeline — orchestration built in

The Pipeline (available from 23.06) creates visual, multi-step processing workflows across any Cloud EPM instance. No separate scheduler needed — Pipeline replaces the legacy Batch feature with a proper orchestration tool.

🔗

Job types in a Pipeline

Integration, Business Rule, Email notification, Copy file to/from Object Store, Open Batch, ESS Job (ERP Cloud), Clear Data, Export Dimension by Name (EDMCS). Jobs can target any Cloud EPM instance via connection.

🌊

Serial and parallel execution

Jobs within a Stage run in parallel. Stages run serially. Design your stages to match dependencies: metadata first → BSO cube → ASO cube → Business Rules → email report.

💻
Run Pipeline via REST API: Job type = pipeline, jobName = your Pipeline name. Pass variables: STARTPERIOD, ENDPERIOD, IMPORTMODE, EXPORTMODE, SEND_TO for email. Full REST API syntax available in Oracle EPM REST API documentation.
Quick Mode — export options guide
Extract optionMethodBest for
All DataMDXHybrid or ASO with filters
Level 0 DataMAXLHigh-volume ASO exports
Stored Data OnlyDATAEXPORTBSO — stored values, excludes dynamic calc
Stored + Dynamic CalculatedDATAEXPORTBSO — includes Dense dimension dynamic calc values only
⚠️
Quick Mode & EPMAutomate: runDataRule does NOT support Quick Mode. Use the runIntegration REST API with importMode: DIRECT and exportMode: REPLACE.
FCCS-specific integration behaviour

Partial loading support

Loading to Essbase via OLU: valid data loads, invalid rows reject. Process Details shows errors per row. Close teams can proceed with valid data while fixing rejected rows.

Dry Run mode (22.09)

Validate without loading. Uses importdataslice API. Stops after 99 errors. Run this before the real load on close day to surface mapping problems before they impact the cube.

Loading YTD data

Load to YTD_Input in the View dimension for Income Statement. DSO-enabled: YTD computed via Member Formulas on-the-fly. Non-DSO: computed during consolidation process.

Business rules in data load

Configurable positions: Before Extract, Before/After Import, Before/After Load, Before/After Check. Check Rule in FCCS triggers Consolidation per Entity — scope performance impact carefully.

Feature timeline (2022 → current)

Delivered

  • Direct Drill / Quick Mode Drill (22.08)
  • GL Metadata Adapter (22.07)
  • OAuth Support for Agent (22.09)
  • Data Integration Pipeline (23.06)
  • Quick Mode File without Agent (22.12)
  • EDMCS Export Dimension job types (24.02)
  • Data Management formally decommissioned (23.07)

On the horizon

  • OIC Adapter (packaged)
  • Groovy support in Data Integration
  • Attribute Dimension Loading
  • Cash Forecasting packaged adapter
  • Custom Reporting inside Data Integration
  • ERP Adapter performance improvements
Job Scheduler migration — 25.09 hard deadline
🚨
Action Required before September 2025 (25.09 update): The "Migrate Schedules to Platform Job Scheduler" utility is removed in the 25.09 update. Any Data Management scheduled jobs not migrated will be permanently lost. The old scheduling UI in Data Management was deprecated in 24.09 — jobs must now be scheduled via the EPM Platform Job Scheduler.
Migration steps
1

Option A — from Data Management

Navigate to Data Management → System Settings → System Maintenance Tasks. Run the "Migrate Schedules to Platform Job Scheduler" script. Use Preview mode first to see which schedules will be migrated without committing.

2

Option B — from EPM Platform Job Scheduler

Open the EPM Platform Job Scheduler console. Create an Integration Maintenance Script job. Select the migration option from the available script list. Same preview-before-commit approach available.

3

Verify migration

After running: open Process Details → Workflow tab → Monitor. The process log shows a report of all migrated schedules. Spot-check critical close-day schedules to confirm they appear in the EPM Platform Job Scheduler with correct timing.

Products that must migrate

Planning (EPBCS), Financial Consolidation & Close (FCCS), Tax Reporting, Strategic Modeling, Narrative Reporting. Any product where the EPM Platform Job Scheduler is available.

ℹ️

Products NOT affected

Account Reconciliation and Profitability & Cost Management — the EPM Platform Job Scheduler is not available for these products. Use EPMAutomate or the REST API for scheduling instead.

Eliot
👤
Theory is just a map. Real environments don't look like Oracle's demo slides. They have Snowflake as a data warehouse that nobody documented. They have SAP with a JDBC driver that someone installed three years ago and the password expired. They have a BIP report that outputs XML because someone clicked the wrong dropdown. These scenarios are what you'll actually face. Learn the patterns, not just the steps.
Module 09 · Real World

Real-World Scenarios & Patterns

Realistic implementation scenarios drawn from common enterprise setups. Each shows the problem, the architecture decision, and the key configuration choices.

Scenario 1 — Manufacturing company, multi-ERP close
Scenario 01 · Multi-source GL consolidation

GlobalMerge Corp: SAP in Germany, Oracle Cloud ERP in UK, NetSuite in Singapore

Problem: Three subsidiaries, three source systems, monthly close in 5 days. Finance team currently exports CSVs manually and pastes into Excel.

Solution architecture: UK (Oracle Cloud ERP) → native ERP connection via Data Integration. Germany (SAP) → EPM Agent on OCI compute node with Groovy script calling SAP BAPI GL extract. Singapore (NetSuite) → NetSuite direct connection via Data Integration.

Key configuration choices: Pipeline orchestrates all three loads in Stage 1 (parallel), then triggers consolidation Business Rule in Stage 2, then sends email notification to CFO in Stage 3. Period mappings configured for SAP's German fiscal calendar. Account mappings translate SAP cost element numbers (400000–499999) to EPM account members using Between rules.

Scenario 02 · On-premises EBS to Planning

Oracle E-Business Suite R12 on-premises → EPBCS Planning

Problem: Customer is moving to EPM Cloud but EBS stays on-premises for 3 more years. Need real-time actuals in Planning for rolling forecast re-runs.

Solution architecture: EPM Integration Agent installed on a Linux server in the customer's data centre. Pre-seeded EBS GL extract SQL runs nightly. Agent polls Cloud EPM every 5 minutes for job triggers. Groovy post-process script sends a Slack notification on completion.

Key pitfalls: EBS account code combinations (segments concatenated) must be split using Expression functions in the Dimension Mapping. Quick Mode enabled for high-volume loads — drilling disabled, workbench not available. Dry Run mode scheduled 30 minutes before the real load to catch any new unmapped accounts added that day.

Scenario 03 · BIP report timeout at scale

Custom Payables extract timing out in direct BIP mode

Problem: Custom BI Publisher report for accounts payable detail works fine in Fusion but times out in Data Integration's synchronous (direct BIP) mode. Only 20% of data loads.

Root cause: Direct BIP mode has a hard 5-minute synchronous timeout. The AP extract for a large ledger takes 8–12 minutes.

Solution: Switch Execution Method from BIP Report to ESS Job. Create an Enterprise Scheduler Job definition in Fusion wrapping the same BIP report. Set ESS Job Path, Name, and Parameter List in Application Options. The ESS job runs asynchronously — Data Integration polls UCM for up to 6.5 minutes. For extracts exceeding even that, consider partitioning the extract by ledger or period range into multiple smaller integrations.

Scenario 04 · Snowflake data warehouse as source

Enterprise data warehouse on Snowflake → EPBCS via EPM Agent

Problem: Finance data platform team built a Snowflake data warehouse aggregating 14 source systems. They want this as the single source for EPM Planning — not individual ERP connections.

Solution architecture: EPM Agent on OCI compute node (close to Snowflake's OCI region). Snowflake JDBC driver (Type 4) added to Agent CUSTOM_CLASS_PATH. Custom SQL query extracts the pre-aggregated planning data by entity, account, and period. Connection string: jdbc:snowflake://<account>.snowflakecomputing.com/?warehouse=PLANNING&role=EPM_READER.

Key benefit: Finance doesn't care which ERP a number came from — they want clean, governed data from the warehouse. One Agent connection replaces 14 ERP connections. Quick Mode Direct Load for performance on large volumes.

Scenario 05 · Budget writeback to ERP for commitment control

EPM Planning budget → Oracle Cloud ERP GL for budgetary control

Problem: Oracle Cloud ERP is configured for Budgetary Control (commitment accounting). The approved annual budget from EPBCS must be pushed to ERP GL so purchase order encumbrances are checked against it.

Solution: Writeback integration. Source = EPBCS Plan1 cube (Budget scenario). Target = Oracle Cloud ERP InFusionLedger. Balance Type = Budget. ERP Essbase cube must have budget scenarios pre-configured. Map EPBCS Entity → ERP Company segment, EPBCS Account → ERP Account segment.

Common failure: ERP pre-validation rejects rows where Currency is missing or invalid. Check via ERP General Accounting Dashboard → Correct Budget Import Errors. The Budget Name field must match exactly what is configured in ERP — case-sensitive.

Eliot
👤
You can configure integrations for months without ever understanding what's actually happening inside the database. But the moment you hit a production crisis at 11pm on close day, you'll wish you knew the staging table chain. TDATASEG isn't just a technical detail — it's the audit trail, the drill source, and the performance bottleneck, all in one table. Know it.
Module 10 · Deep Dive

Data Integration Deep Dive I

The TDATASEG staging chain, workflow mode decisions, Workbench anatomy, and the full import→validate→export lifecycle — what actually happens inside the database on every load.

The staging table family

Every Data Integration load writes to a family of internal database tables before any data ever reaches your EPM cube. Understanding this chain explains every workflow mode trade-off.

📋

TDATASEG_T (temporary)

Raw source data lands here after Import. Mappings are applied in-place during Validate — this table is overwritten. If the load fails during Validate, this table holds the partial state. Cleared at load start.

🗃️

TDATASEG (permanent)

Copied from TDATASEG_T only on successful Validate. This is the table powering Workbench and drill-through. Persists between loads. Full No Archive deletes it after Export.

🗺️

TDATAMAP_T / TDATAMAPSEG

Mapping audit tables. Store the source→target member mapping decisions applied during Validate. Used when investigating why a source value mapped to an unexpected target member.

↩️

TDATASEGW (writeback)

Writeback-specific staging table. When EPM data is written back to an on-premises target via the EPM Agent, export data is downloaded and loaded into this table before the Agent constructs INSERT statements for the destination.

The full pipeline — what happens on every load
Step 1
Import
Source data extracted from ERP/Agent/file. Written raw into TDATASEG_T. No mapping applied yet. Status = 1 (Imported).
Step 2
Validate
Member mapping rules evaluated. Source values in TDATASEG_T replaced with mapped target values. Unmapped members surface as errors here. On success: copied to TDATASEG. Status = 2 (Validated).
Step 3
Export
Mapped data pushed from staging into the Essbase cube. Load method (Replace/Merge/Subtract) applied at this step. Status = 3 (Exported). Full No Archive purges TDATASEG after this step.
Step 4
Check
Optional Business Rule execution (e.g. consolidation trigger). Status = 5 (Calculated and Exported) if Check runs. Configurable via positions: Before Extract, Before/After Import, Before/After Load, Before/After Check.
TDATASEG key columns
ColumnDescriptionPractitioner use
DATAKEYUnique integer row identifier auto-assigned on importUse in SQL Mapping expressions to inject unique identifiers into export files — common FCCS audit pattern
STATUS1=Imported, 2=Validated, 3=Exported, 5=Calc+ExportedQuery to understand where a load stopped or to verify completion state
AMOUNTThe numeric data value (source → mapped)Check for unexpected sign reversals or scaling issues post-Validate
Source segment columnsRaw source dimension values before mappingVisible in Workbench "Source" columns — compare to target to verify mappings fired correctly
Target dimension columnsMapped EPM dimension values after ValidateThese are the values that land in the cube. If wrong, your mapping rules need adjustment.
Workflow mode decision guide
ModeTDATASEG populated?Drill-through?Workbench?SpeedUse when
Full✅ Yes — retained✅ Yes✅ YesSlowestClose-day actuals, audit required, drill-back needed
Full No Archive⚡ Yes — deleted post-export❌ No❌ NoMediumDaily refreshes where audit isn't needed but Validate step is still required
Simple❌ No Validate step❌ No❌ NoFastInternal moves, dimension-only loads, scenarios with clean pre-mapped data
Quick Mode❌ Bypassed entirely❌ No❌ NoFastestHigh-volume ASO/BSO loads where speed is critical and audit isn't needed
⚠️
Quick Mode + Change Sign: The Change Sign option in member mappings is not supported in Quick Mode. If your integration relies on sign reversal for income statement accounts, you must use a workflow mode that runs Validate, or handle the sign reversal in your SQL mapping expression instead.
Workbench — reading the audit

The Workbench reads directly from TDATASEG. It shows you the raw source value alongside the mapped target value for every staging row — this is how you diagnose silent mapping errors before they reach the cube.

1

Open Workbench

In Data Integration, open the integration → click the Workbench icon. Available only when Workflow Mode = Full or Full No Archive (before archive purge).

2

Compare Source vs Target columns

Every row shows the original source value (e.g. 4001-GBP) next to the mapped target (e.g. Revenue_UK). Rows highlighted in red have no valid mapping — these are the unmapped members that will fail Export.

3

Fix mappings in-place

Add the missing mapping rule, then re-run Validate only (don't re-import from source). The Workbench re-evaluates the new rule against the already-imported staging data — faster than a full re-run.

💡
Using DATAKEY in SQL Mapping: DATAKEY is a unique integer assigned to every staging row. You can reference it in a SQL Mapping expression to append a row-level unique identifier to your export file — used in FCCS implementations where the downstream reconciliation system needs a traceable ID per loaded record.
Eliot
👤
The mapping rule table looks simple. Four types, a priority order. But that alphanumeric Processing Order sort has broken more close-day loads than any bug I've ever seen. You set rules 1, 2, 10, 20. The system sorts them 1, 10, 2, 20. Rule 10 fires before Rule 2. Your carefully designed exception logic runs in the wrong order. And the cure is just as simple: use 001, 002, 010, 020.
Module 11 · Deep Dive

Data Integration Deep Dive II

Member mapping rule cookbook, period mapping configuration depth, the Unclassified_Actuals catch-all pattern, rejection handling, and parallel processing with 25.08+ Pipeline features.

Member mapping rule cookbook

Four rule types, one priority order. But each type has its own gotchas. Here is each one with a realistic GL account example and the failure mode to avoid.

🥇

Explicit — exact one-to-one Priority 1

Source value matches exactly. Always wins regardless of any other matching rule.

Example: 4001-GBP → Revenue_UK_Hedged
Use when: A specific code needs a different target than its range-mates.
Gotcha: Explicit is case-sensitive. ACCRUALaccrual — if the ERP source sends mixed case, add rules for both variants or use a Like rule as fallback.

📋

In — discrete list Priority 2

Comma-separated list of exact source values mapping to one target.

Example: 5001,5003,5007,5012 → DirectCosts
Use when: Non-contiguous GL codes that share a target but aren't in a range.
Gotcha: No spaces around commas. 5001, 5003 (with space) will not match 5003 — the space becomes part of the match string.

📏

Between — numeric range Priority 3

Maps a contiguous range of source values. Inclusive of both endpoints.

Example: 4000 – 4999 → Revenue
Use when: Standard CoA ranges (revenue 4000–4999, expenses 5000–5999).
Gotcha: Between uses alphanumeric sort for text values. For numeric GL codes, ensure leading-zero consistency: 04000–04999 sorts correctly; mixing 4000 and 04001 creates gap/overlap surprises.

🔍

Like — wildcard pattern Priority 4 (lowest)

Pattern matching with * as wildcard. Runs last — catch-all use cases.

Example: IC_* → ICElimAcct (all intercompany accounts)
Use when: Prefix/suffix patterns, fallback mappings, catch-all rules.
Gotcha: * alone matches everything. A Like rule with source = * at the lowest Processing Order is the Unclassified_Actuals pattern — see below.

🔀

Multi-Dimension — combined dimension match

Maps based on a combination of source dimension values simultaneously.

Example: Account = 5000–5999 AND Entity = DE_*GermanDirectCosts
Use when: The same GL account maps to a different EPM member depending on which subsidiary it comes from — common in multi-entity consolidations.
Gotcha: Multi-Dimension rules don't have a fixed position in the four-type priority order — they're evaluated as explicit rules against the combined key. Add them before your range rules.

Processing Order — the alphanumeric trap
🚨
The most common mapping bug in production: Processing Order is sorted alphanumerically, not numerically. Numbering rules as 1, 2, 10, 20 results in execution order: 1 → 10 → 2 → 20. Rule 10 fires before Rule 2 — your exception logic runs before the base rule it was meant to override.

❌ Wrong — numeric names

Rules numbered: 1, 2, 10, 20
Execution order: 1 → 10 → 2 → 20
Rule 10 fires before Rule 2.

✅ Correct — zero-padded names

Rules numbered: 001, 002, 010, 020
Execution order: 001 → 002 → 010 → 020
Correct logical sequence preserved.

Always use zero-padded Processing Order values. For integrations with more than 9 rules, use three-digit padding (001–999). For more than 99 rules, use four-digit padding.

The Unclassified_Actuals catch-all pattern

In production, new GL accounts appear mid-year without warning. Without a catch-all rule, those records are rejected at Validate — your load fails or the account goes missing from the cube with no visibility. The industry-standard solution:

1

Create a dedicated EPM member: Unclassified_Actuals

Add a visible member to the Account dimension (or equivalent) at a level where Finance can see it. It should roll up in a place that's obvious — not hidden inside a total.

2

Add a Like rule: source = *, target = Unclassified_Actuals

Set the Processing Order to the highest number in the Account dimension mapping (e.g. 999). This rule fires last — only records that matched no other rule reach it.

3

Monitor Unclassified_Actuals after every load

Any balance appearing in this member signals an unmapped GL account that needs a proper mapping rule. Zero balance = all accounts mapped correctly. This turns silent rejections into visible data quality alerts.

💡
Zero rejected records. The catch-all pattern guarantees the load never fails due to unmapped members. Finance sees the balance flagged for investigation rather than the load failing at 11pm. This pattern is standard practice in all production EPBCS implementations.
Period mapping configuration — the full picture

🌐 Global calendar (Default type)

Auto-imported when you register the ERP application. Applies to all integrations using Default period mapping type. New fiscal years require running Application Update to import the new periods — they don't appear automatically.

📅 Source Mapping (Explicit type)

Created manually via Actions → Period Mapping → Source Mapping. Maps ERP period names to EPM period keys one-to-one. Integration must be set to Explicit type in Options tab. Required for SAP, JDE, and any non-Oracle fiscal calendar.

🚨
Adjustment period duplication bug: Oracle Cloud ERP generates adjustment period variants (e.g. 17 Dec-25 alongside Dec-25) for year-end adjustments. If both are included in the Source Mapping with the same EPM period key, data duplicates on every load AND causes import failures. Always exclude adjustment periods from Source Mapping, or map them to a dedicated Adjustment scenario member.
Source systemPeriod namingEPM mapping approach
Oracle Cloud ERPDec-25, Jan-26Default type (auto-imported). Run Application Update for new fiscal years.
Oracle EBSVaries by calendar configUsually Default. Verify period key format matches EPM calendar exactly.
SAPPeriod 001–012 + special periods 013–016Explicit Source Mapping required. Map SAP period numbers to EPM month members. Exclude special periods or map to Adjustment scenario.
JDEFiscal month numbers (1–12)Explicit Source Mapping. Map numeric period to EPM month member names.
Pipeline — parallel mode depth (25.08+)
📋
New in 25.08: Individual jobs within a Stage can now be toggled to Parallel mode independently, not just at the Stage level. The Maximum Parallel Jobs field on the Pipeline definition sets the ceiling (1–25).

Job-level parallel toggle

Select 1–25 jobs to run simultaneously within a Stage. Use when jobs are truly independent — no shared dimension locks or Essbase concurrency conflicts.

⏱️

30-minute timeout behaviour

If a job runs longer than 30 minutes, the Pipeline auto-advances to the next job — they run concurrently even without the Parallel toggle. Design for this: long-running jobs should be in their own Stage.

🔀

On Success / On Failure routing

Each Stage can be configured to proceed, stop, or skip to a nominated Stage on failure. Use for close-day resilience: a failed metadata load skips to an alert Stage rather than aborting the entire close.

🔤

Pipeline Code uniqueness

The Pipeline Code field must be unique across the environment — separate from the Pipeline Name. A common "why won't it save" issue on new Pipeline creation.

Pipeline variables reference
VariableTypeUsage
STARTPERIODSystemStart period for integration jobs in the Pipeline. Pass at REST API call time.
ENDPERIODSystemEnd period for integration jobs. Enables multi-period range loads via single Pipeline trigger.
IMPORTMODESystemReplace / Append — passed to all Integration jobs in the Pipeline.
EXPORTMODESystemStore Data / Add Data / Subtract / Replace — passed to all Integration jobs.
SEND_TOSystemEmail address for Pipeline notification jobs. Override the static address at runtime.
Custom text variablesUser-definedDefine in Pipeline Options. Reference as $VariableName$ in job configurations. Use for environment-specific values (e.g. target EPM URL for cross-instance Pipelines).
Rejection handling automation

When a load fails due to unmapped members, the Process Log contains the rejection detail — but only for the first batch of errors. For production automation, use the REST API pattern to capture and alert on all rejections.

1

Use REST API instead of EPMAutomate for triggered loads

runDataRule in EPMAutomate returns a simple success/fail exit code. The REST API POST /aif/rest/V1/jobs returns a process ID that you can use to download the full Process Log programmatically.

2

Download and parse the Process Log

REST: GET /aif/rest/V1/jobs/{processId}/logs returns the full log. Parse for lines containing UNMAPPED or No mapping found to extract the specific source values that failed.

3

Alert and action

If unmapped values are found: send an alert (email/Slack via Groovy post-process script), log the values to a tracking table, and optionally trigger a Dry Run for the next load. The Unclassified_Actuals pattern (above) handles this more gracefully in-load without requiring external automation.

Practice · 12 · Flashcards

Flashcards — Click to Flip

34 cards. Navigate with arrows or dots. Mark cards you know — track your progress as you go.

Card 1 of 30 · 0 known
Concept
Loading...
Tap to reveal
Answer
0 / 30 known
Practice · 13 · Multiple Choice Quiz

Quiz — 15 Questions

Select the best answer. Immediate feedback after each question.

0 correct · 0 of 15 answered
BrainSpring study material. Always validate against current Oracle documentation for your environment version.
Practice · 14 · True / False

True / False — 23 Statements

Some are common misconceptions. Trust your instincts — then read the explanation.

0 correct · 0 of 23 answered
BrainSpring study material. These target the most common misconceptions in real implementations.
Practice · 15 · Glossary

Glossary — Eliot's Definitions

23 key terms. What they mean under the hood, and why they matter in practice. Search or browse — click any term to expand.

🔍
20 terms
BrainSpring study material. Definitions written for practitioner understanding.