The successor to FDMEE and Data Management. An auditable, extensible ETL+ pipeline connecting any source to any Oracle EPM Cloud business process.
Pre-mapped files for all EPM business processes. Data must match expected format. Drill-through from release 22.08 onwards.
Programmatic loads via importDataSlice. Used for real-time triggers, Groovy Business Rules, and middleware integration patterns.
Full governed pipeline. All EPM Business Processes. Any source, any volume. Includes the EPM Integration Agent for on-premises connectivity.
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.
Explicit, Between, In, Like — four rule types with deterministic priority order. SQL Mapping and Expressions for complex transformations without writing code.
Every load is auditable. Workbench shows source-to-target data with original values. Process Details records timing, row counts, and errors per step.
Not just inbound. Push EPM budget and actual data back to Oracle Cloud ERP GL journal interface or directly to ERP Essbase cubes.
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.
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.
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.
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.
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.
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.
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.
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.
| ERP | Flat file | Agent | OIC |
|---|---|---|---|
| SAP | SAP Basis exports CSV → EPMAutomate uploads | Agent + Groovy BAPI calls, or JDBC (check SAP licence) | SAP Adapter + OIC REST to EPM |
| JD Edwards | JDE extract → EPMAutomate | Agent + Data Access Driver (DAD) | JDE Adapter available in OIC |
| Workday / SFDC | API export → stage as CSV | Agent + Python script calling REST API | OIC pre-built connectors |
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.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.
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).
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.
Edit EPMAgent/appdata/agentparams.ini. Set the required parameters (see table below). This is the single configuration file that controls all Agent behaviour.
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.
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.
| Parameter | Description | Example |
|---|---|---|
AGENT_NAME | Must match the Cluster Name created in Cloud EPM exactly (case-sensitive) | PROD_AGENT_01 |
EPM_AGENT_HOME | Root install directory of the Agent | C:\Oracle\EPMAgent |
EPM_APP_DATA_HOME | Location of the appdata folder (configs, logs, scripts) | C:\Oracle\EPMAgent\appdata |
CUSTOM_CLASS_PATH | Path to additional JDBC driver jars (Snowflake, SQL Server, etc.) | C:\Oracle\EPMAgent\jdbc\snowflake-jdbc-3.13.jar |
POLL_INTERVAL | Seconds between Cloud EPM polls for queued jobs. Default: 5 | 5 |
MAX_PARALLEL_JOBS | Maximum concurrent jobs the Agent will execute simultaneously | 3 |
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.
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.
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.
| Event | Timing | Common use |
|---|---|---|
BefExtract | Before SQL query runs against source | Validate source DB connectivity, pre-stage data, set session variables |
AftExtract | After SQL query, before file sent to Cloud | Transform or filter the extracted file, add audit header rows |
BefExport | Before writeback export data sent to Agent | Prepare target table for incoming data (truncate staging table) |
AftExport | After writeback INSERT statements complete | Send Slack/email notification, trigger downstream process, log completion |
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.The foundational step before any GL data, metadata, or writeback can flow. A one-time setup that underpins all ERP integration patterns.
https://xxxx.fa.ocs.oraclecloud.com. No trailing slash. Not the IDCS redirect URL.In Data Integration, go to Actions → Applications. Click the Connections chain-link icon in the toolbar.
Click the "+" dropdown. Choose Oracle Cloud ERP. (Other types include Oracle HCM Cloud, NetSuite.)
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.
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.
https://xxxx.fa.ocs.oraclecloud.com/ → Invalid URL error. Correct: https://xxxx.fa.ocs.oraclecloud.comCategory = Data Source, Type = Oracle Cloud ERP.
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.
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.
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.
The complete four-screen wizard. Period mapping, category mapping, dimension mapping, member mapping, source filters — all in sequence.
ERP and EPM period names match exactly. Data Integration uses the global calendar. Most common scenario — do nothing.
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.
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.
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.
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.
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.
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.
| Type | Example | Priority | Best for |
|---|---|---|---|
| Explicit | 4001-GBP → Revenue_UK | Highest — always wins | Exact one-to-one overrides |
| In | 5001,5003,5007 → DirectCosts | 2nd | Discrete, non-contiguous codes |
| Between | 4000–4999 → Revenue | 3rd | Ranges of numeric GL codes |
| Like | IC_* → ICElimAcct | Lowest | Wildcard / pattern match as fallback |
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.
Chart of Accounts metadata loading, BI Publisher custom queries, ESS Job execution mode, and drill-back to source transactions.
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.
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.
Configure: COA Application Name (e.g. InFusionLedger), Segment Name (e.g. Account), Hierarchy Top Node (e.g. All Account Values), Refresh from Source = Yes.
Source = COA application, Target = EPM Account dimension. Map and run. EPM dimension members update automatically on each execution.
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~.
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).
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.
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.
| Method | Mode | Timeout | Retries | Use case |
|---|---|---|---|---|
| BIP Report | Synchronous | 30 seconds | 3 retries (5s intervals) | Small, fast queries |
| ESS Job | Asynchronous | ~6.5 minutes | 12 retries (escalating) | Large extracts, complex joins |
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.
| Attribute | Actuals Writeback | Budget Writeback | Agent Writeback |
|---|---|---|---|
| ERP Destination | GL_INTERFACE table | ERP Essbase cube | Any on-prem DB table |
| Downstream process | ImportJournals ESS job → GL journal entries | Transfer Budget Balances to Essbase → Budgetary Control | None — INSERT directly to target table |
| Balance Type setting | Actual | Budget | N/A (export application) |
| ERP prerequisite | Journal Source + Category defined in ERP; integration user has journal authorisation | ERP Essbase cube created via "Create GL Balances Cube"; scenarios deployed via "Create Scenario Dimension Members" | Agent installed; target table registered as export application |
| Error location | ERP Scheduled Processes log (GL side) | ERP → General Accounting Dashboard → Correct Budget Import Errors | Agent process log + EPM Process Details |
| Period range rule | Start/end must be within a single fiscal year — cross-year = duplicate data | Map fiscal calendar if ERP and EPM calendars differ | No restriction — controlled by EPM export filter |
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
| Error / symptom | Pattern | Root cause | Resolution |
|---|---|---|---|
| ORA-01400: cannot insert NULL | Actuals | A required GL_INTERFACE column is null — a mandatory ERP GL segment has no mapping | Check 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 conversion | Actuals | A numeric GL_INTERFACE column is receiving a text value — typically Data Access Set ID = -1 | Verify 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 period | Actuals | The Accounting Date mapped into GL_INTERFACE falls in a closed ERP period | ERP 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 category | Actuals | Journal Category in DI Application Options doesn't match the ERP-defined category — case mismatch or typo | In ERP: General Ledger → Journal → Manage Journal Categories. Copy the exact name including capitalisation and paste into DI Application Options. |
| Error in Validating the Budget Load | Budget | ERP pre-validation rejected one or more budget rows — invalid currency, account value, or budget name | ERP: 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 Essbase | Budget | "Create Scenario Dimension Members" ESS job hasn't been run after adding the budget scenario to the CoA value set | In 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 silently | Agent | Column name mismatch between CSV header and actual database table columns | Open 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 found | Agent | The table name in Application Options either doesn't exist or the DB user lacks SELECT/INSERT privilege | Verify the exact schema-qualified table name (e.g. HR.ACTUALS_STAGING). Grant INSERT privilege to the DB user configured in the Application Options credentials. |
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 column | Required? | Typical EPM source | Notes |
|---|---|---|---|
LEDGER_ID | Required | ERP Connection / source system | Auto-populated from the ERP target application — don't manually map |
ACTUAL_FLAG | Required | Set by Balance Type = Actual | Must be A for actuals, B for budgets, E for encumbrances |
CURRENCY_CODE | Required | EPM Currency dimension → mapped to ISO code | Must be a valid ISO 4217 currency code. A common failure: EPM stores "USD" but mapping sends "US Dollar" |
ACCOUNTING_DATE | Required | Derived from Period mapping | Must fall within an open or future-enterable ERP GL period. Use period last-day convention. |
JOURNAL_ENTRY_SOURCE_NAME | Required | Application Options → Journal Source field | Exact match to the source defined in ERP. Integration user must be authorised for this source. |
JOURNAL_ENTRY_CATEGORY_NAME | Required | Application Options → Journal Category field | Exact match to the category defined in ERP. Common failure: trailing space. |
ENTERED_DR / ENTERED_CR | Required | EPM amount value | Debit and Credit amounts must balance per journal entry. Unbalanced journals are rejected unless suspense posting is enabled in ERP. |
SEGMENT1–SEGMENT30 | Conditional | EPM dimensions → ERP CoA segments | Map all active Chart of Accounts segments. Unmapped active segments default to NULL and fail validation. |
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.
| Error | Root cause | Resolution |
|---|---|---|
| HTTP 401 | Wrong credentials or SSO-enabled account | Test ERP login directly. Confirm account is non-SSO. Re-enter credentials in Connection. |
| HTTP 403 | IP Firewall / Allowlist blocking EPM Cloud IPs | Contact ERP admin to add EPM Cloud IP ranges to ERP allowlist. |
| Connection refused / timed out | Wrong pod URL, trailing slash, or ERP pod down | Remove trailing slash. Validate URL. Test via Postman (Module 03). |
| Cannot import ERP applications | Missing GL job role on service account | Assign: General Accountant / General Accounting Manager / Financial Analyst in ERP Identity Management. |
Check for overlapping period keys including adjustment periods. Overlapping keys cause both duplication and import failure. Verify Default vs Explicit type matches config.
Confirm ERP records exist for your filter conditions. Use Member Selector, not manual typing. Use Fully Qualified Members if members exist in multiple hierarchies.
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).
| Symptom | Cause | Fix |
|---|---|---|
| Wrong landing page | Incorrect Drill URL set in classic Data Management | Delete and recreate ERP Source System — new UI auto-sets Drill URL. |
| ERP login screen | User not logged into ERP before drilling | Log into ERP first. Verify service account has Financial Analyst role. |
| No drill results | Drill Through not enabled; dimension classification mismatch; too many Drill Region members | Enable in Application Options. Check dimension classification consistency. Define Custom Drill Region. |
| Partial / wrong results | 1,000-member-per-dimension query limit | Disable in Application Options (max 3 dimensions may exceed 1,000 members). |
Replace * to * with SQL Mapping and Expressions. Significantly reduces Transform step processing time.
Bypasses TDATASEG staging and Validate step. No Workbench data, no drill-through — but dramatically faster for high-volume loads.
Full: All events + drill. Full No Archive: All events, no drill (TDATASEG purged after load). Simple: Import + Export only.
Tune Batch Size (default 10,000). Purge historical data. Run "Maintain Data Table" and "Relocate Tablespace" from System Maintenance Tasks.
| Error | Meaning | Resolution |
|---|---|---|
| Read timed out | BIP 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 = -1 | ESS 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. |
XXXXXXX.log → ERP Support first. Error directly in DI log lines → EPM Data Integration Support. Always include: Process Log, ESS log, and whether CSV was generated.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.
| Symptom | Cause | Resolution |
|---|---|---|
| Validate step fails — "No mapping found for [source value]" | Source member exists in staging but has no matching rule in any active mapping type | Open 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 row | Implement 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 Details | FCCS via OLU supports partial loading — valid data proceeds, invalid rows are reported not rejected | Review 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 mapping | Finance added accounts in ERP without notifying the EPM team | Implement Unclassified_Actuals catch-all pattern. Configure monitoring alert when any balance appears in Unclassified_Actuals. |
| Dry Run shows 99 errors then stops | FCCS Dry Run mode stops after 99 errors — not a bug | Fix the first batch of errors and re-run Dry Run. Repeat until Dry Run completes cleanly before running the real load. |
TDATASEG_T. Saves significant time on large data sets during close.Multi-step orchestration, high-volume patterns, FCCS-specific behaviour, and where the product is heading.
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.
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.
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.
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.| Extract option | Method | Best for |
|---|---|---|
| All Data | MDX | Hybrid or ASO with filters |
| Level 0 Data | MAXL | High-volume ASO exports |
| Stored Data Only | DATAEXPORT | BSO — stored values, excludes dynamic calc |
| Stored + Dynamic Calculated | DATAEXPORT | BSO — includes Dense dimension dynamic calc values only |
runDataRule does NOT support Quick Mode. Use the runIntegration REST API with importMode: DIRECT and exportMode: REPLACE.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.
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.
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.
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.
Delivered
On the horizon
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.
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.
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.
Planning (EPBCS), Financial Consolidation & Close (FCCS), Tax Reporting, Strategic Modeling, Narrative Reporting. Any product where the EPM Platform Job Scheduler is available.
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.
Realistic implementation scenarios drawn from common enterprise setups. Each shows the problem, the architecture decision, and the key configuration choices.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
TDATASEG_T. No mapping applied yet. Status = 1 (Imported).TDATASEG_T replaced with mapped target values. Unmapped members surface as errors here. On success: copied to TDATASEG. Status = 2 (Validated).Full No Archive purges TDATASEG after this step.| Column | Description | Practitioner use |
|---|---|---|
DATAKEY | Unique integer row identifier auto-assigned on import | Use in SQL Mapping expressions to inject unique identifiers into export files — common FCCS audit pattern |
STATUS | 1=Imported, 2=Validated, 3=Exported, 5=Calc+Exported | Query to understand where a load stopped or to verify completion state |
AMOUNT | The numeric data value (source → mapped) | Check for unexpected sign reversals or scaling issues post-Validate |
| Source segment columns | Raw source dimension values before mapping | Visible in Workbench "Source" columns — compare to target to verify mappings fired correctly |
| Target dimension columns | Mapped EPM dimension values after Validate | These are the values that land in the cube. If wrong, your mapping rules need adjustment. |
| Mode | TDATASEG populated? | Drill-through? | Workbench? | Speed | Use when |
|---|---|---|---|---|---|
| Full | ✅ Yes — retained | ✅ Yes | ✅ Yes | Slowest | Close-day actuals, audit required, drill-back needed |
| Full No Archive | ⚡ Yes — deleted post-export | ❌ No | ❌ No | Medium | Daily refreshes where audit isn't needed but Validate step is still required |
| Simple | ❌ No Validate step | ❌ No | ❌ No | Fast | Internal moves, dimension-only loads, scenarios with clean pre-mapped data |
| Quick Mode | ❌ Bypassed entirely | ❌ No | ❌ No | Fastest | High-volume ASO/BSO loads where speed is critical and audit isn't needed |
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.
In Data Integration, open the integration → click the Workbench icon. Available only when Workflow Mode = Full or Full No Archive (before archive purge).
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.
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.
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.Member mapping rule cookbook, period mapping configuration depth, the Unclassified_Actuals catch-all pattern, rejection handling, and parallel processing with 25.08+ Pipeline features.
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.
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. ACCRUAL ≠ accrual — if the ERP source sends mixed case, add rules for both variants or use a Like rule as fallback.
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.
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.
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.
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.
Rules numbered: 1, 2, 10, 20
Execution order: 1 → 10 → 2 → 20
Rule 10 fires before Rule 2.
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.
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:
Unclassified_ActualsAdd 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.
*, target = Unclassified_ActualsSet 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.
Unclassified_Actuals after every loadAny 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.
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.
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.
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 system | Period naming | EPM mapping approach |
|---|---|---|
| Oracle Cloud ERP | Dec-25, Jan-26 | Default type (auto-imported). Run Application Update for new fiscal years. |
| Oracle EBS | Varies by calendar config | Usually Default. Verify period key format matches EPM calendar exactly. |
| SAP | Period 001–012 + special periods 013–016 | Explicit Source Mapping required. Map SAP period numbers to EPM month members. Exclude special periods or map to Adjustment scenario. |
| JDE | Fiscal month numbers (1–12) | Explicit Source Mapping. Map numeric period to EPM month member names. |
Maximum Parallel Jobs field on the Pipeline definition sets the ceiling (1–25).Select 1–25 jobs to run simultaneously within a Stage. Use when jobs are truly independent — no shared dimension locks or Essbase concurrency conflicts.
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.
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.
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.
| Variable | Type | Usage |
|---|---|---|
STARTPERIOD | System | Start period for integration jobs in the Pipeline. Pass at REST API call time. |
ENDPERIOD | System | End period for integration jobs. Enables multi-period range loads via single Pipeline trigger. |
IMPORTMODE | System | Replace / Append — passed to all Integration jobs in the Pipeline. |
EXPORTMODE | System | Store Data / Add Data / Subtract / Replace — passed to all Integration jobs. |
SEND_TO | System | Email address for Pipeline notification jobs. Override the static address at runtime. |
| Custom text variables | User-defined | Define in Pipeline Options. Reference as $VariableName$ in job configurations. Use for environment-specific values (e.g. target EPM URL for cross-instance Pipelines). |
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.
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.
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.
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.
34 cards. Navigate with arrows or dots. Mark cards you know — track your progress as you go.
Select the best answer. Immediate feedback after each question.
Some are common misconceptions. Trust your instincts — then read the explanation.
23 key terms. What they mean under the hood, and why they matter in practice. Search or browse — click any term to expand.