A readout to a client's leadership team
Case study

A Core gave every client its own secure dashboard on one Azure data lake

A Core wanted to report to each client from shared data, without any client ever seeing another client's records.

A Core · Client onboarding and service

3xmore data sources feeding client dashboards

The workflow before#

A Core works in construction and concrete, and its clients want to see how their own projects are tracking. The analytics behind that reporting ran on a single data source. Bringing in more data meant reworking the pipeline each time, and there was no way to give one client a view of its records without exposing everyone else's. So client reporting stayed narrow, and anything more ambitious waited. The team knew a quick patch would only push the problem down the road. They wanted to build the foundation once, with security designed in from the start, so they wouldn't spend the next two years paying down shortcuts.

What we built#

We built one Azure data lake that holds every client's data and keeps it apart. Each record carries a tag for the client it belongs to, and access follows that tag all the way from storage to the dashboard. A Core's clients log in and see their own numbers. Nobody sees anyone else's, and nobody had to build a separate system per client to make that true.

Client separation built into the pipeline

The pipeline tags every record with its client as it lands, and Entra ID groups decide who can read which records. We put the boundary in the data layer, not in each report, because a rule enforced once at the source can't be forgotten when someone builds a new dashboard.

Per-client dashboards in Power BI

A Power BI engineer built dashboards on top of the secure layer, so each client opens a view scoped to its own projects. A Core's team maintains one set of reports instead of a copy per client. When a report improves, every client gets the improvement.

Room for new sources

We brought two more data sources into the analytics, taking A Core from one source to three. The lake follows the five pillars of the Azure Well-Architected Framework: operational excellence, security, reliability, performance and cost. That's why the next source plugs in without a rebuild.

How we delivered it

We designed the architecture and the security pattern first, then built the pipeline and brought the new sources in, with a Power BI engineer working alongside our data engineers on the dashboards. Security was tested before any client saw a report, so the first rollout went to clients with the boundaries already proven.

Before and after#

MeasureBeforeAfter
Data sources in analytics13
Client data accessNo per-client separationEach client sees only its own data
Adding a new sourceRework of the pipelineAdded without refactoring
Report maintenanceNarrow, single-source reportingOne set of dashboards scoped per client

What's next#

With client data separated and governed, A Core can put an assistant in front of it. Each client could ask questions in plain language and get answers drawn only from its own records, using the same access rules that already protect the dashboards. The boundary is already built, so the assistant inherits it.

ShareLinkedInEmail

Sources land in Azure Data Lake and run through a pipeline that tags every record with its client identifier at ingestion. Entra ID groups map to client scopes, and Power BI row-level security applies the same scopes in the semantic model, so the boundary is defined once and enforced in both storage and reporting.

The environment is designed against the Azure Well-Architected Framework across operational excellence, security, reliability, performance efficiency and cost optimization. New sources follow the same ingestion and tagging pattern, so they can be added, and the environment scaled or moved, without refactoring the existing pipeline.

Next step

Let's build the case study we tell next.