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
You’ll learn how to design a practical Lakehouse in Microsoft Fabric that works for both Excel and Power BI: a folder structure that doesn’t collapse under real users, medallion layers that stay maintainable, and governance that keeps auditors and analysts equally happy. We’ll stay concrete, with naming patterns, examples, and simple patterns you can roll out in your own workspace.
If you want to go beyond patterns into hands-on builds, pairing this article with focused Fabric data engineering skills can help you turn these designs into robust production setups.
Before you create a single folder, decide what the Lakehouse must serve. For Excel and Power BI users, the usual patterns are:
Translate this into three high-level design goals:
The medallion architecture (Bronze–Silver–Gold) is a convenient way to enforce this separation.
In a Fabric Lakehouse, medallion layers map naturally to folders and tables:
Bronze (Raw)
Silver (Cleaned / Conformed)
Gold (Analytics / Semantic)
At the Lakehouse level, create three top-level folders:
bronze/silver/gold/Under each, mirror your domain structure (e.g., sales, finance, hr). This gives you a consistent pattern:
lakehouse
├─ bronze
│ ├─ sales
│ │ ├─ orders
│ │ ├─ order_lines
│ │ └─ customers_raw
│ └─ finance
│ └─ gl_entries
├─ silver
│ ├─ sales
│ │ ├─ orders_clean
│ │ ├─ order_lines_clean
│ │ └─ customers_master
│ └─ finance
│ └─ gl_entries_clean
└─ gold
├─ sales
│ ├─ fact_sales
│ └─ dim_customer
└─ finance
├─ fact_gl
└─ dim_cost_center
Within Fabric, these folders map to Delta tables. You can create them via Dataflows Gen2, Notebooks, or pipelines.
Use these guidelines:
sales, marketing, finance) rather than by project.fact_sales, dim_customer.v1, v2 folders; track version in table metadata or Git instead.A simple, consistent naming pattern avoids confusion when Excel users browse the Lakehouse.
For tables:
src_<system>_<entity>
src_erp_sales_order<domain>_<entity>_clean or <domain>_<entity>_master
sales_orders_clean, customer_masterfact_<subject> and dim_<subject>
fact_sales, dim_dateFor columns:
<entity>_id (e.g., customer_id)sk_<entity> (e.g., sk_customer)_date or _datetime consistently.This matters for Excel users, because these names show up directly in Power Query and PivotTables.
Assume you’re pulling orders from an ERP system into Bronze.
A simple Power Query step to land data into bronze/sales/orders might look like:
let
Source = Sql.Database("sql-prod", "ERP"),
Orders = Source{[Schema="dbo",Item="SalesOrders"]}[Data],
// Basic type cleanup only
ChangedTypes = Table.TransformColumnTypes(
Orders,
{
{"OrderID", Int64.Type},
{"OrderDate", type datetime},
{"CustomerID", Int64.Type},
{"NetAmount", type number}
}
)
in
ChangedTypes
Configure the Dataflow to output to the Lakehouse table bronze.sales.orders.
From Bronze to Silver, you might standardize customer IDs and remove duplicates.
# Fabric Notebook (PySpark)
from pyspark.sql import functions as F
bronze_orders = spark.read.table("lakehouse.bronze.sales.orders")
silver_orders = (
bronze_orders
.dropDuplicates(["OrderID"])
.withColumn("order_date", F.to_date("OrderDate"))
.withColumn("load_timestamp", F.current_timestamp())
)
silver_orders.write.mode("overwrite").saveAsTable("lakehouse.silver.sales.orders_clean")
Now create a fact_sales table and a dim_date table in Gold.
-- dim_date from silver orders
CREATE OR REPLACE TABLE lakehouse.gold.shared.dim_date AS
SELECT DISTINCT
order_date AS date,
YEAR(order_date) AS year,
MONTH(order_date) AS month,
FORMAT(order_date, 'yyyy-MM') AS year_month
FROM lakehouse.silver.sales.orders_clean
WHERE order_date IS NOT NULL;
-- fact_sales
CREATE OR REPLACE TABLE lakehouse.gold.sales.fact_sales AS
SELECT
o.OrderID AS sales_id,
o.order_date,
o.CustomerID AS customer_id,
o.NetAmount AS net_amount
FROM lakehouse.silver.sales.orders_clean o;
This Gold layer is what Excel and Power BI should connect to.
In Power BI Desktop:
gold tables you want (e.g., fact_sales, dim_customer, dim_date).fact_sales[customer_id] → dim_customer[customer_id]fact_sales[order_date] → dim_date[date]Add a basic measure:
Total Sales := SUM ( 'fact_sales'[net_amount] )
Certify this dataset so Excel users can safely reuse it.
Excel users have two main options:
Power BI dataset connection (recommended)
Direct Lakehouse connection via Power Query
gold.sales.fact_sales and relevant dimensions.Encourage users to prefer the dataset route for governed, consistent measures and calculations.
Define clear roles per layer:
Document ownership per table, e.g., in a simple metadata table in the Lakehouse:
CREATE OR REPLACE TABLE governance.table_owners (
table_name STRING,
layer STRING,
owner_upn STRING,
domain STRING
);
Use these patterns to keep things manageable:
fact_sales to specific regions.[Region Filter] :=
VAR UserRegion = LOOKUPVALUE(
'user_region'[region],
'user_region'[user_principal_name],
USERPRINCIPALNAME()
)
RETURN
'dim_customer'[region] = UserRegion
To avoid breaking Excel and Power BI reports:
Many organizations need to reconcile strict governance with flexible analysis. A few practical patterns:
governance.data_dictionary table.ALTER TABLE lakehouse.silver.sales.orders_clean
ADD COLUMN load_timestamp datetime;
-- During writes, always populate load_timestamp
This makes it easy to answer “what data did this report use on a given day?” without digging through pipelines.
Create a single Lakehouse with one simple domain (e.g., Sales), implement Bronze–Silver–Gold with the folder and naming conventions above, and connect one Power BI report and one Excel workbook to the Gold layer. Once that small slice works end-to-end, reuse the same pattern for every new domain instead of inventing a new structure each time.
Microsoft Fabric
New
Next Batches Now Live
Power BI
SQL
Power Apps
Power Automate
Microsoft Fabrics
Azure Data Engineering