Analytics Catalog/SAP S/4HANA/Controlling/Internal order report
Explore the catalogACDOCACost Center reportGeneral LedgerCDS viewsExtraction
SAP S/4HANA · Controlling (CO)

Internal Order Report

Budget versus actual by internal order, with what is still available, built on ACDOCA, where the order's actuals are real-time. The over-budget orders surface first.

Sample build of the Internal Order Report — budget versus actual by internal order, with the over-budget orders surfaced first, rendered tool-neutral so it runs in Power BI, SAC, or Tableau.

Internal Order Report sample
FY2026 · budget vs actual
Filters
Controlling area
A000
Order group
Marketing FY26
Order type
Overhead
Status
Released
950K
Budget
793K
Actual
157K
Available
1 / 4
Over budget
Internal orderBudgetActualAvailableUsed
100100 · Trade show EMEA250,000268,000−18,000107%
100400 · Sponsorships120,000118,0002,00098%
100200 · Product launch400,000312,00088,00078%
100300 · Brand campaign180,00095,00085,00053%
AI Analyst · active
reading

Across four orders, 793K spent against 950K budget — 83.5% used, 157K still available. But it is concentrated: one order is already over.

flag

Trade show EMEA (100100) is 7% over budget — 268K against 250K, −18K available. It is the only order in the red, and the year is not done.

root cause & next step

Spend crossed budget before the order closed. Route to the order owner for a supplement or a stop. In S/4HANA the order's actuals sit on ACDOCA (field AUFNR), so the overrun is visible in real time — not a month-end surprise.

Illustrative data · actuals reconciled to ACDOCA · runs on your warehouse. See it live →
ACDOCA · order actual lines+AUFK · order master────▶Internal Order Report

The report's query logic — generic SQL on ACDOCA. It sums actual cost by internal order for the year, then joins your budget to get what is available. The same SQL becomes a dbt model in your warehouse.

How it interconnects: in ACDOCA, AUFNR is the internal order, RACCT the cost element (G/L account), and HSL the amount in company-code currency. Order budgets live in your budgeting; available is budget − actual. Because CO posts directly to ACDOCA, the order's actuals are real-time — and the account assignment (AUFNR) is on the journal line even when it is blank in the classic BSEG.
SQL data set · genericized · parameterized · budget vs actual by internal order, reads ACDOCA
Show / hide SQL
SELECT  a.aufnr                          AS internal_order,
        SUM(a.hsl)                       AS actual_cost,
        b.budget                         AS budget,
        b.budget - SUM(a.hsl)            AS available
FROM    acdoca a
LEFT JOIN order_budget b ON b.aufnr = a.aufnr
WHERE   a.rbukrs = :P_COMPANY_CODE
  AND   a.gjahr  = :P_FISCAL_YEAR
  AND   a.aufnr IN ( :P_ORDER_GROUP )
GROUP   BY a.aufnr, b.budget
ORDER   BY available ASC;
:P_COMPANY_CODE :P_FISCAL_YEAR :P_ORDER_GROUP
Never any customer schema. Ordered least-available-first so the over-budget orders surface at the top. Internal-order actuals are in ACDOCA — the classic CO line-item tables COEP / COSP are compatibility views now (SAP Note 2270404); read ACDOCA (or the released journal CDS view) directly, never via ODP-RFC.

The data-warehouse model — one fact surrounded by conformed dimensions (what you slice by) and measures (what you aggregate), expressed as dbt so it migrates with you. Grain: one row per cost line on an order (order · cost element · period).

dim_internal_orderorder · type · status dim_accountcost element · G/L dim_cost_centersettlement receiver dim_dateyear · posting period fct_order_costfact · one row per order lineactual · budget · available
●— fact → dimension join
ElementTypeDefinition
dim_internal_orderdimensionThe internal order — type, status, responsible (AUFNR)
dim_accountdimensionCost element / G/L account — the nature of the cost (RACCT)
dim_cost_centerdimensionThe cost center the order settles to (RCNTR)
dim_datedimensionConformed calendar — fiscal year & posting period
actual_costmeasureActual cost posted to the order (HSL)
budgetmeasureThe order budget, from your budgeting
availablemeasureBudget − actual — what is left to spend
Runs on your cloud warehouse — Snowflake, BigQuery, Redshift, or Synapse on AWS, Google Cloud, or Azure. Reconciled to ACDOCA — 0 variance by design. You own the code, the model, and the data.
How the data gets here: a SAP-compliant extract of ACDOCA (or the released journal CDS view) — via SLT or Table/Table-CDC — never ODP-RFC (prohibited under SAP Note 3255746, blocked June 2026). See the extraction pattern & data flow →
See the complete model
How this report's order-cost fact and dimensions fit the full owned model, via conformed keys.
Controlling data model → Enterprise model →

Every source object behind this report. Each linked object has its own page — with its fields and its real S/4HANA status, so you build on the right thing.

ObjectRoleKey fieldsS/4HANA status
ACDOCAUniversal Journal — the order actual lines (AUFNR · RACCT · HSL)6 PK · amountsTransparent table
AUFKInternal order master — type, status, responsible, company codeMANDT · AUFNRTransparent table
I_GLAccountLineItemReleased journal-entry line view — order actuals surface herereleasedReleased CDS view
COEPClassic CO line items — now a compatibility view over ACDOCA (Note 2270404)compatCompatibility view
SKA1G/L account (chart of accounts) — cost element category, GLACCOUNT_TYPEKTOPL · SAKNRTransparent table
Key fields = the primary key plus the columns this report selects; S/4HANA status = whether the object is a live transparent table, a released CDS view, or a compatibility view over ACDOCA. Extract the released CDS view or the transparent table directly — never a compatibility view, never via ODP-RFC.
Want this built & owned?
A reconciled, customer-owned internal-order reporting layer on ACDOCA, on your cloud — budget vs actual by order, your team owns the code. Ten-day proof of concept.
See the Controlling module → Talk to us →