Multi-Store Cash-Up Reconciliation
- Context
- Multi-store retail (client anonymised)
- Status
- Delivered
- Tools
- Power BI, DAX, Power Query, SQL
Executive summary
I built a cash-up reconciliation reporting solution covering more than 120 retail stores. It presents the current month alongside the three preceding months, so finance teams can see reconciliation status, exceptions and trends per store from a single, consistent view.
120+
Retail stores covered
Single cash-up reconciliation reporting solution
4 months
Reporting window
Current month plus the three preceding months
How to read this result. The store count refers to this solution only and is not combined with store counts from other retail engagements.
Business context
Each store in a retail network records its daily cash-up: what the till system expected and what was actually counted and banked. Head-office finance needs those records reconciled store by store, day by day, and needs to know quickly where the numbers do not agree.
Challenge
At more than 120 stores, reconciliation becomes a volume problem. Checking each store manually is slow, and differences are easy to miss when they are spread across hundreds of rows. Finance also needed to see recent history — not only the current month — to separate one-off differences from recurring ones.
My contribution
- Designed the reporting model and reconciliation logic for store-level cash-up data.
- Built the views for reconciliation status, exceptions, totals and trends.
- Defined the rolling reporting window: current month plus the three preceding months.
- Added data-quality indicators so missing or late submissions were visible rather than silently treated as zero.
Investigation and methodology
The work started with the questions finance asked most often: which stores have not reconciled, how large are the differences, are they new or recurring, and is the data complete? Each became a measure or view. Treating missing data as a distinct status — rather than as a zero variance — was an important design decision, because a store that has not submitted is a different problem from a store that is out of balance.
Solution design and implementation
The solution is organised around exceptions. Summary totals sit at the top; below them, stores are classified by reconciliation status, with filters for store, region and period. The four-month window keeps the model focused on what finance needs to act on while still showing short-term trends.
Results and business value
Finance teams gained one consistent view of cash-up reconciliation across a network of 120+ stores, covering the current month and the three preceding months. Exceptions are visible without scanning raw records, and incomplete data is flagged instead of hidden.
Technical details
- Status logic: each store-day classified as reconciled, within tolerance, variance or missing submission.
- Rolling window: date filtering anchored on the current month and the three preceding months, so the report moves forward automatically.
- Data quality: completeness by store and period surfaced as its own indicator alongside financial variance.
- Performance: the four-month window limits the model to the data needed for current reconciliation work.
Lessons, constraints and improvement opportunities
- Designing for exceptions first makes a large network manageable.
- “No data” must never look like “no problem”.
- Next steps could include recurring-variance flags per store and agreed tolerance thresholds owned by finance.
- Financial reconciliation
- Exception reporting
- Data quality
- Power BI modelling
Interactive demonstration
Explore a synthetic version
Built independently with generated data and illustrative business rules, to show the analytical approach without exposing any client system or record.
Illustrative demonstration using synthetic data. Not an original client system. Company, store and people names are fictional (Kestrel Outfitters).
Store cash-up reconciliation
124 fictional stores, current month plus the three preceding months. Differences within ±R50 count as reconciled; a missing submission is its own status, never a zero variance.
- Reconciliation rate
- 93.1%
- 12,349 of 13,268 store-days
- Net variance (banked − expected)
- −R91,231
- on R502.31m expected
- Variance exceptions
- 751
- Data completeness
- 98.7%
- 168 missing submissions · 124 stores
- Variance
- Missing submission
* October is month to date.
Show data table
| Month | Variance | Missing | Store-days |
|---|---|---|---|
| Jul 2026 | 212 | 46 | 3844 |
| Aug 2026 | 219 | 62 | 3844 |
| Sep 2026 | 203 | 39 | 3720 |
| Oct 2026 (to date) | 117 | 21 | 1860 |
Show data table
| Region | Net variance |
|---|---|
| Central | −R21,946 |
| Coastal | −R16,195 |
| Highlands | −R23,286 |
| Northern | −R20,415 |
| Western | −R9,389 |
| Store | Region | Variances | Missing | Net variance | Data quality |
|---|---|---|---|---|---|
| S021 Parkgate 2 | Highlands | 23 | 8 | −R3,012 | 8 missing |
| S106 Brookfield 9 | Central | 23 | 6 | −R2,291 | 6 missing |
| S123 Market Square 11 | Northern | 22 | 6 | −R3,508 | 6 missing |
| S038 Hilltop 4 | Coastal | 19 | 7 | −R2,864 | 7 missing |
| S089 Lakeview 8 | Coastal | 18 | 5 | −R2,247 | 5 missing |
| S072 Willow 6 | Northern | 20 | 2 | −R2,768 | 2 missing |
| S055 Mill Lane 5 | Western | 19 | 1 | R523 | 1 missing |
| S004 Station Road 1 | Western | 18 | 1 | −R1,731 | 1 missing |
| S050 Hilltop 5 | Western | 14 | 4 | −R1,425 | 4 missing |
| S028 Station Road 3 | Western | 12 | 3 | R126 | 3 missing |
| S116 Harbour 10 | Coastal | 10 | 3 | −R1,425 | 3 missing |
| S061 Riverside 6 | Northern | 11 | 1 | −R2,474 | 1 missing |