Carbon Accounting & ESG (GHG Protocol) data model
Kimball warehouse for carbon accounting: the CO2e emission fact (scope 1/2/3) with activity data and versioned emission factors, energy consumption, and reduction targets over conformed organization, facility, source, factor, gas, and supplier dimensions.
Corporate greenhouse-gas accounting under the GHG Protocol: activity data (energy, fuel, travel, purchased goods) converted to CO2e via versioned emission factors, classified across Scopes 1, 2, and 3, per organization, facility, emission source, and value-chain supplier — with energy consumption and science-based reduction targets for ISO 14064 / CSRD reporting. It is a Kimball dimensional model: fact tables at a declared grain surrounded by conformed dimensions, ready for BI tools and a semantic layer.
- 12
- tables
- 91
- columns
- 15
- relationships
- 0
- 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
Activity data + emission factor → CO2e fact
The GHG Protocol computes emissions by multiplying activity data by an emission factor; modeling both and the resulting CO2e supports audit and recalculation.
Versioned emission factors
Factors change yearly (and by GWP version AR5/AR6); a factor dimension with validity dates lets historical emissions be recomputed correctly.
Scope carried on the fact
Reporting splits totals by Scope 1/2/3 (and Scope 3 categories 1-15); scope is a fast filter on the emission fact.
Tables in the Carbon Accounting & ESG (GHG Protocol) 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 (4)
fct_emission
Grain: one row per emission calculation
The core CO2e fact — additive across scope, source, facility.
| Column | Type | Keys |
|---|---|---|
| emission_key | bigint | PK |
| date_key | bigint | |
| organization_key | bigint | |
| facility_key | bigint | |
| emission_source_key | bigint | |
| emission_factor_key | bigint | |
| supplier_key | bigint | |
| gas_key | bigint | |
| scope | smallint | |
| activity_quantity | decimal | |
| activity_unit | varchar | |
| co2e_tonnes | decimal | |
| is_estimated | boolean | |
| data_quality_score | smallint |
fct_activity_data
Grain: one row per raw activity record
| Column | Type | Keys |
|---|---|---|
| activity_data_key | bigint | PK |
| date_key | bigint | |
| facility_key | bigint | |
| emission_source_key | bigint | |
| activity_type_key | bigint | |
| quantity | decimal | |
| unit_of_measure | varchar | |
| cost | decimal | |
| is_primary_data | boolean |
fct_energy_consumption
Grain: one row per facility per energy type per month
| Column | Type | Keys |
|---|---|---|
| date_key | bigint | |
| facility_key | bigint | |
| energy_type | varchar | |
| consumption_quantity | decimal | |
| unit_of_measure | varchar | |
| renewable_percent | decimal | |
| co2e_tonnes | decimal |
fct_emission_target
Grain: one row per reduction target
| Column | Type | Keys |
|---|---|---|
| emission_target_key | bigint | PK |
| organization_key | bigint | |
| base_year_date_key | bigint | |
| target_year_date_key | bigint | |
| scope | smallint | |
| baseline_co2e_tonnes | decimal | |
| target_co2e_tonnes | decimal | |
| reduction_percent | decimal | |
| is_science_based | boolean |
Dimension tables (6)
dim_date
Grain: one row per calendar day
| Column | Type | Keys |
|---|---|---|
| date_key | bigint | PK |
| full_date | date | BK |
| month_number | smallint | |
| quarter | smallint | |
| year | smallint | |
| reporting_year | smallint |
dim_organization
Grain: one row per reporting organization/entity
| Column | Type | Keys |
|---|---|---|
| organization_key | bigint | PK |
| organization_id | varchar | BK |
| organization_name | varchar | |
| industry | varchar | |
| reporting_boundary | varchar | |
| base_year | smallint | |
| country | varchar |
dim_facility
Grain: one row per facility/site
| Column | Type | Keys |
|---|---|---|
| facility_key | bigint | PK |
| facility_id | varchar | BK |
| organization_key | bigint | |
| facility_name | varchar | |
| facility_type | varchar | |
| country | varchar | |
| region | varchar | |
| latitude | decimal | |
| longitude | decimal |
dim_emission_source
Grain: one row per emission source category
| Column | Type | Keys |
|---|---|---|
| emission_source_key | bigint | PK |
| source_code | varchar | BK |
| source_name | varchar | |
| scope | smallint | |
| category | varchar | |
| scope3_category_number | smallint |
dim_emission_factor
Grain: one row per emission factor version
| Column | Type | Keys |
|---|---|---|
| emission_factor_key | bigint | PK |
| factor_code | varchar | BK |
| factor_name | varchar | |
| source_database | varchar | |
| activity_unit | varchar | |
| co2e_per_unit | decimal | |
| gwp_version | varchar | |
| valid_from | date | |
| valid_to | date |
dim_supplier
Grain: one row per value-chain supplier (Scope 3)
| Column | Type | Keys |
|---|---|---|
| supplier_key | bigint | PK |
| supplier_id | varchar | BK |
| supplier_name | varchar | |
| country | varchar | |
| industry | varchar | |
| spend_category | varchar | |
| has_science_based_target | boolean |
Lookup tables (2)
dim_gas
Grain: one row per greenhouse gas
| Column | Type | Keys |
|---|---|---|
| gas_key | bigint | PK |
| gas_code | varchar | BK |
| gas_name | varchar | |
| global_warming_potential | decimal |
dim_activity_type
Grain: one row per activity type
| Column | Type | Keys |
|---|---|---|
| activity_type_key | bigint | PK |
| activity_code | varchar | BK |
| activity_name | varchar | |
| unit_of_measure | varchar |
Relationships
Each relationship is a foreign key on the first table referencing the second.
- dim_facility.organization_key → dim_organization (many-to-one)
- fct_emission.date_key → dim_date (many-to-one)
- fct_emission.organization_key → dim_organization (many-to-one)
- fct_emission.facility_key → dim_facility (many-to-one)
- fct_emission.emission_source_key → dim_emission_source (many-to-one)
- fct_emission.emission_factor_key → dim_emission_factor (many-to-one)
- fct_emission.supplier_key → dim_supplier (many-to-one)
- fct_emission.gas_key → dim_gas (many-to-one)
- fct_activity_data.date_key → dim_date (many-to-one)
- fct_activity_data.facility_key → dim_facility (many-to-one)
- fct_activity_data.emission_source_key → dim_emission_source (many-to-one)
- fct_activity_data.activity_type_key → dim_activity_type (many-to-one)
- fct_energy_consumption.date_key → dim_date (many-to-one)
- fct_energy_consumption.facility_key → dim_facility (many-to-one)
- fct_emission_target.organization_key → dim_organization (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.
