Data Integration and Transformation
Every FP&A process starts with actuals. Before you can build a budget or update a forecast, the cube needs to contain the company's real financial data — imported from ERPs, mapped to your dimension structure, and validated. This guide covers the data integration pipeline: how data gets from source systems into the cube, and how actual data becomes the foundation for planning.
The Data Journey
Data integration in OneStream follows a consistent pipeline: extract from source, land in staging, transform and map, validate, and load to the cube. Each step is orchestrated by a Data Management sequence — a configurable series of steps that runs on demand or on a schedule.
The developer's job at each step:
- Connectors and Parsers — Configure or write Business Rules that pull data from external systems (databases, APIs, files). Connector rules define the field mapping; Parser rules handle custom file formats.
- Staging Tables — No code needed here — data lands in standard staging tables automatically. You can inspect staged data through the OneStream UI.
- Transformation Rules — Map source account codes, entity codes, and other fields to OneStream dimension members. Handle sign conventions, default values, and validation logic.
- Cube Load — Built-in functionality moves validated staging data into the cube. You configure which dimensions to load and how to handle duplicates (replace, accumulate, etc.).
Data Sources for FP&A
A typical FP&A implementation pulls data from several sources. Each source plays a different role in the planning process.
| Source | Connection Method | FP&A Role |
|---|---|---|
| General Ledger (ERP) | ODBC, REST API, or flat file | Actual financial data — the baseline for budgets and forecasts |
| HR / Payroll | ODBC, flat file, or API | Headcount, salary bands, benefits rates — inputs for workforce planning |
| Sales / CRM | REST API or flat file | Pipeline data, bookings, sales volumes — inputs for revenue planning |
| Manual Input | Journal entries, Cube Views, dashboard components, Excel add-in | Management assumptions, growth rates, one-time adjustments |
| External Data | Flat file or API | FX rates, commodity prices, inflation indices |
Staging and Transformation
When data arrives through a Connector, it lands in staging tables — relational tables within the OneStream database that hold raw, untransformed data. Each row represents a source record with its original field values.
Transformation rules then map source values to OneStream dimension members. For example, if your ERP uses account code "4010" for Product Revenue but your OneStream Account dimension uses "ProductRevenue", the transformation rule creates that mapping.
Transformation happens at multiple levels:
- Direct maps — One-to-one: source value "4010" → OneStream member "ProductRevenue"
- Conditional maps — Based on combinations: source account "5000" from entity "US" → "SalaryExpense", but "5000" from entity "EMEA" → "WagesExpense"
- Sign flips — Revenue accounts in some GLs are stored as negative; OneStream expects positive. Transformation rules apply sign conventions.
- Validation — Rows that fail to map (unmapped accounts, invalid entities) are flagged for review rather than silently dropped.
The transformation step can also include Transformation Business Rules — custom code that runs during the transformation process. These are useful for calculations on staged data (e.g., converting currencies before loading) or complex conditional mappings that cannot be expressed as static mapping tables.
Seeding: From Actuals to Budget
Once actuals are in the cube, the next step in most FP&A processes is seeding — copying actual data to the Budget or Forecast scenario as a starting point. Instead of building the budget from zero, planners start with "what actually happened" and then adjust.
There are two primary approaches to seeding in OneStream:
Data Management Copy Data Step
The simplest approach is a Copy Data step in a Data Management sequence. You configure the source (Scenario = Actual) and target (Scenario = Budget), select which dimensions to copy, and run the step. No code required.
This works well for straightforward one-time seeding at the start of a budget cycle.
Finance Business Rule Seeding
For more control — conditional seeding, partial copies, adjustments during the copy — use a Finance Business Rule. The
api.Data.Calculate method can reference across scenarios:You can be selective — seed only specific accounts, apply different adjustments by account type, or conditionally skip accounts where budget data has already been entered:
Rolling Forecast Seeding
Rolling forecasts add a dynamic twist to seeding. Instead of a one-time copy at the start of the year, Forecast_Working is updated each cycle. Actuals are seeded into Forecast_Working for closed months while open months retain projected values. When the cycle is approved, Forecast_Working is published to the corresponding monthly snapshot (Forecast_M1 through Forecast_M12).
In this example, the forecast as of March has January through March populated with actual data and April through December with projected data. Next month, April actuals will be seeded into Forecast_Working, and the completed March forecast will have been saved to Forecast_M3.
The key to implementing this is determining the cutoff point — which months are "closed" (use actuals) and which are "open" (keep forecast). A Finance Business Rule handles this dynamically:
ABC Example: Integrating Three GL Systems
ABC Manufacturing's biggest integration challenge is consolidating data from three different ERPs — each with its own chart of accounts, entity coding, and sign conventions.
Source System Summary:
| Entity | ERP | Connection | Key Challenges |
|---|---|---|---|
| US_Corp | SAP | ODBC connector | 6-digit account codes, expenses stored as positive, cost centers map to UD1 |
| EMEA_Sub | Oracle | REST API | 4-digit account codes, different account groupings, multi-currency (EUR, GBP) |
| APAC_Sub | NetSuite | CSV file export | Account names (not codes), revenue stored as negative, department field maps to UD1 |
Each source requires its own Connector (or file parser) and its own set of transformation mappings. The transformation step is where the three different charts of accounts converge into ABC's unified Account dimension.
Here is a simplified transformation rule snippet that handles the sign convention and account mapping for the NetSuite CSV import:
Once all three sources are loaded and transformed, ABC has a complete set of actuals in the cube. The next step is seeding those actuals into the Budget scenario as a starting point for the annual planning cycle — using the Finance Business Rule seeding pattern described above.
Related Content
- Building a Budget — Use the loaded actuals as a foundation for driver-based and factor-based budgeting
- The OneStream Data Model — The dimension structure that transformation rules map into
- Getting Started with Business Rules — Business Rule types including Connectors, Parsers, and Transformation Event Handlers