Context
Four models have descriptions that do not state their grain. Grain is the single most important piece of documentation on any dimensional model — it tells consumers exactly what one row represents, prevents incorrect aggregations, and is the first thing a reviewer checks when a metric looks wrong.
The current state:
| Model |
Current description |
Required grain statement |
dim_ports |
"Port/connector dimension" |
"One row per charge_point_id + port_id + connector_id" |
fact_charge_attempts |
"combines charge attempts and transactions data" |
"One row per charge attempt per port" |
fact_downtime_daily |
"Daily aggregation of charge point downtime" |
"One row per date + charge_point_id + port_id + outage type" |
fact_interval_data |
"15-minute interval meter values" |
"One row per charge_point_id + transaction_id + connector_id + ingested_ts + measurand + unit + phase + 15-min interval" |
fact_uptime is the only model that currently states its grain correctly and does not need to change.
Acceptance criteria
Context
Four models have descriptions that do not state their grain. Grain is the single most important piece of documentation on any dimensional model — it tells consumers exactly what one row represents, prevents incorrect aggregations, and is the first thing a reviewer checks when a metric looks wrong.
The current state:
dim_portsfact_charge_attemptsfact_downtime_dailyfact_interval_datafact_uptimeis the only model that currently states its grain correctly and does not need to change.Acceptance criteria
dim_portsmodel description begins with a grain statement in the form "One row per …"fact_charge_attemptsmodel description begins with a grain statement in the form "One row per …"fact_downtime_dailymodel description begins with a grain statement in the form "One row per …"fact_interval_datamodel description begins with a grain statement in the form "One row per …".ymlconfig