The OneStream Data Model
Before writing a single line of code, you need to understand how OneStream stores data. The platform is built around a multidimensional cube — a structure that will feel familiar if you have worked with OLAP tools like Essbase or Analysis Services, and unfamiliar if your background is purely relational databases. This guide explains the data model from the ground up.
The Multidimensional Cube
A cube is a data structure where every cell is identified by the intersection of multiple dimensions. Think of a spreadsheet: rows might be accounts and columns might be months. That is a two-dimensional slice. Now imagine adding a third axis for Entity (which company), a fourth for Scenario (Actual vs. Budget), a fifth for Department, and so on. The result is a cube with 10 or more axes, where each unique combination of dimension members identifies exactly one data cell.
In this example, the cell at the intersection of Entity = US_Corp, Account = Revenue, Time = 2026M3, Scenario = Budget, Flow = Ending, and UD1 = Sales Dept holds the value $1,250,000. Change any one of those coordinates and you are looking at a different cell.
Cube Design
A single OneStream application can contain multiple cubes, each with its own dimension structure. The choice of how many cubes to create — and how they relate to each other — is one of the most consequential architectural decisions you will make. It affects Data Unit size, calculation performance, extensibility, and how easily the application can grow over time.
The key trade-off: fewer cubes are simpler to build and maintain, but more cubes with targeted dimensions give you better performance and flexibility through extensibility.
Cube Design Patterns
OneStream applications typically follow one of these cube design patterns:
| Pattern | Description | Best For |
|---|---|---|
| Monolithic Cube | Single cube with all scenarios and entities. No extensibility. | Small or simple applications, lift-and-shift migrations |
| Linked Cubes (Super Cube) | Parent cube with detail cubes rolling up via the Entity dimension. Most common design. | Most implementations — best use of extensibility |
| Paired Cubes | Split or shared entities across cubes for special consolidation needs. | Complex org structures with shared or split entities |
| Specialty Cubes | Limited-purpose cubes for admin data, drivers, overrides, or process control. | Separating admin/driver data with simple security |
| Exclusive Cubes | Separate cubes moving data via Business Rules or Data Management, not cube references. | Fully independent business units with separate workflows |
Monolithic Cube — The simplest design. Everything lives in one cube, and all Scenario Types share the same dimensions. This works for small applications and is common for lift-and-shift migrations where the goal is to get running quickly. The downside is that you cannot use extensibility, so every scenario pays the cost of the largest dimension. This design is rarely recommended for applications of any size.
Linked Cubes (Super Cube) — The most common production design. A parent cube sits at the top with detail cubes rolling up to it. Each detail cube can have its own dimensions and level of detail, while the parent cube consolidates at a higher level. This pattern makes the best use of extensibility and provides the most flexibility for future growth.
Paired Cubes — Used when entities need to exist in multiple cubes (split entities) or when users load to the same entity from different cubes (shared entities). Since dimension members can only belong to one cube, paired cubes use a common Entity dimension with all base members assigned to every cube, plus a second hierarchy dimension per cube. This is the most complex pattern and is reserved for situations that specifically require it.
Specialty Cubes — Monolithic cubes that serve a narrow purpose: holding driver assumptions, override tables, equity control data, or process control configurations. The benefit is simple security — you can easily separate administrative data from the main financial cubes.
Exclusive Cubes — Completely independent cubes that do not reference each other directly. Data moves between them via Business Rules or Data Management jobs. This suits organizations where business units have fully separate workflows, dimensions, and security requirements.
Having many cubes will not slow the application. The gains in performance from smaller Data Units typically outweigh the additional maintenance.
Extensible Dimensionality
Extensibility is the key differentiator in cube design. It allows different parts of the application to use different dimensions (or different levels of detail within the same dimension) without creating entirely separate applications.
Horizontal Extensibility — Different dimensions per Scenario Type within the same cube. For example, Actual might use SummaryAccounts while Budget uses DetailAccounts with additional driver accounts. The Entity and Scenario dimensions must be shared across all Scenario Types, but Account, Flow, and UD dimensions can vary.
| Actual | Budget | Forecast_Working / Forecast_MX | |
|---|---|---|---|
| Entity | LegalEntity | LegalEntity | LegalEntity |
| Account | SummaryAccounts | DetailAccounts | DetailAccounts |
| UD1 | ProductFamily | ProductType | Product |
| UD2 | — | CostCenter | — |
| UD3 | — | Department | Department |
This extensibility happens within a single cube — no additional cubes are needed.
Vertical Extensibility — Different dimensions per business unit via separate cubes with a master/parent cube. Each business unit cube has its own Entity dimension that is inherited by the parent cube. Account, Flow, and UD dimensions can also vary across cubes, giving each business unit the reporting detail it needs while still consolidating into a single corporate view.
Each business unit cube defines only the dimensions it needs — North America tracks cost centers and products, EMEA tracks departments, and APAC tracks sales channels. The corporate parent cube inherits all entity members and consolidates at a summary level. Entity and Scenario dimensions are shared across all cubes.
In both types of extensibility, the Entity and Scenario dimensions must be shared.
Data Unit Size and Performance
Cube design directly affects Data Unit size, which is the primary driver of calculation and consolidation performance.
A Data Unit's size is approximately the product of all non-Data-Unit dimension members: Account members × Flow members × UD1 members × UD2 members × ... × UD8 members. The Data Unit dimensions themselves (Entity, Scenario, Time, Consolidation, Parent) define which Data Unit you are in, not its size.
Key guidelines:
- Keep Data Units under approximately 2 million records. Above that threshold, performance degrades significantly — calculations take longer, consolidation slows, and server memory pressure increases.
- Watch for interdimensional irrelevance. Many dimension intersections will never contain valid data (e.g., Intercompany on a Deferred Tax Asset account). If those cells get accidentally populated — through a poorly written rule or by loading zeros — the Data Unit grows and performance degrades. Use input rules to prevent accidental population of invalid intersections.
- If Data Units are too large: split entities across cubes (vertical extensibility), move high-cardinality data to relational storage, or use BI Blend for operational and external data.
Dynamic Cubes
Dynamic Cubes surface data in a cube structure without physically loading it into traditional cube storage. They are useful for re-aggregating existing cube data in different ways, exposing external database data for reporting, or filtering a source cube into a smaller Data Unit for performance.
The most common data binding types:
- ShareDataFromSourceCube — Read-only reference to data in another cube. No data duplication. You can filter which members to share, creating a smaller Data Unit for focused analysis.
- CopyInputDataFromSourceCube — Copies base-level data from a source cube into the dynamic cube as data records. Required when you need alternate rate-type or rule-type translations on the copied data.
- Workspace Assembly bindings — Share or edit data from any source (including external systems) through Workspace Assemblies. These are the most flexible option and support scenarios like surfacing external database data in cube views or writing back edits to an external source.
Dynamic Cubes follow the same Data Unit size recommendations as standard cubes. They are not a workaround for oversized Data Units — they are a tool for flexibility and integration.
Core Dimensions
Every OneStream cube includes a fixed set of dimensions. These cannot be removed, though you can choose how many members each one contains.
| Dimension | Purpose | ABC Manufacturing Examples |
|---|---|---|
| Entity | Organizational structure — legal entities, cost centers, regions | US_Corp, EMEA_Sub, APAC_Sub, ABC_Group (parent) |
| Account | Chart of accounts — financial line items and driver accounts | Revenue, COGS, SalaryExpense, FTE, AvgSalary, PricePerUnit |
| Flow | Movement type — how data was entered or derived | Ending, Periodic, YTDInput, OpeningBalance |
| Time | Calendar periods | 2026M1 through 2026M12, 2026Q1 through 2026Q4, 2026 (year total) |
| Scenario | Data version — separates actual results from plans | Actual, Budget, Forecast_Working, Forecast_M1–M12 |
| Consolidation | Currency translation and consolidation status | Local, Translated, Share, Elimination |
| Origin | Data entry method — how data entered the cube | Import, Forms, AdjInput, AdjConsolidated, Elimination |
| Intercompany | Counterparty for intercompany transactions | None, US_Corp, EMEA_Sub, APAC_Sub |
In addition to these fixed dimensions, every cube includes UD1 through UD8 — eight user-defined dimensions that you configure for your application's specific needs.
Scenario Types
The Scenario dimension separates distinct financial processes — close, consolidation, budgeting, forecasting — into their own data spaces. But the behavior of each scenario — whether it accepts input, what time periods it covers, how data flows — is controlled by Scenario Types.
A Scenario Type is a configuration object that defines:
- Time span — Which periods the scenario covers (e.g., Budget covers Jan–Dec 2026; Actual advances as each month closes)
- Input frequency — Whether users enter data periodically (month by month) or as YTD totals
- Input behavior — What kind of input the scenario accepts. Actual scenarios are typically loaded from source systems but also accept journal entries and manual adjustments during the close cycle. Budget and Forecast scenarios accept direct user input for planning.
- Default Flow member — Controls whether input goes to Periodic, YTDInput, or another Flow member
- Workflow behavior — Which Workflow Profile governs the submit/approve cycle for this scenario
For ABC Manufacturing's FP&A solution, the scenario setup looks like this:
| Scenario | Scenario Type Behavior | Time Span |
|---|---|---|
| Actual | Loaded from ERP; accepts journal entries and adjustments during close | Rolling (each month as it closes) |
| Budget | Editable, periodic input, annual cycle | 2026M1 – 2026M12 |
| Forecast_Working | Editable, periodic input; active workspace for the current forecast cycle | 2026M1 – 2026M12 |
| Forecast_M1 – Forecast_M12 | One per monthly cycle; seeded with actuals for closed months, locked via NoInputPeriods | 2026M1 – 2026M12 (reusable across years via "All Time Periods" tracking) |
User-Defined Dimensions (UD1-UD8)
The eight User-Defined dimensions are where you model business-specific analytical axes. They work exactly like the core dimensions — they have hierarchies, member properties, and can be referenced in Business Rules — but their meaning is entirely up to you.
For ABC Manufacturing:
| Dimension | ABC Usage | Example Members |
|---|---|---|
| UD1 | Department | Sales, Engineering, Operations, G_and_A, Total_Departments |
| UD2 | Product Line | Industrial, Commercial, Services, Total_Products |
| UD3–UD8 | (Available for future use) | — |
When to use a UD dimension vs. a relational table:
- Use a UD dimension when the data is low-cardinality (dozens to low hundreds of members), needs to aggregate in the cube, and users need to filter or pivot by it in reports. Departments and Product Lines are classic examples.
- Use a relational table when the data is high-cardinality (hundreds to thousands of records), is transactional in nature, or does not need to roll up through a hierarchy in the cube. Employee lists and capital project details are better suited to relational storage.
Point of View (POV)
The Point of View (POV) is the string notation OneStream uses to identify a specific cell or slice of the cube. You will see it everywhere — in Business Rule code, in Cube View definitions, and in the OneStream UI.
The format uses dimension prefixes followed by
# and the member name:In Business Rules, you typically specify only the dimensions you need. Unspecified dimensions default to the current Data Unit's context:
Data Units
A Data Unit is the fundamental unit of processing in the Finance Engine. It represents the intersection of five dimensions:
- Entity — Which organizational unit
- Scenario — Which data version (Actual, Budget, etc.)
- Time — Which period (2026M3)
- Consolidation — Which consolidation member (Local, USD, etc.)
- Parent — Which parent entity in the hierarchy (for consolidation processing)
When OneStream calculates or consolidates data, it processes one Data Unit at a time. Your Finance Business Rule runs once per Data Unit in the scope of the operation. This means if you calculate Budget data for US_Corp across 12 months, your rule fires 12 times — once per month, each time with a different Time context.
Understanding Data Units is critical for writing efficient Finance Rules. The concept is covered in depth in Understanding Data Units.
When NOT to Use the Cube
The cube is ideal for aggregatable financial data — amounts that roll up through hierarchies and need to be sliced by multiple dimensions. But not all data belongs in the cube.
| Characteristic | Cube | Relational Table | BI Blend |
|---|---|---|---|
| Data type | Numeric amounts | Any (text, dates, numbers) | Any |
| Cardinality | Low-to-medium (dimension members) | High (rows in a table) | High |
| Aggregation | Built-in hierarchy roll-up | Manual (SQL or Business Rule) | Dashboard-level |
| Input method | Journal entries, Cube Views, Business Rules | Spreadsheet rules, custom dashboards | External systems |
| Best for | P&L, balance sheet, KPIs | Employee lists, project details, assumptions | Operational data, external data |
For ABC Manufacturing:
- Cube — Revenue, COGS, SalaryExpense, FTE, AvgSalary by Entity × Department × Product Line × Time × Scenario
- Relational table — Individual employee records (name, salary, start date, department, entity) for the People Plan
- BI Blend — Sales pipeline data from Salesforce, displayed alongside the revenue forecast in dashboards
ABC Example: Dimension Design
Putting it all together, here is how ABC Manufacturing's cube is structured for their FP&A solution:
Entity Hierarchy:
Account Dimension (simplified):
Key Design Decisions:
- Driver accounts (FTE, AvgSalary, SalesVolume, PricePerUnit) sit under a separate parent that does not roll into Total_PL. They are inputs used by calculations, not financial line items.
- Calculated accounts (GrossProfit, SalaryExpense, NetIncome) are computed by Finance Business Rules or Member Formulas. Users do not input data to them directly.
- UD1 (Department) — Allows the budget to be built at the department level and rolled up. Each department manager enters drivers for their area.
- UD2 (Product Line) — Revenue and COGS are planned by product line. Salary and OpEx are not (they are department-level only), so UD2 uses a "None" member for those accounts.
This dimension design supports the full planning workflow: seed from actuals, input drivers, calculate the P&L, consolidate across entities, and report variances — all within a single cube.
Cube Design Choice:
ABC Manufacturing uses a single cube with Horizontal Extensibility. Actual uses summary-level accounts (Revenue, COGS, OpEx aggregates), while Budget and the Forecast scenarios (Forecast_Working and the Forecast_MX snapshots) use the full detail accounts including driver accounts (FTE, AvgSalary, SalesVolume, PricePerUnit). All scenarios share the same Entity dimension and UD dimensions.
This single-cube approach works because ABC has a simple entity structure (three subsidiaries rolling up to one parent) and moderate dimensionality. As ABC grows — say, by acquiring a manufacturing company with its own entity hierarchy and plant-specific planning dimensions — they could split into Linked Cubes, with the original ABC entities in one detail cube and the acquisition in another, both rolling up to a corporate parent cube.
Related Content
- Data Integration and Transformation — How data flows from source systems into this data model
- Understanding Data Units — Deep dive into Data Units and how Finance Rules process them
- What Is OneStream? — Platform overview and engine architecture