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’ve provisioned a Fabric capacity, landed data in OneLake, and now the team is stuck: do you build a Lakehouse, a Warehouse, or both? Half the docs say “open data lake”, the other half say “SQL-first analytics”, and your project plan is burning days on architecture debates.
This article cuts that decision down to one practical question: does your team primarily speak SQL or Python? We’ll walk through a realistic scenario and use that language choice to drive a simple, durable pattern for when to use a Lakehouse, when to use a Warehouse, and when you genuinely need both.
You’re running a BI and data science team on a shared Fabric capacity.
You’ve just landed several raw source feeds as Delta tables in OneLake via Dataflows Gen2. Now you need a governed, performant layer for:
The team is arguing:
The right answer is not “pick the coolest technology”. It’s pick the store that matches the language and execution model of the people who will actually use it.
Forget feature comparison tables for a moment. In Fabric today, the most stable differentiator is how you interact with the data.
For this workload, is the primary way people query and transform data SQL or Python/Spark?
Then follow this flow:
This sounds simple, but it lines up well with how Fabric actually behaves today.
A Fabric Lakehouse is a managed experience over Delta tables in OneLake, plus an integrated SQL endpoint.
Key properties that matter for design:
Storage format
Primary execution model
SQL endpoint
File access
Use Lakehouse as the main store when:
In our scenario, the data science team wants to:
That’s a Lakehouse-first workflow. Warehouses can consume the curated outputs, but the work happens in Spark.
Assume you have a Lakehouse called SalesLakehouse with a table sales_raw. In a Fabric notebook attached to that Lakehouse:
from pyspark.sql import functions as F
# Read from the Lakehouse table
sales_raw_df = spark.read.table("sales_raw")
# Basic cleansing and derived columns
sales_clean_df = (
sales_raw_df
.filter(F.col("order_date").isNotNull())
.withColumn("order_year", F.year(F.col("order_date")))
.withColumn("order_month", F.month(F.col("order_date")))
)
# Write to a curated table in the same Lakehouse
sales_clean_df.write.mode("overwrite").saveAsTable("sales_clean")
This is the natural workflow for Spark-heavy teams: tables are Delta in OneLake, notebooks are first-class, and the Lakehouse is the hub.
A Fabric Warehouse is a SQL-first experience over data in OneLake.
Key properties that matter for design:
Primary interface
Execution model
Table exposure and governance
Integration with Lakehouse
Use Warehouse as the main store when:
In our scenario, finance wants:
That’s a Warehouse-first workflow. Lakehouse can feed it, but the serving layer is SQL.
Assume you have a Warehouse called FinanceWarehouse and you’ve ingested curated sales data from the Lakehouse via shortcuts or pipelines into a table fact_sales.
You can define dimensions and a simple star schema with T-SQL:
CREATE TABLE dim_date (
[Date] date NOT NULL,
[Year] int NOT NULL,
[Month] int NOT NULL,
[MonthName] nvarchar(20) NOT NULL
);
INSERT INTO dim_date ([Date], [Year], [Month], [MonthName])
SELECT DISTINCT
order_date AS [Date],
YEAR(order_date) AS [Year],
MONTH(order_date) AS [Month],
DATENAME(MONTH, order_date) AS [MonthName]
FROM fact_sales;
CREATE TABLE dim_customer (
customer_id int NOT NULL,
customer_name nvarchar(200) NULL,
customer_segment nvarchar(100) NULL
);
INSERT INTO dim_customer (customer_id, customer_name, customer_segment)
SELECT DISTINCT
customer_id,
customer_name,
customer_segment
FROM fact_sales;
CREATE TABLE dim_product (
product_id int NOT NULL,
product_name nvarchar(200) NULL,
product_category nvarchar(100) NULL
);
INSERT INTO dim_product (product_id, product_name, product_category)
SELECT DISTINCT
product_id,
product_name,
product_category
FROM fact_sales;
From there, Power BI can connect directly to FinanceWarehouse, build a semantic model, and use Direct Lake or import depending on your design.
Back to our mixed team.
You have:
A pragmatic pattern that aligns with the SQL vs Python flow:
Use Lakehouse for ingestion and heavy transformation
sales_clean, customers_clean) in the Lakehouse.Expose curated Lakehouse tables to a Warehouse
AnalyticsWarehouse).Connect Power BI to the Warehouse
AnalyticsWarehouse tables.Keep ML and data science on the Lakehouse
This pattern respects language:
You avoid forcing data scientists into T-SQL for transformations, and you avoid forcing analysts into PySpark they don’t want.
The Lakehouse SQL endpoint often causes confusion: “If Lakehouse has SQL, why use a Warehouse at all?”
Useful mental model:
Lakehouse SQL endpoint
Warehouse
In practice:
Trying to put both heavy Spark pipelines and all BI in a single Lakehouse or a single Warehouse often leads to friction.
Avoid it by:
Lakehouse tables are tempting to use as your only data warehouse. But if your consumers are SQL-heavy and expect classic DW ergonomics, you’ll hit limits in tooling and governance.
Avoid it by:
Copying data between Lakehouse and Warehouse when you don’t need to wastes storage and introduces latency.
Avoid it by:
The most reliable way to cut through Lakehouse vs Warehouse debates in Microsoft Fabric is to start with this:
Get that language decision right, and the rest of the architecture—shortcuts, semantic models, pipelines—falls into place with far less friction.
This article reflects the growing pattern of splitting Fabric data architectures along SQL-first and Python-first workloads, especially in mixed BI and data science teams sharing a single OneLake-backed environment.
Professionals who want to apply these patterns to their own data can explore Excelgoodies' Microsoft Fabric & Power BI programme - taught live by instructors, with certification awarded once a real project is running at work.
Insights compiled through ongoing industry research and discussions within the Excelgoodies Analytics Community.
Microsoft Fabric
New
Next Batches Now Live
Power BI
SQL
Power Apps
Power Automate
Microsoft Fabrics
Azure Data Engineering