A Power BI report is only as right as the model under it. Most wrong numbers do not come from a bad chart. They come from a table with an unclear grain, a relationship pointing the wrong way, or a column summarized in a way that does not mean what the label says.
This article builds one small model from scratch. It names the grain, splits a flat export into a star schema, sets two relationships and writes one DAX measure. Every number in it is small enough to check with a pencil. The shop and its data are hypothetical, and the DAX was not run in Power BI for this article. Recompute the figures in your own file before you trust them.
Start by naming the grain of the fact table
The grain is what one row of a table represents. Write it as a sentence before you build anything: "one row per order line", "one row per order", "one row per product per month".
Microsoft's star schema guidance says the dimension key values determine the granularity of a fact table, and that fact tables should always load data at a consistent grain. If some rows are order lines and others are order totals, every sum mixes two levels and no measure can fix it afterwards.
The hypothetical shop exports seven order lines from October 2026. The grain is one row per order line.
| OrderID | OrderDate | ProductKey | Quantity |
|---|
