Fact Table
What is a Fact Table?
A fact table is the central table in a data warehouse that stores quantitative, measurable business metrics and events, such as sales transactions, user behaviors, or revenue figures. It contains foreign keys that link to dimension tables and numeric measures that can be aggregated and analyzed.
In B2B SaaS and go-to-market operations, fact tables form the foundation of your data warehouse architecture, enabling GTM teams to answer critical business questions like "What was our pipeline velocity last quarter?" or "How many product qualified leads converted to paid customers?" Unlike dimension tables that store descriptive attributes (who, what, where, when), fact tables capture the actual business events and metrics that drive decision-making.
The concept originated from Ralph Kimball's dimensional modeling approach, which revolutionized how organizations structure data for analytics. For GTM teams using modern data stacks, fact tables serve as the single source of truth for metrics like bookings, lead conversions, feature adoption events, and customer engagement activities. They're designed for efficient aggregation and analysis, making them essential for revenue operations reporting, sales forecasting, and marketing attribution models.
Key Takeaways
Central data repository: Fact tables store all measurable business events and metrics in a data warehouse, serving as the foundation for analytics and reporting
Numeric and additive: Contains primarily numeric values (revenue, counts, durations) that can be summed, averaged, or aggregated across different dimensions
Foreign key relationships: Links to dimension tables through foreign keys, enabling analysis across multiple business contexts (time, geography, product, customer)
Optimized for queries: Designed for fast analytical queries and aggregations, supporting everything from pipeline analytics to customer health scoring
Granularity matters: The level of detail (daily vs. transaction-level) determines what questions you can answer and impacts storage and query performance
How It Works
Fact tables operate as the intersection point where business events meet dimensional context in your data warehouse. When a measurable event occurs—such as a lead conversion, a product feature usage, or a closed deal—your data pipeline captures this event and writes it to the appropriate fact table along with foreign keys that reference dimension tables.
The architecture follows a specific pattern: each row represents a single business event or periodic measurement, while columns contain both measurements (facts) and foreign keys to dimensions. For example, a fact_opportunities table might contain measures like opportunity_amount, days_to_close, and probability_score, along with foreign keys like account_id, owner_id, date_id, and stage_id that connect to their respective dimension tables.
Modern GTM data architectures typically implement fact tables through ELT processes, where raw data from systems like Salesforce, HubSpot, and product analytics platforms flows into a data warehouse (Snowflake, BigQuery, or Databricks), then gets transformed using tools like dbt into properly structured fact tables. According to Kimball Group's dimensional modeling techniques, this approach ensures data remains queryable and accurate for business analysis.
Query engines aggregate fact table data by joining with dimension tables to provide context. A marketing operations team might query fact_lead_activities joined with dim_campaign, dim_lead_source, and dim_date to calculate marketing attribution across channels and time periods. The fact table's structure—with indexed foreign keys and columnar storage—enables these complex analytical queries to run efficiently even across millions or billions of events.
Key Features
Additive measures: Contains numeric values that can be meaningfully summed across any dimension (revenue, lead count, event occurrences)
Grain definition: Each fact table has a specific level of detail, such as "one row per opportunity stage change" or "one row per daily user activity"
Foreign key relationships: Links to multiple dimension tables through standardized ID fields, enabling multi-dimensional analysis
Large volume storage: Designed to efficiently store millions to billions of rows representing historical business events
Sparse data handling: Accommodates null values when certain measures don't apply to all events, maintaining consistent schema
Audit columns: Typically includes metadata like
created_at,updated_at, andsource_systemfor data lineage tracking
Use Cases
Sales Pipeline Analytics
Revenue operations teams use fact tables to track every stage change in the sales process. A fact_opportunity_stage_changes table captures each time a deal moves through the pipeline, storing the opportunity amount, previous stage, new stage, timestamp, and foreign keys to account, owner, and product dimensions. This granular data enables analysis of pipeline velocity, stage conversion rates, and forecast accuracy across different segments.
Product Usage and Feature Adoption Tracking
Product-led growth companies maintain fact_feature_events tables that record every instance of feature usage, capturing user interactions, session duration, feature name, and associated metadata. By joining this with dimension tables for users, accounts, and subscription tiers, product and customer success teams can calculate feature adoption rates, identify power users, and predict churn risk based on usage patterns.
Marketing Campaign Performance Measurement
Marketing operations teams leverage fact_campaign_interactions to store every touchpoint a lead or account has with marketing campaigns—email opens, ad clicks, content downloads, webinar attendance. Each row contains the interaction type, timestamp, engagement score, and foreign keys to campaign, channel, and contact dimensions. This structure supports sophisticated multi-touch attribution models and enables calculation of marketing-sourced pipeline across various dimensions.
Implementation Example
Here's a practical example of designing fact and dimension tables for a B2B SaaS lead scoring system:
Lead Activity Fact Table Structure
Column Name | Data Type | Description | Example Value |
|---|---|---|---|
activity_id | STRING | Primary key | "act_29847592" |
lead_id | STRING | Foreign key to dim_leads | "lead_88234" |
account_id | STRING | Foreign key to dim_accounts | "acc_12049" |
activity_type_id | STRING | Foreign key to dim_activity_types | "type_email_open" |
date_id | INTEGER | Foreign key to dim_date | 20260118 |
activity_timestamp | TIMESTAMP | Exact event time | 2026-01-18 14:32:01 |
engagement_score | INTEGER | Calculated point value | 5 |
session_duration_seconds | INTEGER | Time spent (if applicable) | 245 |
source_campaign_id | STRING | Foreign key to dim_campaigns | "camp_q1_2026" |
created_at | TIMESTAMP | Record creation | 2026-01-18 14:32:05 |
GTM Analytics Query Pattern
Sample Aggregation Query Result
Lead Segment | Total Activities | Avg Engagement Score | MQL Conversion Rate | Pipeline Generated |
|---|---|---|---|---|
Enterprise ICP | 2,847 | 142 | 34% | $2.4M |
Mid-Market ICP | 5,293 | 87 | 18% | $890K |
SMB ICP | 8,102 | 52 | 9% | $340K |
Non-ICP | 3,401 | 28 | 2% | $45K |
This architecture enables your GTM team to answer questions like "Which marketing channels drive the highest-scoring leads?" or "How does engagement velocity correlate with deal close rates?" by aggregating fact table data across different dimensional slices. According to Snowflake's data warehousing best practices, clustering fact tables on commonly filtered columns (like date_id or account_id) dramatically improves query performance for these analytical workloads.
Related Terms
Data Warehouse: The repository where fact tables and dimension tables reside, enabling analytical queries
Dimensional Modeling: The design methodology that uses fact tables and dimension tables to structure data for analytics
Data Pipeline: The infrastructure that moves data from source systems into fact tables through extraction, loading, and transformation
ELT (Extract, Load, Transform): Modern data integration pattern that loads raw data first, then transforms it into fact tables
Revenue Operations: The GTM function that relies heavily on fact table analytics for forecasting and performance tracking
Marketing Attribution: Analysis technique that uses fact tables to assign revenue credit across marketing touchpoints
Product Analytics: Domain that uses fact tables to track feature usage and user behavior patterns
Data Lineage: Documentation of how data flows from source systems into fact tables and downstream reports
Frequently Asked Questions
What is a fact table in a data warehouse?
Quick Answer: A fact table is the central table in a data warehouse that stores measurable business events and numeric metrics, linked to dimension tables through foreign keys for multi-dimensional analysis.
A fact table serves as the quantitative backbone of your data warehouse, containing rows that represent business events (transactions, activities, observations) and columns that hold numeric measurements plus foreign keys to dimension tables. For B2B SaaS GTM teams, fact tables capture events like opportunity stage changes, lead activities, product usage, and revenue transactions, enabling analysis across time, geography, product, and customer dimensions.
What is the difference between a fact table and a dimension table?
Quick Answer: Fact tables store measurable numeric events and metrics that can be aggregated, while dimension tables store descriptive attributes that provide context for analysis.
The distinction is fundamental to data warehouse design: fact tables answer "how many?" or "how much?" with numeric measures like revenue amount, event count, or duration. Dimension tables answer "who, what, where, when?" with descriptive attributes like customer name, product category, geographic region, or date. In a sales analytics scenario, your fact table contains the deal amounts and close dates, while dimension tables describe the sales rep (name, team, region), account (company name, industry, size), and product (SKU, category, price tier). This separation enables efficient storage and flexible analysis across any combination of dimensions.
How do you decide the grain of a fact table?
Quick Answer: The grain of a fact table defines what each row represents (one transaction, one daily snapshot, one stage change) and determines what questions you can answer with the data.
Choosing grain requires understanding your business questions and reporting needs. Transaction-level grain (one row per order, one row per feature usage event) provides maximum flexibility and detail but requires more storage and processing power. Periodic snapshot grain (one row per account per day, one row per lead per week) reduces data volume and speeds up trend analysis but loses event-level details. For GTM analytics, you might maintain transaction-level fact tables for critical events like opportunity creation and stage changes, while using daily snapshot fact tables for metrics like account health scores or product engagement scores. The key is defining grain early and maintaining it consistently—never mix transaction and summary data in the same fact table.
Can fact tables contain non-numeric data?
While fact tables primarily store numeric measures, they can contain non-numeric data in specific situations. Textual columns like status codes, event types, or descriptive flags are acceptable when they're facts about the event rather than dimensional attributes. However, for proper data warehouse design, most descriptive text belongs in dimension tables. A good rule: if you'll filter or group by it, make it a dimension; if you'll sum or count it, make it a fact. Some organizations use "factless fact tables" that contain only foreign keys and timestamps to record events like meeting attendance or campaign exposure where no numeric measure exists.
How do fact tables support real-time analytics?
Modern data platforms enable near real-time fact table updates through streaming data pipelines and incremental processing. Tools like Fivetran, Airbyte, or custom reverse ETL processes continuously sync data from operational systems (CRM, marketing automation, product databases) into data warehouses, appending new rows to fact tables as events occur. Cloud data warehouses like Snowflake and BigQuery handle concurrent writes and queries efficiently, allowing GTM teams to build dashboards that reflect pipeline changes, lead activities, and product usage within minutes of occurrence. For truly real-time applications like lead scoring or signal activation, some organizations maintain both a streaming fact table (using technologies like Apache Kafka or Kinesis) and a warehouse fact table for historical analysis.
Conclusion
Fact tables represent the quantitative foundation of modern B2B SaaS data architecture, enabling GTM teams to measure, analyze, and optimize every aspect of their revenue operations. By storing measurable business events in a structured, dimensional format, fact tables transform raw operational data into actionable insights about pipeline performance, customer behavior, and marketing effectiveness.
For marketing teams, fact tables power attribution analysis and campaign performance measurement. Sales teams rely on fact table data for pipeline forecasting and territory planning. Customer success teams use fact tables to calculate health scores and identify expansion opportunities. Product teams analyze fact tables to measure feature adoption and guide roadmap decisions. The common thread: fact tables provide the single source of truth for data-driven decision-making.
As B2B SaaS companies increasingly adopt modern data stacks and product-led growth strategies, well-designed fact tables become even more critical. Understanding fact table architecture—from grain definition to dimension relationships to query optimization—empowers GTM professionals to build scalable analytics infrastructure that grows with their business. Explore related concepts like data transformation and data warehouse design to deepen your understanding of modern data architecture.
Last Updated: January 18, 2026
