PharmaData quality gate and analytics platform
Data quality portal and analytics platform
A pharma distributor sells across Europe, and each country delivers sales, purchase and stock data to one central warehouse. Missing days, repeated files and invalid values used to reach management dashboards as if they were fact. A data quality portal now checks every delivery where it lands, turns a failed check into a ticket owned by the country that sent it, and the dashboards read only data that passed.

The problem
Each country delivers sales, purchase and stock data on its own schedule, in its own shape. When a country skipped a day the totals drifted without warning. When a file was late or repeated, reports refreshed on incomplete or duplicated records. Invalid values reached the reader as if they were fact.
In a regulated business a reporting error is exposure, and its cost scales with how far it travels before someone catches it. Management needed to know what to trust before acting on a number.
Scrolls sideways.
The solution
A dashboard cannot tell you what it did not receive. So the check has to happen where the data lands, before anything downstream refreshes. Every delivery goes into one landing zone, Azure Data Lake Storage and a SQL database, and the data quality portal runs four checks on it there: temporal, duplicates, validity and holiday.
A failed check raises an alert with a severity, and the alert becomes a ticket owned by the country that sent the data. Everything after the landing zone runs in Microsoft Fabric: data engineering pipelines, one semantic model with one definition per metric, and Power BI for management.
Scrolls sideways.
How it works
Landing zone
Azure Data Lake Storage and a SQL database. Every country delivery lands here first, unchanged, so there is always a record of exactly what arrived and when.
Temporal check
Did every expected day arrive? A skipped delivery is the most common failure and the hardest to see in a total, because the total still looks like a number.
Duplicate check
Was a delivery repeated? A resent file doubles a day. The check catches it before the pipeline does the arithmetic.
Validity check
Are the values within range and of the right type? Out-of-range figures are held rather than loaded.
Holiday check
Is a gap a real gap, or a public holiday in that country? Without this the portal would raise a false alert every bank holiday in 26 markets.
Alerts and tickets
A failed check produces an alert with a severity, and the alert becomes a ticket owned by the country that sent the data. The fix happens at the source, so the same error stops recurring.
Quality score and ranking
A score per country and per domain (sales, purchase, stock), freshness against the SLA, a six-month trend, and a leaderboard of which countries deliver the cleanest data.
Fabric and Power BI
Data engineering pipelines, one semantic model with one definition per metric, and a nine-page report: executive overview, partners, deliveries, inventory, Europe map. Slicers filter every visual.
Stack
Landing zone
Platform
Reporting
Data quality
Product screens
Real screens from both products. Client anonymised, figures blurred at source.
Results
Before
Found downstreamErrors surfaced in management reports and regulatory submissions, and each one meant a manual trace back through the pipeline to find where it entered.
After
~60% fewer incidentsCaught at the landing zone, ticketed to the owning market with the reason attached, and fixed at source. Management reads only data that passed the gate.
What the team can answer now
The team can now answer questions it could not before. Which countries have missing data. Which alerts are critical and still open. Which countries deliver the best data quality. Which partners drive revenue and margin. Whether deliveries are on time by country and partner. Which batches are close to expiry.
What this demonstrates
- 01Data quality as a gate at the landing zone, not a report after the fact
- 02A validation model (temporal, duplicate, validity, holiday) that holds across 26 sources with different schedules and shapes
- 03Ownership pushed back to the source: a failed check is a ticket for the country that sent the data
- 04One semantic model with one definition per metric, serving a nine-page Power BI platform on Microsoft Fabric
- 05A rollout market by market, so each country's data owners were onboarded rather than surprised
Next caseFormulation and offer assistant