SAP Cost Center Controlling Analytics data model
Kimball warehouse for SAP cost center controlling: a single CO posting fact whose plan, actual, commitment, and statistical measures sit side by side for plan-vs-actual variance reporting by cost element and activity type. CO documents (belnr/buzei) are degenerate dimensions; the SCD2 cost-center dimension is role-played as the partner cost center for sender/receiver activity allocations; a version dimension separates value types; SAP fiscal year/period drives overhead absorption, activity quantity, and manager responsibility reporting.
SAP Overhead Cost Controlling / Cost Center Accounting (CO-OM-CCA) plan-vs-actual analytics migrated from ECC / S/4HANA into Snowflake. Models a single CO posting fact at cost center × cost element × activity type × value type × fiscal-period grain, carrying actual (COEP.wkgbtr), plan, commitment, and statistical measures side by side for variance reporting, over conformed cost-center (CSKS, SCD2 + role-played partner), cost-element (CSKB / SKA1), activity-type (CSLA), controlling-area (TKA01), company-code (T001), profit-center (CEPC), and CO-version (TKVS) dimensions with SAP fiscal-period accounting in the controlling-area currency. It is a Kimball dimensional model: fact tables at a declared grain surrounded by conformed dimensions, ready for BI tools and a semantic layer.
- 10
- tables
- 87
- columns
- 10
- relationships
- 1
- PII columns
Opening the template creates a project with the ERD, platform-native DDL, a dbt project and documentation already generated (recommended platform: Snowflake). Edit it in plain English or on the canvas, then ship it to any supported warehouse.
Subject areas
Design decisions
Single posting fact carrying plan/actual/commitment/statistical side by side
Cost center controlling reporting is fundamentally plan-vs-actual; storing actual, plan, commitment, and statistical measures (plus a derived variance) as parallel columns on one fact at a shared grain lets variance reports subtract plan from actual without a costly self-join across separate plan and actual facts.
SCD2 on the cost-center dimension
Cost-center responsibility, hierarchy node, and profit-center assignment in CSKS change over time; type-2 history preserves the as-was manager and standard-hierarchy placement required for comparable, SOX-auditable responsibility reporting.
Role-playing the cost-center dimension as the partner cost center
Activity allocations and assessments/distributions post a sender and a receiver cost center; pointing both cost_center_key and partner_cost_center_key at the same conformed dim_cost_center (two FKs, distinct columns) models sender/receiver flows without duplicating cost-center master data.
Dedicated version dimension for value types
SAP CO separates postings by version (TKVS) and value type (actual, plan, commitment, statistical); a version dimension keeps that distinction conformed and queryable instead of encoding it as fact flags, so a measure column resolves unambiguously to its value type.
Measures stored in the controlling-area currency
COEP.wkgbtr is the controlling-area-currency amount and the controlling area (TKA01) defines that currency and fiscal-year variant; anchoring measures and the currency attribute to the controlling-area dimension guarantees additivity across cost centers within an area.
Tables in the SAP Cost Center Controlling Analytics model
Every table with its grain, columns, types and keys. PK marks a primary key, BK a business key and PII a column classified as personal data, which gets a masking strategy by default.
Fact tables (1)
fct_cost_center_posting
Grain: one row per cost center × cost element × activity type × value type × fiscal period
Plan/actual/commitment/statistical CO posting fact for variance reporting.
| Column | Type | Keys |
|---|---|---|
| cost_center_posting_key | bigint | PK |
| fiscal_period_key | bigint | |
| posting_date_key | bigint | |
| cost_center_key | bigint | |
| cost_element_key | bigint | |
| activity_type_key | bigint | |
| partner_cost_center_key | bigint | |
| company_code_key | bigint | |
| controlling_area_key | bigint | |
| profit_center_key | bigint | |
| version_key | bigint | |
| accounting_document | varchar | |
| document_line | varchar | |
| actual_amount | decimal | |
| plan_amount | decimal | |
| commitment_amount | decimal | |
| statistical_amount | decimal | |
| variance_amount | decimal | |
| actual_quantity | decimal | |
| plan_quantity | decimal | |
| activity_price | decimal | |
| currency | varchar |
Dimension tables (9)
dim_date
Grain: one row per calendar day
| Column | Type | Keys |
|---|---|---|
| date_key | bigint | PK |
| full_date | date | BK |
| day_of_month | smallint | |
| month_number | smallint | |
| month_name | varchar | |
| quarter | smallint | |
| year | smallint | |
| is_period_end | boolean |
dim_fiscal_period
Grain: one row per SAP fiscal year/period (gjahr/perio)
| Column | Type | Keys |
|---|---|---|
| fiscal_period_key | bigint | PK |
| fiscal_period_code | varchar | BK |
| fiscal_year | smallint | |
| fiscal_period | smallint | |
| fiscal_variant | varchar | |
| period_start_date | date | |
| period_end_date | date | |
| period_status | varchar |
dim_cost_center
Grain: one row per cost center per SCD2 version (master CSKS)
SCD2 cost-center master; also role-played as the partner cost center.
SCD type 2
| Column | Type | Keys |
|---|---|---|
| cost_center_key | bigint | PK |
| cost_center | varchar | BK |
| name | varchar | |
| description | varchar | |
| cost_center_category | varchar | |
| responsible_person | varchar | PII |
| department | varchar | |
| hierarchy_area | varchar | |
| profit_center | varchar | |
| company_code | varchar | |
| valid_from | date | |
| valid_to | date | |
| is_active | boolean |
dim_cost_element
Grain: one row per cost element (CSKB / in S/4 GL account SKA1)
| Column | Type | Keys |
|---|---|---|
| cost_element_key | bigint | PK |
| cost_element | varchar | BK |
| name | varchar | |
| cost_element_category | varchar | |
| cost_element_group | varchar | |
| is_primary | boolean | |
| is_secondary | boolean |
dim_activity_type
Grain: one row per activity type (master CSLA)
| Column | Type | Keys |
|---|---|---|
| activity_type_key | bigint | PK |
| activity_type | varchar | BK |
| name | varchar | |
| activity_unit | varchar | |
| allocation_cost_element | varchar | |
| is_active | boolean |
dim_controlling_area
Grain: one row per controlling area (TKA01)
| Column | Type | Keys |
|---|---|---|
| controlling_area_key | bigint | PK |
| controlling_area | varchar | BK |
| name | varchar | |
| currency_type | varchar | |
| controlling_area_currency | varchar | |
| fiscal_year_variant | varchar | |
| chart_of_accounts | varchar |
dim_company_code
Grain: one row per SAP company code (T001)
| Column | Type | Keys |
|---|---|---|
| company_code_key | bigint | PK |
| company_code | varchar | BK |
| company_name | varchar | |
| country | varchar | |
| local_currency | varchar |
dim_profit_center
Grain: one row per profit center (CEPC)
| Column | Type | Keys |
|---|---|---|
| profit_center_key | bigint | PK |
| profit_center | varchar | BK |
| name | varchar | |
| controlling_area | varchar | |
| segment | varchar |
dim_version
Grain: one row per CO version (TKVS)
| Column | Type | Keys |
|---|---|---|
| version_key | bigint | PK |
| version | varchar | BK |
| version_label | varchar | |
| value_type | varchar | |
| plan_actual_indicator | varchar | |
| is_locked | boolean |
Relationships
Each relationship is a foreign key on the first table referencing the second.
- fct_cost_center_posting.fiscal_period_key → dim_fiscal_period (many-to-one)
- fct_cost_center_posting.posting_date_key → dim_date (many-to-one)
- fct_cost_center_posting.cost_center_key → dim_cost_center (many-to-one)
- fct_cost_center_posting.cost_element_key → dim_cost_element (many-to-one)
- fct_cost_center_posting.activity_type_key → dim_activity_type (many-to-one)
- fct_cost_center_posting.partner_cost_center_key → dim_cost_center (many-to-one)
- fct_cost_center_posting.company_code_key → dim_company_code (many-to-one)
- fct_cost_center_posting.controlling_area_key → dim_controlling_area (many-to-one)
- fct_cost_center_posting.profit_center_key → dim_profit_center (many-to-one)
- fct_cost_center_posting.version_key → dim_version (many-to-one)
Related templates
All templates →From requirements to AI-ready context, in one platform.
Describe your business in a conversation, start from a template or connect your own database. Your first model is ready in minutes.
