← Back to Glossary

Fact table

A fact table is the central table in a dimensional model that stores numeric measures (like revenue or quantity) alongside foreign keys linking to descriptive dimension tables.

Overview

A fact table records the measurable events of a business process — a sale, a page view, a shipment — at a defined grain (one row per order line, one row per session, etc.). Each row typically consists of two kinds of columns: foreign keys pointing to dimension tables (customer_key, product_key, date_key) and measures, the additive numeric facts you aggregate (quantity, revenue, duration_seconds).

Fact tables are usually the largest tables in a warehouse by row count, often millions to billions of rows, while dimension tables stay comparatively small. Kimball distinguishes a few fact table types: transaction fact tables (one row per event), periodic snapshot fact tables (one row per entity per time period, e.g., daily account balance), and accumulating snapshot fact tables (one row per process instance, updated as it moves through stages, e.g., an order from placed to shipped to delivered).

Related terms

FAQS

A fact table stores numeric measures and foreign keys for a business event, and is usually large and narrow. A dimension table stores descriptive attributes for filtering and grouping, and is usually smaller and wider.

Grain is the level of detail one row represents — for example, one row per order line item versus one row per order. Declaring the grain explicitly before adding columns is a core step in dimensional modeling.