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
Most teams don’t run a single clean pattern; you end up mixing Direct Lake, Import and DirectQuery in the same Power BI solution. This article walks through concrete mixed-mode patterns, when to use each storage mode, and what to avoid when you start combining them in real projects.
If you want to go beyond patterns and actually build Fabric-based solutions end-to-end, a structured path like a hands-on Fabric & Power BI course can save you a lot of trial-and-error.
Key mental model:
When to use it
Architecture
Benefits
Gotchas
Example measure pattern
Total Sales Amount =
SUMX(
'FactSales',
'FactSales'[Quantity] * 'FactSales'[UnitPrice]
)
Keep measures set-based and avoid row-by-row lookups into large Direct Lake tables.
When to use it
Architecture
Implementation steps (high level)
FactSales_History (Import) – from a warehouse or snapshot view.FactSales_Today (DirectQuery) – from the operational database.FactSales_Combined =
UNION(
FactSales_History,
FactSales_Today
)
FactSales_Combined in your model.Benefits
Gotchas
Alternative: Use composite models with dual-mode dimensions and avoid the union table if you can model by date filter (e.g., separate pages for real-time vs historical).
When to use it
Architecture
Typical use case
Implementation tips
Example: mapping Direct Lake customer to DirectQuery credit status
-- In the external SQL DB, create a simplifying view
CREATE VIEW vwCustomerCreditStatus AS
SELECT
CustomerId,
CASE
WHEN CreditScore >= 750 THEN 'Low Risk'
WHEN CreditScore >= 600 THEN 'Medium Risk'
ELSE 'High Risk'
END AS CreditRiskBand
FROM dbo.CustomerCredit;
Then connect Power BI to vwCustomerCreditStatus via DirectQuery and relate it to your Direct Lake DimCustomer.
Gotchas
When to use it
Architecture
Implementation idea
FactSales_Agg, DimCustomer, etc.).FactSales_Detail as Direct Lake.Benefits
Gotchas
Use this checklist per table (or group of tables), not just for the whole model.
How fresh does the data need to be?
How big will it get in 12–24 months?
Can the source handle query load?
Do you control the schema and ETL?
Is there strict compliance about where data lives?
Example aggregation in a Fabric Warehouse:
CREATE TABLE dbo.FactSales_DailyAgg AS
SELECT
OrderDateKey,
CustomerKey,
ProductKey,
SUM(SalesAmount) AS SalesAmount,
SUM(Quantity) AS Quantity
FROM dbo.FactSales_Detail
GROUP BY
OrderDateKey,
CustomerKey,
ProductKey;
Then expose FactSales_DailyAgg via Direct Lake or Import, and reserve the detailed table for drill-through.
For Import or Direct Lake sourcing, filter early and keep folding.
let
Source = Sql.Database("sqlserver01", "SalesDW"),
Sales = Source{[Schema="dbo",Item="FactSales"]}[Data],
FilteredRows = Table.SelectRows(Sales, each [OrderDate] >= Date.AddYears(DateTime.Date(DateTime.LocalNow()), -2))
in
FilteredRows
Example RLS filter on a dimension:
[Region] = USERPRINCIPALNAME()
(Usually you’d map the username/email to a region mapping table rather than filter directly.)
When you design your next Power BI model, don’t pick a single storage mode by habit. Instead, decide per table using this rule:
If you consistently apply that rule and keep a clean star schema, most mixed-mode performance and complexity problems disappear before they even show up.
Power BI
New
Next Batches Now Live
Power BI
SQL
Power Apps
Power Automate
Microsoft Fabrics
Azure Data Engineering