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
You’ve built solid ETL logic in Excel Power Query, but now reports are multiplying, refresh times are creeping up, and everyone is copy-pasting the same queries. This guide shows how to move those queries into Power BI Dataflows, build a shared data model, and avoid the usual migration traps. If you want to go deeper into modelling and governance, pairing this with focused Power BI reporting skills will help you turn the migrated dataflows into robust, reusable datasets.
Most teams move to dataflows because they hit one or more of these pain points:
Power BI Dataflows help by:
The rest of this article walks through a practical migration playbook that you can apply to an existing Excel-based solution.
Before you touch Power BI, you need to know what you’re migrating.
Start with:
Avoid migrating everything at once. Pick one business process (e.g. sales reporting) and complete that journey end-to-end.
For each workbook, capture:
A quick way to document:
You don’t need a novel, just enough to map Excel queries to future dataflow entities.
Moving queries as-is into dataflows usually recreates the same mess in the cloud. Use the migration to standardise.
Think in layers:
In dataflows, this typically means:
DF_Staging_Sales).DF_Model_Sales), referencing staging entities.Look across your Excel queries and identify:
Example mapping:
Sales_2023, Sales_2024 → single FactSales entity.Aim for:
The good news: Power BI Dataflows use the same M language as Excel Power Query. Most of your logic can be copy-pasted with minor tweaks.
In the Power BI Service:
In Excel:
In Dataflows:
You may need to adjust:
C:\ to SharePoint/OneDrive URLs).Original Excel Power Query (simplified):
let
Source = Excel.Workbook(File.Contents("C:\Data\Sales.xlsx"), null, true),
Sales_Sheet = Source{[Name="Sales"]}[Content],
ChangedTypes = Table.TransformColumnTypes(Sales_Sheet,
{{"Date", type date}, {"CustomerID", Int64.Type}, {"Amount", type number}}),
FilteredRows = Table.SelectRows(ChangedTypes, each [Amount] > 0)
in
FilteredRows
Dataflow version pointing to SharePoint:
let
Source = Excel.Workbook(
Web.Contents("https://contoso.sharepoint.com/sites/BI/Shared%20Documents/Sales.xlsx"),
null,
true
),
Sales_Sheet = Source{[Name="Sales"]}[Content],
ChangedTypes = Table.TransformColumnTypes(Sales_Sheet,
{{"Date", type date}, {"CustomerID", Int64.Type}, {"Amount", type number}}),
FilteredRows = Table.SelectRows(ChangedTypes, each [Amount] > 0)
in
FilteredRows
The transformation steps stay identical; only the data source changes.
Dataflows become powerful when entities reference each other, not when every entity starts from the source.
For each source system:
Example staging entity for a SQL table:
let
Source = Sql.Database("sql-prod", "SalesDW"),
SalesTable = Source{[Schema="dbo",Item="Sales"]}[Data],
ChangedTypes = Table.TransformColumnTypes(SalesTable,
{{"SalesDate", type date}, {"CustomerID", Int64.Type}, {"NetAmount", type number}})
in
ChangedTypes
Instead of reloading from the source, reference the staging entity:
let
Source = #"Stg_Sales", // staging entity
FilteredRows = Table.SelectRows(Source, each [NetAmount] > 0),
AddedYear = Table.AddColumn(FilteredRows, "Year", each Date.Year([SalesDate]), Int64.Type)
in
AddedYear
This pattern:
Once you’ve built your entities, you need to hook them up to Power BI reports.
In Power BI Desktop:
FactSales, DimCustomer).Then:
DimCustomer[CustomerID] → FactSales[CustomerID]).Example measure:
Total Sales = SUM ( FactSales[NetAmount] )
Sales LY =
CALCULATE (
[Total Sales],
DATEADD ( DimDate[Date], -1, YEAR )
)
Keep the dataset lean:
If you find yourself adding many calculated columns in Power BI that could be done upstream, consider pushing them back into the dataflow.
With dataflows, you can offload heavy ETL from Power BI Desktop and improve refresh performance.
For large fact tables:
Basic pattern:
SalesDate).RangeStart, RangeEnd) and use them in your dataflow query.Example parameterised filter in M:
let
Source = #"Stg_Sales",
FilteredRows = Table.SelectRows(Source,
each [SalesDate] >= RangeStart and [SalesDate] < RangeEnd)
in
FilteredRows
Common failure causes after migration:
Set up:
ETL_Log) if you want to track row counts or timestamps.Dataflows are shared assets. Without discipline, they become another swamp.
Adopt a consistent pattern, for example:
DF_Stg_<Domain> – e.g. DF_Stg_SalesDF_Model_<Domain> – e.g. DF_Model_SalesStg_<Table> – e.g. Stg_SalesRawDim_<Name> – e.g. DimCustomerFact_<Name> – e.g. FactSalesDefine:
Consider using a simple change log in a shared document or a ticketing system.
C:\ drive; refresh fails in the service.Pick one high-impact Excel report, identify its core Power Query logic, and move just that into a Power BI dataflow with a clear staging and model layer. Wire a single dataset to that dataflow, verify numbers with your users, and only then expand to other reports—this small, end-to-end migration will give you a repeatable pattern for the rest of your shared data models.
Power BI
New
Next Batches Now Live
Power BI
SQL
Power Apps
Power Automate
Microsoft Fabrics
Azure Data Engineering