Data Modeling Updated: 2026-03-14

What is Dimensional Modeling?

A data modeling technique optimized for data warehousing and BI, organizing data into fact tables (measurements) and dimension tables (context) for fast analytical queries.

From the field

Dimensional modeling is Ralph Kimball's methodology for building data warehouses that analysts actually enjoy using. The core insight is deceptively simple: separate what happened (facts) from the context it happened in (dimensions). Thirty years later, dimensional modeling is still the default mental model for analytics marts, and the Kimball four-step process (pick a business process, declare the grain, identify dimensions, identify facts) is the most reliable design algorithm in the field.

Why dimensional modeling endures

Newer methodologies keep appearing — Data Vault 2.0, Anchor Modeling, One Big Table, metric-layer-centric approaches — and each has a place. But dimensional modeling's combination of business-user intuition (facts = measurements, dimensions = context), BI-tool friendliness (every major BI tool has first-class support for dim/fact joins), and platform portability (Snowflake, BigQuery, Databricks, Redshift all optimize well for star schemas) keeps it as the mart-layer default. Even teams that use Data Vault for the integration layer usually materialize dimensional marts on top.

Field story

A healthtech analytics team I worked with was struggling with a 300-model dbt project that had no consistent modeling pattern. Models were named after their source systems (epic_orders, cerner_orders), grains were undocumented, dimensions were scattered across "whatever table needed them." We reorganized the consumption layer around dimensional modeling — 18 fact tables (one per business process: admissions, discharges, lab orders, prescriptions, billing), shared conformed dimensions (dim_patient, dim_provider, dim_encounter, dim_date). The exercise of applying Kimball's four-step process per fact table forced every grain decision to be explicit. Analysts stopped asking "which table should I use?" — the star structure made it obvious. Dashboard development time dropped roughly 3x. Lesson: dimensional modeling's real value isn't the schema shape; it's the design discipline it imposes.

Dimensional Modeling is a data modeling technique created by Ralph Kimball specifically for data warehouses and business intelligence. It organizes data into fact tables (quantitative measurements) and dimension tables (descriptive context), making data intuitive for business users and optimized for analytical queries.

Core Components

Fact Tables

Store the quantitative measurements of a business process:
  • Rows: One per event/transaction (an order, a click, a payment)
  • Columns: Foreign keys to dimensions + numeric measures
  • Grain: The level of detail (e.g., one row per order line item)
-- Example: sales_fact
order_id | date_key | product_key | customer_key | quantity | revenue | discount

Dimension Tables

Provide descriptive context for facts:
  • Rows: One per business entity (a product, a customer, a date)
  • Columns: Descriptive attributes (name, category, address)
  • Denormalized: Flatten hierarchies for query performance
-- Example: dim_product
product_key | product_name | category | subcategory | brand | color | size | price

Schema Designs

Star Schema

  • Fact table in the center, dimension tables around it
  • Dimensions are denormalized (no further joins needed)
  • Best for: Most data warehouse use cases

Snowflake Schema

  • Dimensions are normalized (broken into sub-dimensions)
  • Saves storage but requires more joins
  • Best for: When storage is expensive or data changes frequently

Galaxy Schema (Fact Constellation)

  • Multiple fact tables sharing dimensions
  • Best for: Complex businesses with multiple business processes

Kimball's Four-Step Process

  1. Select the Business Process: What are you measuring? (Sales, clicks)
  2. Declare the Grain: What does one row represent? (One order line)
  3. Identify the Dimensions: Who, what, when, where, why (5 Ws)
  4. Identify the Facts: What numeric measurements to capture

Types of Fact Tables

TypeDescriptionExample
TransactionOne row per eventIndividual sales
Periodic SnapshotOne row per time periodDaily account balance
Accumulating SnapshotOne row per lifecycleOrder fulfillment stages
FactlessNo measures, just eventsStudent attendance

Slowly Changing Dimensions (SCDs)

  • Type 1: Overwrite old values (lose history)
  • Type 2: Add new rows with effective dates (keep history)
  • Type 3: Add columns for old/new values (limited history)

Common Use Cases

  1. Enterprise BI: Build the analytical layer for dashboards
  2. dbt Models: Implement dimensional models as dbt transforms
  3. Self-Service Analytics: Business users query intuitive structures
  4. Data Marts: Department-specific analytical datasets
  5. Metrics Layer: Define consistent business metrics

Key Points

Gotchas

Dimensional modeling pitfalls that catch teams repeatedly:

  • Skipping the grain-declaration step. Kimball's four-step process works only if you explicitly declare grain before building. "One row per order" vs. "one row per order line" vs. "one row per order line per day" — each gives different results for downstream metrics. Skipping this step is the most common source of fanout bugs.
  • Building fact tables without a business-process focus. Fact tables should each represent one business process (orders, returns, support tickets). Teams that build "omnibus" facts mixing multiple processes end up with sparse NULLs everywhere and unclear semantics.
  • SCD Type 2 retrofit. Retrofitting Type 2 onto dimensions that have shipped with Type 1 requires rebuilding every downstream fact that references them. Decide SCD type per dimension before building, especially for attributes with business meaning that changes (customer_segment, employee_manager).
  • Ignoring late-arriving facts. Fact rows sometimes arrive after their "event date" — a refund three weeks later. Your merge/upsert logic must handle backdated inserts; your partition strategy must not assume facts arrive in date order.
  • Mixing accumulating-snapshot and transactional-fact patterns. An order-fulfillment accumulating-snapshot has one row per order, updated as the order progresses. Teams sometimes also try to use it as a transactional fact, leading to confused grain. Pick one pattern per table.
  • Not using a date dimension. Every star schema should have dim_date with pre-computed attributes (year, quarter, fiscal_period, is_weekend, is_holiday). Repeatedly doing EXTRACT(QUARTER FROM date) in queries is slower and error-prone.
  • Dimensions that grow too wide. A dim_customer with 400 attributes is unwieldy. Split into mini-dimensions (high-churn attributes separated out) or outriggers (related but optional attributes) when dimensions get unmanageable.
  • Conformed dimensions by name only. Two dim_customer tables in different marts with the same name but different surrogate keys aren't conformed — they're parallel. True conformed dimensions share the surrogate key space and definitions. Enforce via governance or a shared-staging pattern.
  • Treating dimensional modeling and OBT as enemies. They're tools for different jobs. A star schema for self-service BI; an OBT for a specific high-concurrency dashboard or ML feature table. Modern warehouses happily host both.

Frequently Asked Questions

What is dimensional modeling?

Dimensional modeling is a data warehouse design methodology created by Ralph Kimball that organizes data into fact tables (quantitative measurements — revenue, quantities, counts) and dimension tables (descriptive context — customer, product, date, store). Facts are typically long and narrow with foreign keys plus measures; dimensions are shorter and wider with descriptive attributes. The design optimizes for analytical queries, BI tool friendliness, and business-user intuition ("facts = what happened, dimensions = context"). It's the most widely adopted analytics data modeling approach and underlies virtually every major BI tool.

What is the difference between dimensional modeling and normalized (3NF) modeling?

3NF normalized modeling minimizes redundancy — data is split into many tables connected by foreign keys, ideal for transactional OLTP systems where writes are frequent and updates must be consistent. Dimensional modeling denormalizes dimensions into flat tables and groups facts by business process, ideal for analytical OLAP workloads where reads dominate and query performance matters. The two aren't competitors — most modern warehouses use normalized staging/integration layers feeding dimensional mart layers. Use 3NF for source-of-truth integration; use dimensional for the consumption layer analysts actually query.

What are Kimball's four steps for dimensional design?

(1) Select the business process you're modeling — orders, clicks, payments, admissions, support tickets. Each business process becomes one fact table. (2) Declare the grain — one sentence describing what a single row in the fact means ("one row per order line per day"). (3) Identify the dimensions — who, what, when, where, why is this event happening. (4) Identify the facts (measures) — the numeric things you'll SUM/AVG/COUNT. Following this order prevents the most common design mistakes. The grain-declaration step in particular is where most teams get into trouble by skipping it.

What is a star schema vs a snowflake schema?

Star schema: fact table in the center, dimensions denormalized (flat, one row per entity with all attributes). Snowflake schema (no relation to the Snowflake warehouse): dimensions normalized into multiple sub-tables. Star is faster to query, simpler to understand, uses slightly more storage. Snowflake saves storage and better handles attributes that change at different rates. On modern cloud columnar warehouses, storage is cheap and compute is the cost driver, so denormalized star schema almost always wins. Default to star; go snowflake only for specific reasons.

What are Slowly Changing Dimensions (SCDs)?

SCDs are patterns for handling dimensions whose attributes change over time. Type 1: overwrite — lose history, simplest. Type 2: new row with effective-date range — preserve history, most common for analytics. Type 3: add a previous-value column — preserve one change back only, rarely used. Type 4: split volatile attributes into a mini-dimension. Type 6: hybrid combining Types 1+2+3. The choice matters for historical reporting: did the $10M Q1 revenue come from customers classified as SMB at the time, or by their current classification? Type 2 answers "at the time"; Type 1 gives you only "currently."

What tools support dimensional modeling?

For building dimensional models: dbt is the dominant modern tool for implementing fact and dimension tables as code on Snowflake, BigQuery, Redshift, Databricks. `dbt_utils.generate_surrogate_key`, `dbt-snapshot` for Type 2 SCDs, `dbt_utils.date_spine` for dim_date generation. For BI consumption: Looker (LookML explicitly models joins between facts and dimensions), Tableau, Power BI, Mode, Metabase — all have first-class support for star-schema navigation. Semantic layers (dbt semantic layer, Cube.dev, MetricFlow) sit on top of dimensional models to centralize metric definitions.

Is dimensional modeling still relevant in 2026?

Yes — dimensional modeling remains the default for analytics mart layers across nearly every modern data stack. The Kimball patterns (facts, dimensions, SCDs, conformed dimensions, four-step design process) are foundational knowledge. What has changed is implementation — dbt replaced hand-written ETL, cloud columnar warehouses handle wide denormalized tables efficiently, and OBT competes in specific niches (ML feature tables, high-concurrency single-dashboard use cases). But the design *thinking* of dimensional modeling — declaring grain, separating facts from context, handling SCD, sharing conformed dimensions — is as relevant as it was in 1996.

Related Terms

Star SchemaData ModelingData WarehouseSlowly Changing Dimensions (SCD)dbt (Data Build Tool)

Related Tools

dbtSnowflakeBigQueryLookerPower BI

Learn More

Browse All Terms Read Articles