Streamlining your tech stack for maximum efficiency

Learn, explore, and grow with our knowledge hub.

Build a Microsoft Fabric Medallion Architecture | Smart Statistics
Microsoft Fabric Practical Tutorial

Build a Bronze–Silver–Gold Data Pipeline in Microsoft Fabric

Many reporting problems begin long before Power BI opens. Data arrives from CSV files, Excel workbooks, operational databases and exported reports with inconsistent structures, duplicate records and different levels of quality.

A medallion architecture gives that data a controlled journey. Raw data lands in Bronze, validated and standardised data moves into Silver, and trusted reporting data is published into Gold.

The result is a reporting architecture where Power BI does not need to repeatedly clean the same raw data inside every individual report.

Preserve raw data Keep an untouched source history.
Improve quality Standardise and validate once.
Reuse logic Share trusted data across reports.
Scale reporting Separate engineering from presentation.
Clean once. Reuse everywhere. Put transformation and validation upstream so individual reports do not repeatedly solve the same data problems.
Why Use Three Layers?

Each Layer Has a Different Job

The medallion pattern prevents raw ingestion, data cleansing and reporting logic from becoming one large process that is difficult to test and support.

Bronze — Raw

Bronze is the landing zone. Preserve the source representation so you retain a recoverable history of what arrived.

  • CSV and JSON files
  • Database extracts
  • API payloads
  • Source snapshots

Silver — Enriched

Silver is where inconsistent raw data becomes reliable enough to reuse across analytical workloads.

  • Correct data types
  • Standardised codes
  • Duplicate removal
  • Quality validation

Gold — Curated

Gold is built around analytical consumption rather than source-system structure.

  • Fact tables
  • Dimensions
  • Business summaries
  • KPI-ready datasets
Example Business Scenario

From Three Source Files to One Trusted Sales Model

Imagine a UK wholesaler receiving three daily extracts from different operational systems.

Source Typical Problem Gold-Layer Outcome
Sales.csv Dates arrive as text, customer codes contain spaces and duplicate transaction rows can appear. Clean fact table with one validated transaction grain and calculated sales value.
Customers.csv Missing regions, inconsistent customer names and duplicated customer references. Curated Customer dimension with standardised regional attributes.
Products.csv Category names vary and obsolete products remain mixed with active items. Product dimension with controlled categories and reporting attributes.
End-to-End Flow

Keep the Processing Sequence Explicit

1. Source

CSV, Excel, SQL, APIs or other operational sources.

2. Bronze

Land the data without business transformation.

3. Silver

Standardise, validate and enrich the data.

4. Gold

Publish curated business-ready tables.

5. Power BI

Build semantic models and reports from trusted data.

Step-by-Step Tutorial

Build the Medallion Architecture in Seven Steps

01

Define the reporting outcome first

Before creating Lakehouses or pipelines, define what the Gold layer must eventually support.

In this example, management needs:

  • Total Revenue
  • Gross Profit
  • Revenue by Customer
  • Revenue by Product Category
  • Revenue by Region
  • Monthly trend

That tells us the Gold layer requires at least:

  • FactSales
  • DimCustomer
  • DimProduct
  • DimDate
Work backwards from the analytical outcome. Do not create layers simply because the architecture diagram says you should.
02

Create the three Fabric data layers

Create separate governed areas for the three processing stages.

A simple naming pattern is:

lh_sales_bronze
lh_sales_silver
lh_sales_gold

The exact design can vary. Some organisations separate layers into different Lakehouses, while others structure them according to broader domain and governance requirements.

Avoid putting raw files and curated reporting tables into one unstructured location. The point of the medallion pattern is to make the data state obvious.
03

Land source data into Bronze

Create a Fabric Pipeline and add Copy Data activities for each source.

For the example business:

  • Copy Sales.csv into Bronze
  • Copy Customers.csv into Bronze
  • Copy Products.csv into Bronze

Keep the Bronze copy close to the original representation.

A useful folder pattern is:

Files/
    sales/
        2026/
            08/
                29/
                    Sales.csv

    customers/
        2026/
            08/
                29/
                    Customers.csv

    products/
        2026/
            08/
                29/
                    Products.csv

A dated landing structure provides a clear record of what arrived on each processing date.

04

Clean the data into Silver with Dataflow Gen2

Create a Dataflow Gen2 that reads the Bronze data and applies reusable transformation rules.

For Sales:

  • Set the correct data types
  • Trim customer and product codes
  • Remove invalid blank transaction IDs
  • Remove duplicate transactions
  • Reject or flag invalid quantities

Example Power Query M:

let
    Source = BronzeSales,

    ChangedTypes =
        Table.TransformColumnTypes(
            Source,
            {
                {"TransactionID", type text},
                {"SaleDate", type date},
                {"CustomerID", type text},
                {"ProductID", type text},
                {"Quantity", Int64.Type},
                {"UnitPrice", Currency.Type}
            }
        ),

    CleanCodes =
        Table.TransformColumns(
            ChangedTypes,
            {
                {
                    "CustomerID",
                    each Text.Upper(Text.Trim(_)),
                    type text
                },
                {
                    "ProductID",
                    each Text.Upper(Text.Trim(_)),
                    type text
                }
            }
        ),

    ValidRows =
        Table.SelectRows(
            CleanCodes,
            each
                [TransactionID] <> null
                and [Quantity] > 0
        ),

    Deduplicated =
        Table.Distinct(
            ValidRows,
            {"TransactionID"}
        )

in
    Deduplicated

Send the result to a Silver Lakehouse table such as:

SilverSales
Silver should be reusable. Avoid embedding visual-specific or dashboard-specific logic at this stage.
05

Build business-ready Gold tables

Gold should organise the data around how the business analyses it.

For the sales fact table, add a reusable sales value:

let
    Source = SilverSales,

    AddedSalesValue =
        Table.AddColumn(
            Source,
            "SalesValue",
            each [Quantity] * [UnitPrice],
            Currency.Type
        )

in
    AddedSalesValue

Publish the result as:

FactSales

Build separate curated dimensions:

DimCustomer
DimProduct
DimDate

Gold is also the appropriate place for curated summary tables where there is a genuine analytical requirement.

Do not turn Gold into a collection of dozens of dashboard-specific exports. Keep it aligned to reusable business entities and analytical grains.
06

Orchestrate Bronze → Silver → Gold

Return to the Fabric Pipeline and create an explicit dependency chain.

Conceptually:

Copy Source Data
        ↓
Bronze Load Complete
        ↓
Run Silver Dataflow
        ↓
Silver Validation Complete
        ↓
Run Gold Dataflow
        ↓
Gold Tables Ready
        ↓
Reporting Process

Configure downstream activities to run only after the previous critical activity succeeds.

This prevents Gold from being rebuilt from incomplete Silver data.

07

Build Power BI from Gold — not Bronze

Your Power BI reporting layer should normally consume the curated structures designed for analytics rather than directly connecting every report to raw operational extracts.

Build relationships around:

  • FactSales
  • DimCustomer
  • DimProduct
  • DimDate

Then create measures such as:

Total Revenue =
SUM(
    FactSales[SalesValue]
)

Total Quantity =
SUM(
    FactSales[Quantity]
)

Average Selling Price =
DIVIDE(
    [Total Revenue],
    [Total Quantity]
)

The important difference is architectural: Power BI is now responsible primarily for semantic modelling and analysis rather than repeatedly cleaning source files.

Operational Controls

A Medallion Architecture Needs Ownership as Well as Technology

Three layers do not automatically create trustworthy data. The processing rules and ownership around them still matter.

Named Owners

Assign responsibility for source systems, transformation rules and Gold business definitions.

Data Quality Rules

Define what causes a record to be accepted, corrected, quarantined or rejected.

Pipeline Monitoring

Monitor failed or unusually long pipeline runs rather than assuming scheduled processing succeeded.

Document the Gold Layer

Record grain, business meaning, refresh timing and ownership for important curated tables.

Frequently Asked Questions

Microsoft Fabric Medallion FAQs

What is Bronze, Silver and Gold in Microsoft Fabric?
Bronze stores raw source data, Silver contains cleaned and enriched data, and Gold contains curated structures designed for analytics and business reporting.
Do I need three separate Lakehouses?
Separating the layers creates clear boundaries between raw, enriched and curated data. The exact physical design should reflect scale, security, domains and governance requirements.
Can Dataflow Gen2 write to a Lakehouse?
Yes. Dataflow Gen2 supports Lakehouse destinations and is useful for reusable low-code transformations.
Can a Fabric Pipeline run Dataflow Gen2?
Yes. A Dataflow Gen2 activity can be included in a Fabric Pipeline so ingestion and transformation steps execute in a controlled sequence.
Should Power BI connect directly to Bronze?
For governed reporting, Power BI will normally be better served by curated Gold-layer structures. Bronze remains valuable for raw history, engineering, diagnostics and reprocessing.
Is medallion architecture only for very large companies?
No. The principles can be useful for smaller organisations too. The implementation should remain proportionate to the amount of data, complexity and governance required.
Can I use SQL or notebooks instead of Dataflow Gen2?
Yes. Fabric supports multiple transformation approaches. Dataflow Gen2 is particularly useful when Power Query skills and low-code transformation are a good fit, while SQL or notebooks may be preferable for other workloads.
How can Smart Statistics help?
Smart Statistics can design Microsoft Fabric architectures, implement Lakehouse and Pipeline solutions, create Power BI semantic models and build governed reporting platforms for UK businesses.

Is Your Power BI Team Still Cleaning the Same Raw Data in Every Report?

Smart Statistics helps UK businesses move data preparation upstream into structured Microsoft Fabric architectures so reporting teams can work from trusted, reusable data.

We can help with Fabric Lakehouse design, Pipelines, Dataflow Gen2, Power BI semantic models, data quality and wider analytics architecture.