offdataai
Energy & Utilities · data model template

Utility Smart-Meter (AMI) Analytics data model

Kimball warehouse for AMI: the core interval-read telemetry fact (~96 reads/day/meter), daily consumption snapshots, meter events, outages, and billing over conformed meter/service-point/customer/tariff dimensions.

Advanced Metering Infrastructure analytics for an electric/gas/water utility: high-frequency interval reads, daily consumption, meter events and alarms, outages, and billing — a Kimball star schema with conformed meter, service-point, customer, and tariff dimensions supporting load analysis, SAIDI/SAIFI reliability, and TOU billing. It is a Kimball dimensional model: fact tables at a declared grain surrounded by conformed dimensions, ready for BI tools and a semantic layer.

KimballEnergy & UtilitiesNERC CIPCCPA
11
tables
102
columns
16
relationships
4
PII columns

Opening the template creates a project with the ERD, platform-native DDL, a dbt project and documentation already generated (recommended platform: BigQuery). Edit it in plain English or on the canvas, then ship it to any supported warehouse.

Subject areas

meteringgrid_reliabilitybillingconformed_dimensions

Design decisions

  • Interval reads separated from daily snapshot

    Interval data is enormous (96+ rows/day/meter) and best partitioned by date; a daily snapshot fact serves most BI without scanning intervals.

  • Dedicated outage fact

    Reliability indices (SAIDI/SAIFI) require outage start/end/duration and customers-affected at the service-point grain.

Tables in the Utility Smart-Meter (AMI) 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 (5)

fct_interval_read

Grain: one row per meter per interval (5/15/30/60 min)

The core AMI telemetry fact — ~96 rows/day per 15-min meter.

ColumnTypeKeys
interval_read_keybigintPK
date_keybigint
meter_keybigint
service_point_keybigint
interval_timestamptimestamp
interval_minutessmallint
consumption_kwhdecimal
voltagedecimal
current_ampsdecimal
power_factordecimal
is_estimatedboolean

fct_daily_consumption

Grain: one row per meter per day (periodic snapshot)

ColumnTypeKeys
date_keybigint
meter_keybigint
service_point_keybigint
customer_keybigint
total_kwhdecimal
peak_demand_kwdecimal
min_voltagedecimal
max_voltagedecimal
read_countsmallint
estimated_read_countsmallint

fct_meter_event

Grain: one row per meter event/alarm

ColumnTypeKeys
meter_event_keybigintPK
date_keybigint
meter_keybigint
service_point_keybigint
event_typevarchar
event_timestamptimestamp
severityvarchar

fct_outage

Grain: one row per outage at a service point

Supports SAIDI/SAIFI reliability indices.

ColumnTypeKeys
outage_keybigintPK
service_point_keybigint
start_date_keybigint
end_date_keybigint
start_timestamptimestamp
end_timestamptimestamp
duration_minutesinteger
causevarchar
customers_affectedinteger
is_restoredboolean

fct_billing

Grain: one row per bill

ColumnTypeKeys
billing_keybigintPK
date_keybigint
customer_keybigint
service_point_keybigint
tariff_keybigint
billing_period_start_keybigint
billing_period_end_keybigint
consumption_kwhdecimal
peak_demand_kwdecimal
energy_chargedecimal
demand_chargedecimal
taxes_and_feesdecimal
total_amountdecimal

Dimension tables (6)

dim_date

Grain: one row per calendar day

ColumnTypeKeys
date_keybigintPK
full_datedateBK
month_numbersmallint
seasonvarchar
yearsmallint
is_weekendboolean
is_holidayboolean

dim_meter

Grain: one row per meter per SCD2 version

SCD type 2

ColumnTypeKeys
meter_keybigintPK
meter_idvarcharBK
serial_numbervarchar
meter_typevarchar
manufacturervarchar
modelvarchar
firmware_versionvarchar
interval_minutessmallint
install_datedate
meter_statusvarchar

dim_service_point

Grain: one row per service point/premise

ColumnTypeKeys
service_point_keybigintPK
service_point_idvarcharBK
premise_idvarchar
address_line1varcharPII
cityvarchar
statevarchar
postal_codevarchar
service_typevarchar
grid_segmentvarchar
transformer_idvarchar
substationvarchar
latitudedecimal
longitudedecimal

dim_customer

Grain: one row per customer per SCD2 version

SCD type 2

ColumnTypeKeys
customer_keybigintPK
customer_idvarcharBK
account_namevarcharPII
emailvarcharPII
phonevarcharPII
account_typevarchar
rate_classvarchar
enrollment_datedate
is_activeboolean

dim_tariff

Grain: one row per tariff/rate plan

ColumnTypeKeys
tariff_keybigintPK
tariff_codevarcharBK
tariff_namevarchar
rate_typevarchar
effective_datedate
currencyvarchar

dim_tariff_period

Grain: one row per TOU period within a tariff

ColumnTypeKeys
tariff_period_keybigintPK
tariff_keybigint
period_namevarchar
start_hoursmallint
end_hoursmallint
rate_per_kwhdecimal

Relationships

Each relationship is a foreign key on the first table referencing the second.

  • dim_tariff_period.tariff_key → dim_tariff (many-to-one)
  • fct_interval_read.date_key → dim_date (many-to-one)
  • fct_interval_read.meter_key → dim_meter (many-to-one)
  • fct_interval_read.service_point_key → dim_service_point (many-to-one)
  • fct_daily_consumption.date_key → dim_date (many-to-one)
  • fct_daily_consumption.meter_key → dim_meter (many-to-one)
  • fct_daily_consumption.service_point_key → dim_service_point (many-to-one)
  • fct_daily_consumption.customer_key → dim_customer (many-to-one)
  • fct_meter_event.date_key → dim_date (many-to-one)
  • fct_meter_event.meter_key → dim_meter (many-to-one)
  • fct_meter_event.service_point_key → dim_service_point (many-to-one)
  • fct_outage.service_point_key → dim_service_point (many-to-one)
  • fct_billing.date_key → dim_date (many-to-one)
  • fct_billing.customer_key → dim_customer (many-to-one)
  • fct_billing.service_point_key → dim_service_point (many-to-one)
  • fct_billing.tariff_key → dim_tariff (many-to-one)

Related templates

All templates →
Start for $1

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.

Get startedBook a demo

Plans from $1/month · cancel any time