Skip to content
Power BI

Paginated Reports 101: Sample Files and Setup

Caf2Code Thought Leadership
September 16, 2026 5 min read

Supporting files for the Paginated Reports 101 series. These let you build the exact model used in the posts, so the screenshots match what's on your screen and the numbers match the ones in the text. Everything here is fictional sales data for a made-up s'mores company.

What this is. A companion resource for the Paginated Reports 101 series, not a tutorial in its own right. Build the model here first and every screenshot and figure in Parts 2 through 5 will match what’s on your screen. No real data, nothing to worry about.

Download the files

Sample data for the Paginated Reports 101 series. Right-click and “Save link as” if your browser opens them in a tab.
FileWhat it is
FactSmoreSales.csv12,000 order lines
DimProduct.csv16 products
DimCustomer.csv120 customers across 4 regions
DimDate.csvDaily calendar, Jan 2024 through Jun 2026
gen2.pyThe script that generated the CSVs, if you’re curious

Before you start

  • Power BI Desktop — free download, needed to build the model.
  • Power BI Report Builder — free download, needed from Part 2 onward. Windows only.
  • A Power BI Pro or Premium Per User license if you want to publish to a shared workspace. A free license works too, but only for My Workspace.
You can do all of Parts 2 through 5 in My Workspace on a free license. Nothing in this series requires paid capacity.

Step 1: Build the semantic model

Load the data

Open Power BI Desktop and choose Get Data → Text/CSV. Load all four CSVs.

Rename the tables

This matters more than it looks. The DAX in Part 3 refers to these names directly, so if you rename them differently the code samples won’t run as written.

Imported asRename to
FactSmoreSalesSmore Sales Table
DimProductDim Product
DimCustomerDim Customer
DimDateDim Date

Check the data types

Desktop usually gets these right, but it’s worth a look.

  • Date columns → Date
  • QuantityWhole number
  • UnitPrice, SalesAmount, ListUnitPriceDecimal number
  • IsOrganic, IsWeekendWhole number

Create three relationships

In Model view, drag these into place. All three are many-to-one with a single cross-filter direction, which is the default.

FromTo
Smore Sales Table[ProductKey]Dim Product[ProductKey]
Smore Sales Table[CustomerKey]Dim Customer[CustomerKey]
Smore Sales Table[Date]Dim Date[Date]

Then right-click Dim Date and choose Mark as date table, using the Date column. If the relationships look like a star with the fact table in the middle and the dimensions pointing inward, you’ve got it right.

Add the measures

On Smore Sales Table:

Total Quantity     = SUM ( 'Smore Sales Table'[Quantity] )
Total Sales        = SUM ( 'Smore Sales Table'[SalesAmount] )
Order Lines        = COUNTROWS ( 'Smore Sales Table' )
Average Line Value = DIVIDE ( [Total Sales], [Order Lines] )
Average Unit Price = DIVIDE ( [Total Sales], [Total Quantity] )

Format Total Sales, Average Line Value and Average Unit Price as currency with 2 decimal places. Format Total Quantity and Order Lines as whole numbers with a thousands separator.

Tidy up (optional but recommended)

Hide the key columns from report view: SalesKey, ProductKey and CustomerKey on the fact table, and ProductKey and CustomerKey on the dimensions. Nobody needs to see them in a field list, and hiding them nudges you toward using measures — which is the whole point of Part 3.

Step 2: Check your numbers

Do this before you go any further. Drop three card visuals on a blank page.

Totals across the whole model.
MeasureYou should see
Order Lines12,000
Total Quantity410,120
Total Sales$2,968,210.33

Then add a filter for Dim Customer[RegionName] = "Midwest":

Totals with the Midwest filter applied — the figures used throughout Parts 4 and 5.
MeasureYou should see
Order Lines3,314
Total Sales$822,298.65
If these match, your model is identical to ours and every figure you read in the series will line up. If they don’t, see Troubleshooting below.

Step 3: Publish

Save the file as SmoreSales.pbix, then Publish to your workspace.

Two things appear in the workspace, not one: a report and a semantic model. That split is explained in Part 2, and the semantic model is the thing the paginated reports connect to.

Keep the .pbix. Part 3 uses Power BI Desktop’s Performance Analyzer, so you’ll want the local file open again.

Troubleshooting

My semantic model doesn’t appear in Report Builder’s picker

Almost always permissions. You need at least the Contributor role in the workspace to publish the report, and Build permission on the semantic model to see it in the picker. Being able to view a report is not the same as being allowed to query the model behind it.

Report Builder says “error authenticating”

Usually an expired token rather than anything you did. It often shows up the moment you add a filter, because that’s the first action that makes Report Builder go back to the model for real instead of using cached metadata. Sign out and back in using the account button in the top-right corner. If that doesn’t clear it, close Report Builder completely and reopen. Failing that, clear the cached credentials under %LOCALAPPDATA%\Microsoft\Power BI Report Builder and sign in fresh. If your account uses multi-factor authentication, check that no username or password is stored in the connection string, since Report Builder needs to prompt you interactively.

My numbers don’t match the ones above

Check three things in order. Did all 12,000 rows load, or did the CSV import truncate? Are all three relationships present and pointing dimension-to-fact? And is SalesAmount a decimal number rather than text? A single column typed as text will quietly break the totals.

Report Builder won’t install

Report Builder is a Windows desktop application. Per the Microsoft Download Center listing, the supported operating systems are Windows 10, Windows 11, Windows Server 2016, Windows Server 2019 and Windows Server 2022, and it requires .NET Framework 4.7.2. Microsoft also supports running it on Azure Virtual Desktop and Windows 365, but not as a virtualized published app such as Citrix.

On a Mac or Linux machine you’ll need a Windows VM. You can still follow Part 2’s concepts and do simpler authoring in the browser, but Parts 2 through 5 assume Report Builder.

Dragging a number into the Query Designer returns thousands of rows

That’s not a bug, and it’s exactly what Part 3 is about. Use a measure rather than a raw column.

About the data

Generated, not real. Sales are seasonal, peaking May through September, because s’mores are a summer business and a flat distribution would have made the paginated output boring. SalesAmount equals Quantity × UnitPrice on every row, so any total you calculate independently will reconcile. UnitPrice varies from the product’s list price by a promotional discount, which is why it has more distinct values than you’d expect.

gen2.py reproduces the CSVs byte-for-byte from a fixed seed, so the figures above stay stable.

References

Need help with Power BI or Paginated Reports?

Whether you're building reports from scratch or troubleshooting a tricky parameter setup, our team has been in the weeds on this stuff. Let's talk.