Business Professionals
Power BI | Power Pivot | Power Query | DAX
Cloud Flows | RPA | AI Builder | Copilot
60+ Formulas | Data Stories | Advanced Reporting & Modeling
VB Programming | Report Automation |
MS-Office Automation
Techno-Business Professionals
Power BI | Power Query | Advanced DAX | SQL - Query &
Programming
Microsoft Fabric | Power BI | Power Query | Advanced DAX |
SQL - Query & Programming
Power BI | Power Apps | Power Automate | Copilot Studio | Power Pages | Dataverse
Microsoft Power Apps | Microsoft Power Automate
Power BI | Adv. DAX | SQL (Query & Programming) |
VBA | Python | Web Scrapping | API Integration
Power BI | Power Apps | Power Automate |
SQL (Query & Programming)
Power BI | Adv. DAX | Power Apps | Power Automate |
SQL (Query & Programming) | VBA | Python | Web Scrapping | API Integration
Power Apps | Power Automate | SQL | VBA | Python |
Web Scraping | RPA | API Integration
Technology Professionals
Power BI | DAX | SQL | ETL with SSIS | SSAS | VBA | Python
Power BI | SQL | Azure Data Lake | Synapse Analytics |
Data Factory | Databricks | Power Apps | Power Automate |
Azure Analysis Services
Microsoft Fabric | Power BI | SQL | Lakehouse |
Data Factory (Pipelines) | Dataflows Gen2 | KQL | Delta Tables | Power Apps | Power Automate
Power BI | Power Apps | Power Automate | SQL | VBA | Python | API Integration
Power BI | Advanced DAX | Databricks | SQL | Lakehouse Architecture
Business Professionals
Power BI | Power Pivot | Power Query | DAX
Cloud Flows | RPA | AI Builder | Copilot
60+ Formulas | Data Stories | Advanced Reporting & Modeling
VB Programming | Report Automation |
MS-Office Automation
Techno-Business Professionals
Power BI | Power Query | Advanced DAX | SQL - Query &
Programming
Microsoft Fabric | Power BI | Power Query | Advanced DAX |
SQL - Query & Programming
Power BI | Power Apps | Power Automate | Copilot Studio | Power Pages | Dataverse
Microsoft Power Apps | Microsoft Power Automate
Power BI | Adv. DAX | SQL (Query & Programming) |
VBA | Web Scrapping | API Integration
Power BI | Power Apps | Power Automate |
SQL (Query & Programming)
Power BI | Adv. DAX | Power Apps | Power Automate |
SQL (Query & Programming) | VBA | Web Scrapping | API Integration
Power Apps | Power Automate | SQL | VBA |
Web Scraping | RPA | API Integration
Technology Professionals
Power BI | DAX | SQL | ETL with SSIS | SSAS | VBA
Power BI | SQL | Azure Data Lake | Synapse Analytics |
Data Factory | Azure Analysis Services
Microsoft Fabric | Power BI | SQL | Lakehouse |
Data Factory (Pipelines) | Dataflows Gen2 | KQL | Delta Tables
Power BI | Power Apps | Power Automate | SQL | VBA | API Integration
Power BI | Advanced DAX | Databricks | SQL | Lakehouse Architecture
LEARN THIS HANDS ON
Microsoft Fabric & Power BI
Medallion architecture in a Microsoft Fabric Lakehouse is only useful if it’s concrete: clear zones, predictable folder patterns, and repeatable table naming. This article walks through a pragmatic Bronze–Silver–Gold setup, with specific folder structures, table patterns, and pipeline examples you can lift into your own workspace.
If you want to go deeper into end‑to‑end data engineering patterns on Fabric, including orchestration and performance tuning, a structured path like this Fabric-focused data engineering training helps you connect the theory with real project constraints.
Fabric gives you OneLake, shortcuts, and lakehouses, but none of that replaces a clear convention. Medallion architecture solves three recurring problems:
In Fabric, the medallion pattern is mostly about how you structure your lakehouse (folders, table names) and how you move data between layers (Dataflows Gen2, Data Factory pipelines, or Notebook jobs).
You can implement medallion layers in several ways:
For most teams, option 3 is a solid starting point.
Inside a single Fabric Lakehouse, use this folder structure:
/lakehouse
/Files
/bronze
/raw
/<source_system>
/<entity>
/yyyy
/MM
/dd
/silver
/staging
/<domain>
/<entity>
/gold
/mart
/<subject_area>
/dim
/fact
/Tables
/bronze
/<source_system>_<entity>
/silver
/<domain>_<entity>
/gold
/dim_<subject_area>_<entity>
/fact_<subject_area>_<entity>
Key ideas:
Bronze is about getting data in, with minimal transformation.
/Files/bronze/raw/<source_system>/<entity>/yyyy/MM/dd/ for incremental loads./Tables/bronze/<source_system>_<entity> as a Delta table.Example for an ERP system erp and entity sales_order:
/Files/bronze/raw/erp/sales_order/2024/09/23/part-0001.parquet
/Tables/bronze/erp_sales_order
Keep it minimal:
Example PySpark notebook for Bronze ingestion:
from pyspark.sql import functions as F
source_path = "/lakehouse/Files/bronze/raw/erp/sales_order/2024/09/23"
bronze_table = "bronze.erp_sales_order"
raw_df = (
spark.read
.format("parquet")
.load(source_path)
)
enriched_df = (
raw_df
.withColumn("_ingestion_date", F.current_timestamp())
.withColumn("_source_path", F.input_file_name())
)
(enriched_df
.write
.format("delta")
.mode("append")
.saveAsTable(bronze_table)
)
Silver is where you make the data usable for multiple downstream consumers.
Organize by domain (e.g., sales, finance, hr):
/Files/silver/staging/<domain>/<entity>/./Tables/silver/<domain>_<entity>.Example:
/Files/silver/staging/sales/sales_order/
/Tables/silver/sales_sales_order
Silver usually handles:
snake_case or PascalCase).Example SQL to build a Silver table from Bronze:
CREATE OR REPLACE TABLE silver.sales_sales_order AS
SELECT
CAST(order_id AS BIGINT) AS order_id,
CAST(customer_id AS BIGINT) AS customer_id,
CAST(order_date AS DATE) AS order_date,
CAST(order_status AS STRING) AS order_status,
CAST(total_amount AS DECIMAL(18,2)) AS total_amount,
_ingestion_date,
_source_path
FROM bronze.erp_sales_order;
For incremental updates, switch to INSERT INTO + watermark filters or use MERGE based on a business key.
Gold is optimized for analytics and Power BI: facts and dimensions.
Organize by subject area (e.g., sales, inventory, finance_reporting):
/Files/gold/mart/<subject_area>/dim/./Files/gold/mart/<subject_area>/fact/./Tables/gold/dim_<subject_area>_<entity>./Tables/gold/fact_<subject_area>_<entity>.Example for sales reporting:
/Tables/gold/dim_sales_customer
/Tables/gold/dim_sales_date
/Tables/gold/fact_sales_order
Dimensions should be:
customer_key, product_key).valid_from, valid_to, is_current.Example SQL for a simple Type 1 dimension:
CREATE OR REPLACE TABLE gold.dim_sales_customer AS
SELECT DISTINCT
CAST(customer_id AS BIGINT) AS customer_key,
customer_name,
customer_segment,
country,
city,
postal_code
FROM silver.sales_customer;
Facts should:
Example SQL for a fact table:
CREATE OR REPLACE TABLE gold.fact_sales_order AS
SELECT
so.order_id,
so.order_line_id,
dc.customer_key,
dd.date_key AS order_date_key,
so.product_id,
so.quantity,
so.unit_price,
so.discount_amount,
so.total_amount
FROM silver.sales_sales_order_line AS so
LEFT JOIN gold.dim_sales_customer AS dc
ON so.customer_id = dc.customer_key
LEFT JOIN gold.dim_sales_date AS dd
ON so.order_date = dd.date;
_ingestion_date, _source_path).You can implement the flows in several ways. A common pattern:
/Files/bronze/raw/....Tables/bronze/....Tables/silver/....Tables/gold/....In a Fabric Notebook, you can chain the layers:
# 1. Bronze load already completed by another pipeline
# 2. Build Silver from Bronze
spark.sql("""
CREATE OR REPLACE TABLE silver.sales_sales_order AS
SELECT
CAST(order_id AS BIGINT) AS order_id,
CAST(customer_id AS BIGINT) AS customer_id,
CAST(order_date AS DATE) AS order_date,
total_amount
FROM bronze.erp_sales_order
""")
# 3. Build Gold from Silver
spark.sql("""
CREATE OR REPLACE TABLE gold.fact_sales_order AS
SELECT
order_id,
customer_id,
order_date,
total_amount
FROM silver.sales_sales_order
""")
Then schedule the notebook inside a Data Factory pipeline with:
Agree on conventions early. A simple, workable set:
bronze, silver, gold.<source>_<entity> → erp_sales_order.<domain>_<entity> → sales_sales_order.dim_<subject>_<entity> → dim_sales_customer.fact_<subject>_<entity> → fact_sales_order.*_id for natural keys, *_key for surrogate keys.*_date as DATE, *_datetime as TIMESTAMP.Stick to one pattern and document it in your repo or Confluence. The value is not in the specific pattern, but in its consistency.
Because Lakehouse tables are Delta, the SQL Endpoint and Power BI connect cleanly to Gold.
Recommended pattern:
gold.* tables only.Example DAX measure on top of gold.fact_sales_order:
Total Sales :=
SUM ( 'fact_sales_order'[total_amount] )
Because the medallion layers keep schemas stable, you can refactor Bronze and Silver without constantly breaking your Power BI model.
Before you build your next Fabric pipeline, create a single example subject area (e.g., Sales) and implement Bronze, Silver, and Gold exactly with the folder and table patterns above. Once that path works end-to-end, copy the pattern to new domains instead of inventing a new structure for every project.
Microsoft Fabric
New
Next Batches Now Live
Power BI
SQL
Power Apps
Power Automate
Microsoft Fabrics
Azure Data Engineering