# Grain Statements

> One grain statement per fact table. Written in plain business language.
> Grain statements must be explicitly validated with stakeholders before model build begins.
> A signed-off grain statement is effectively a contract — it determines what the fact table can and cannot answer.

---

## Grain Statement Register

| # | Fact Table Name | Grain Statement | Fact Type | Status | Signed off by |
|---|---|---|---|---|---|
| 1 | | | `transaction / snapshot / accumulating` | `draft / reviewed / signed-off` | |

---

## Detailed Grain Definitions

### [Fact Table Name]

**Grain statement:**
> "One row in this fact table represents ___."

**Fact type:** Transaction / Periodic Snapshot / Accumulating Snapshot

**Grain rationale:**
> Why was this grain chosen over alternatives? What alternatives were considered and rejected?

**Grain validation:**
- [ ] Meaningful to a business user at this level of detail?
- [ ] Consistent with how the source system records the event?
- [ ] All proposed facts consistent with this grain?
- [ ] Confirmed with the data / systems owner that source data exists at this grain?

**Grain constraints:**
> What this grain cannot support (be explicit — prevents scope creep later):

**Proposed facts at this grain:**
| Fact | Additive? | Notes |
|---|---|---|
| | | |

**Proposed dimensions at this grain:**
| Dimension | Notes |
|---|---|
| | |

**Stakeholder sign-off:**
| Name | Role | Date | Notes |
|---|---|---|---|
| | | | |

---

## Grain conflict log

> Record any cases where stakeholders disagreed on the grain and how it was resolved.

| Conflict | Option A | Option B | Resolution | Rationale |
|---|---|---|---|---|
| | | | | |
