RetailMax Spain had sales, stock, and customer data scattered across five different systems, with no single unified view. Here's what we built on Microsoft Fabric β and what it actually cost, no gloss.
RetailMax is a retail chain with 87 physical stores in Spain and an active online channel. As with most operations of this size, each department had solved its own problem in isolation β and no one had the full picture.
Bar length is proportional to data volume. In-store POS accounts for 83% of the total β the first data point that changes any capacity plan.
What they needed wasn't another report. It was the ability to answer, in real time, three questions that used to take days to resolve: How are sales performing by store and by channel? Where is stock running out before it's too late? Which customers are drifting away, and why?
The same path we follow with any client this size: first know what it will really cost and how much capacity is needed, then build it on real data, and finally leave it running with a monitoring plan in place β not just a good-looking dashboard on delivery day.
Before writing a single line of pipeline code, we sized Fabric capacity against RetailMax's actual data volume β not a generic pricing sheet. The result is delivered to the client in writing, with the real monthly cost, before any decision is made.
SKU F8 Β· 8 CU Β· β¬1,256/month Β· 797 GB estimatedA medallion architecture (Bronze β Silver β Gold) on Fabric, with quality validation at every layer, feeding a Direct Lake semantic model β Power BI reads production data without waiting on a refresh. On top of that, four dashboards and AI-assisted visuals that surface patterns without anyone having to go looking for them.
6 nightly loads Β· 00:30β06:00 Β· validation at every stepFabric's native monitoring app tracks consumption, storage, and saturation in near real time. We're upfront with the client about what it doesn't do out of the box β it doesn't generate automatic alerts on its own β and we set up a review cadence with a named owner.
Daily Β· weekly Β· monthly reviewFour dashboards in production, each answering one of the questions that used to take days to resolve. Real screenshots from the live platform β click to enlarge.
In compliance with our information security policies and the confidentiality commitments made to the client, the company name, along with the data and databases shown in this case study, have been modified and anonymized. The nature and magnitude of the results faithfully reflect the work performed.
Sales by store, region, and category, with year-over-year comparison that doesn't depend on a date filter.
Real screenshot Β· click to enlargeStockouts visible by store and category, with the decomposition tree showing where the risk is concentrated.
Real screenshot Β· click to enlargeChannel comparison built on average ticket by category β the metric that actually proved reliable, after ruling out a margin metric that wasn't.
Real screenshot Β· click to enlarge2,840 customers segmented, with AI flagging which profiles are churning β the Referral channel and the 30β44 age group carry the highest risk.
Real screenshot Β· click to enlargeThe difference between a report and a business view: the latter flags the problem before you ask.
The Referral channel has a 13.5% inactivity rate β the channel that acquires the most customers also loses the most.
Customers aged 30β44 account for 12.7% of churn risk, the most exposed age segment.
The share of VIP customers ranges from 5.8% in Madrid to 13.4% in the Valencian Community and the Balearic Islands β same chain, very different behavior by region.
Beyond the dashboard, each department received an insights report ready to share with leadership β no one had to interpret a chart first.
Performance by store, region, and category, with the year-over-year comparison explained in figures.
Stockouts by store and SKU, prioritized by category and impact on lost sales.
Online vs. physical store, with average ticket as the reliable comparison metric.
2,840 customers segmented, with churn risk factors explained by AI.
None of the figures in this section are a contractual promise. They are estimated ranges, based on typical optimization patterns for medallion architectures on Fabric, applied to RetailMax's actual data profile.
| Lever | Why it applies | Estimated |
|---|---|---|
| Incremental load for POS | POS accounts for 83% of the volume and is currently reprocessed in full every night. | 15β30% nightly CU |
| Automated reframe | Replaces the manual trigger after each load with an automatic one. | Improves freshness |
| Spark autoscale | Avoids over-provisioning capacity on lower-volume nights. | 5β15% compute |
| Partition pruning | Reduces the volume scanned per query as historical data grows. | 10β20% notebook runtime |
The actual savings depend on the implementation and on usage patterns once in production β and scaling capacity (F8 β F16) only makes sense when consumption data calls for it, never ahead of demand.
If your sales, stock, or customer data is scattered across more systems than you can count from memory, you probably recognize the starting point. Let's talk about what your case would need β starting, as we did with RetailMax, by finding out what it really costs before building anything.
Email us β