The Power BI Fellowship
Patterns & Playbooks · Decisions

Architecture decision library

Quick, honest comparisons for the questions developers keep searching: Import vs DirectQuery vs Direct Lake, measure vs column, Power Query vs SQL, Lakehouse vs Warehouse, one model vs many, RLS vs separate models, PBIX vs PBIP and more.

BI DeveloperSenior BI DeveloperBI EngineerBI Architect / LeadPower BI DesktopMicrosoft FabricSQL engineChecked 2 Oct 2026Download .md
On this page (12)

How to use these

None of these has an answer that is always right; each depends on data volume, freshness, skills, licensing and who maintains it. Each comparison gives the conditions for each option, the trade-offs, how it fails, and a sensible default. When the decision matters, write it down as an ADR, including what would make you change your mind.

Import vs DirectQuery vs Direct Lake

ImportDirectQueryDirect Lake
Use whenData fits in memory and minutes-to-hours latency is fineData must be current to the second, or is too big to import, and the source is fastData already lives in Fabric as Delta tables
Query speedFastestDepends on the sourceClose to Import
FreshnessAs of last refreshLiveAs of the last Delta commit the model picked up
Fails whenThe model outgrows capacity memory or refresh windowsThe source is slow or busy; visuals exceed query limitsTables exceed capacity guardrails (on OneLake: errors; on SQL endpoint: may fall back to DirectQuery)
DAX and modelingEverythingSome limits, every measure becomes SQLMost features; calculated columns and tables have limits

Default: Import, until a requirement rules it out. Then Direct Lake if the data is in Fabric, DirectQuery (with aggregations) if it isn't. Practise: Composite models and DirectQuery, Direct Lake in depth.

Measure vs calculated column

Use a measure whenUse a calculated column when
The number is aggregated on a visual and must respond to filtersYou need to slice, group or filter by the value, or use it as a relationship key
It's a ratio, a time comparison, a rankingThe value is a fixed property of the row (a band, a flag)

Power Query vs SQL

Prefer Power Query whenPrefer SQL (or the warehouse) when
No warehouse exists, or the logic is specific to one modelThe logic is shared by several models or tools
Sources are files, SharePoint or APIsThe data is big and lives in a database
The team is analysts without database accessData engineers own the pipeline

Lakehouse vs Warehouse

LakehouseWarehouse
Spark, Python and notebooks; files plus Delta tables; semi-structured dataT-SQL end to end; multi-table transactions; stored procedures
Read via the SQL analytics endpoint (read-only T-SQL)Full read/write T-SQL
Data engineersSQL developers and BI engineers with a SQL background

Dataflow vs pipeline

Dataflow Gen2Pipeline
Transform data with Power Query, low codeOrchestrate: copy data, run activities in order, schedule, branch, retry
Analysts and BI developersData engineers and BI engineers

One model vs multiple models

One shared modelSeveral models
Many reports need the same definitions (Revenue, Customer)Domains are unrelated, owned by different teams, or have very different security and refresh needs
You want one place to fix a definitionOne model would be too big to refresh or understand

RLS vs separate semantic models

RLS in one modelSeparate models per audience
Same structure, different rows per userDifferent tables, columns or logic per audience, or a hard legal separation
Easier maintenance: one modelSimpler security reasoning; more copies to maintain

PBIX vs PBIP

Calculation group vs separate measures

Calculation groupSeparate measures
The same transformation (YTD, PY, YoY %) applies to many base measuresFew measures, or each needs bespoke logic
Fewer objects to maintainSimpler for report authors and Q&A-style tools to understand

Shared semantic model vs a model inside each report

Shared model, thin reportsModel inside the report file
Several reports, one definition, separate release cycles for model and reportsA one-off report or a prototype
Certified and endorsed contentSpeed of building something once

Star vs snowflake

StarSnowflake
Flattened dimensions: Category and SubCategory on DimProductNormalised dimension tables chained together
Simpler DAX, faster filters, fewer relationshipsMatches some source systems; less duplication in the source

Something missing or out of date? Open an issue or edit content/toolkit/guides/decision-library.md.