Twenty-two days on the showcase estate
How a first load into o9 runs when two ERPs feed one graph. Figures are from the showcase estate.
connect
hierarchies
customers
actuals
first load
write-back
hand-over
o9 plans on a graph: products, locations, customers and time, each with a hierarchy, and numbers stored at a grain such as item by location by customer by week. Lima Backbone builds those hierarchies from SAP and Oracle, checks them for gaps and duplicates before every load, delivers actuals, supply and attributes at the right grain on the planning cycle, and returns the approved plan and forecast to the ERP as acknowledged transactions.
o9 stores a number against members of several dimensions at once. For a number to land, every member it references must exist, sit in a valid hierarchy, and match the grain the measure is defined at. That is what makes hierarchy quality the decisive factor for an o9 load.
| Object | What it holds, in plain words | Why the plan needs it | SAP source | Oracle source |
|---|---|---|---|---|
| Item dimension | Every product with its levels: SKU, family, category, business unit | Every product number rolls up along it | MARA · T179 (product hierarchy) · T023 (material groups) | MTL_SYSTEM_ITEMS_B · MTL_ITEM_CATEGORIES |
| Location dimension | Every site with its region and country | Where demand happens and supply is held | T001W · plant attributes | Inventory organizations |
| Customer dimension | Ship-to and sold-to customers with their channel | Forecasting by customer and channel | KNA1 · KNVV · KNVP (partner functions) | HZ_PARTIES · HZ_CUST_ACCOUNTS · sites |
| Time dimension | Days rolling into fiscal weeks, months and quarters | Every measure lives in a time bucket | T009 / T009B fiscal year variants | GL_PERIODS |
| Measures at a grain | Actuals, forecast, open orders, stock, capacity, each defined at a combination of levels | The numbers the plan is built from | VBRP · LIPS · VBAP · MARD · KAKO | OE lines · WSH deliveries · MTL_ONHAND |
| Supply relationships | Item-location nodes linked by bills of material, lanes and resources with lead times | The supply model behind the plan | STPO · MKAL · EORD · PLPO · CRHD | BOM tables · sourcing rules · resources |
| Attributes | Lifecycle status, ABC class, planner code, unit, new-product flag | Planning rules branch on them | MARA-MSTAE · MARC-MAABC · MARC-DISPO | Item attributes and flexfields |
| Version | The current working view and named scenarios | Keeps a scenario from overwriting the plan | Tagged by Lima on load | Tagged by Lima on load |
These problems are specific to a graph-based target: they are about membership, hierarchy and grain more than about volume.
Consumer goods and retail estates bring channel and customer hierarchies, promotions and point-of-sale history that must be conformed to the ERP's customers. Automotive and industrial estates bring long tails of parts with sparse history where attributes decide the forecasting method. High-tech brings product transitions where lifecycle status and successor links must be present on day one. Each has a check in Step 4.
The figure shows the hierarchy check on a product tree fed by two ERPs. The table maps all six problems.
| Problem | What Lima does | The capability behind it | What you see |
|---|---|---|---|
| 1 · Missing members | Loads members before measures and checks every measure row against the member lists; rows for unknown members are held and listed for the owner, and a member can be created from the transaction with the owner's approval | Pre-load referential rules; owner review queue | An "unknown members" list with counts, resolved before the load |
| 2 · Hierarchy integrity | Validates every hierarchy: one parent per member per level, no orphans, no cycles, no duplicate codes across ERPs; hierarchies are versioned with an effective date | Hierarchy validation rules; consolidation; versioning | A hierarchy report per dimension: members per level, orphans, duplicates, changes since last load |
| 3 · Grain | Builds each measure at its defined grain from the daily rows using the fiscal calendar, then checks that the sum at the grain equals the sum of the rows it came from | Grain builder; sum-of-parts checks | A per-measure reconciliation: daily total, weekly total, difference |
| 4 · Attributes | Requires the attributes each planning rule depends on, with defaults declared as rules and applied visibly | Attribute completeness rules with declared defaults | Attribute coverage per dimension and the rows that received a default |
| 5 · Several ERPs | Resolves customers, items and families across ERPs into one member before the load, with the mapping versioned and owned | Consolidation with name resolution and similarity scoring | One member with its source codes listed underneath |
| 6 · Actuals definition | Holds the demand-stream rule as a governed, versioned rule (which documents count, how returns and intercompany are treated) and applies it to the whole history | Rules in plain language with an owner and history | The rule text beside the actuals measure, with its version |
Every check is a rule with an owner. A failed row is held with the rule and the row; the load continues with the rest and the report says what was held. Examples from the showcase estate:
| Check | Kind | Example | When it fails |
|---|---|---|---|
| Every measure row references existing Item, Location, Customer and Time members | Completeness | 48 customers in sales history unknown to the Customer dimension | Rows held; members proposed for the owner |
| Every member has exactly one parent at each level | Consistency | 2,140 SKUs without a family; 3 SKUs with two families | Exception to the product-data owner |
| No duplicate codes for one member across ERPs | Consistency | FAM-12 (SAP) and FAM12 (Oracle) for the same family | Consolidated; owner confirms |
| Sum at the grain equals the sum of the source rows | Consistency | Weekly actuals for Item × Location × Customer vs daily VBRP rows | Load stays open until they match |
| Time buckets follow the fiscal calendar; no partial or missing weeks | Completeness | Week 53 handling at fiscal year end | Exception to the planning calendar owner |
| Required attributes present: lifecycle status, ABC, planner, unit | Completeness | 612 new SKUs with no lifecycle status | Default applied and reported; owner notified |
| Units are consistent within a measure | Quality | Actuals in cases for one plant, each for another | Exception to the item owner |
| The demand-stream rule applied to the whole history | Consistency | Returns excluded in 2025, included in 2024 | Rule re-applied; version noted |
| Record counts and control totals per measure match the source | Completeness | Every measure, every load | Load report stays open until they match |
Integration suites such as Informatica sell data integration, data quality, the catalog and lineage as separate services on one consumption meter, and a team stitches the four together for each load. Lima runs the four as one surface. The screen above is the same for every load into o9: each step from the SAP or Oracle invoice table to the o9 measure row shows its row count; the rule that stopped a row shows the row and the person who owns the fix; the fix is applied where the row stopped and the replay starts from that step. Column-level lineage is recorded from the run itself, so the trace from a number in o9 back to the ERP table is current every morning without a scanning project.
A rule such as "confirmed date is on or after order date" is written in words, previewed on live rows, versioned, and owned by a named person.
A row that fails a rule becomes an exception with the row, the rule, an owner and a deadline. The load carries on with the valid rows and says what it held.
Every step records what it read and wrote at column level, so the trace from a planning number back to the ERP field is captured as a by-product of running.
Values the ERP never held — hierarchies, changeover matrices, demand-stream rules — live in Lima with an owner and an effective date.
Results return to the ERP as transactions the ERP confirms; the confirmation is stored and reconciled against what was sent.
Each load carries its window and deadline; a tripped rule pauses the run and the clock, and the run resumes from its checkpoint after the fix.
o9 is loaded on its planning cycle; every load ends with a reconciliation report; the consensus forecast and the approved supply plan return to the ERP as transactions the ERP confirms.
Actuals, attributes and hierarchy changes loaded before the demand review, with the sum checks and the hierarchy report.
Stock, open orders and supply relationships as changes since the last load, in dependency order.
Scenario versions loaded and tagged; the current working view is never overwritten by a scenario.
| Result | SAP transaction | Oracle interface | How it is confirmed |
|---|---|---|---|
| Consensus forecast | Planned independent requirements: BAPI_REQUIREMENTS_CREATE / _CHANGE | MRP_FORECAST_INTERFACE | PIR version and counts acknowledged and reconciled per product-plant |
| Approved supply plan | BAPI_PLANNEDORDER_CREATE · BAPI_PR_CREATE | WIP job interface · PO_REQUISITIONS_INTERFACE_ALL | Order numbers stored; failures re-queued with reason |
| Allocation decisions | BAPI_SALESORDER_CHANGE | Order import (OE_HEADERS_IFACE_ALL) | Acknowledged and reconciled; visible on the next extraction |
| Approved attribute corrections | BAPI_MATERIAL_SAVEDATA | Item interface | Second-person approval in Lima, then the acknowledged write |
How a first load into o9 runs when two ERPs feed one graph. Figures are from the showcase estate.
| Program | What it gives you | Status |
|---|---|---|
| o9 technical partnership | A recognised integration path and a badge for planning COEs | Application planned · Q1 2027 |
| Systems integrator delivery | Delivery by your SI or ours on the same fixed-scope offer | Available |
One engine underneath every page in this family. It reads from any source and writes to any target, runs batch loads or change-data streams, handles a nightly delta or a multi-terabyte migration, and is licensed by capacity, so the bill stays the same however many rows move. Lima's fabric answers questions on data in place; Lima Backbone moves, transforms and returns data on a deadline. When to federate and when to pipeline · The Backbone hub.
Lima produces what o9 ingests: conformed members, validated hierarchies, measures at their grain, and the reconciliation that proves them, on the cycle schedule. o9 keeps its graph, its planning logic and its scenarios.
The row is held with the others for that customer, the customer is proposed as a member with the details from the ERP, and the steward approves or maps it. The load carries on with the rest and reports what it held.
A change is versioned with an effective date. The cycle in flight keeps the tree it started with; the next cycle gets the new one, and the change is traceable to a person and a date.
As planned independent requirements through the released BAPI, per product and plant, with the version noted; SAP's acknowledgement is stored and reconciled. Oracle receives it through the forecast interface.
Supply runs nightly as net-change; demand refreshes on the cycle; the dashboard shows lag and window margin for each.
Yes. One business unit or one region is a common first dataset; the hierarchy and member work extends from there.
One planning dataset, four weeks, fixed price, with the checks above run on your own data and a reconciliation report at the end.