The Power BI Fellowship
Reference · Decisions

Which Fabric architecture should I choose?

Where analytical data should live (Lakehouse, Warehouse, Eventhouse or existing SQL), how it gets there, how the semantic layer reads it, and five reference architectures from a small team to real-time.

Senior BI DeveloperBI EngineerBI Architect / LeadMicrosoft FabricSQL engineChecked 2 Oct 2026
On this page (7)

Start with the decision, not the product

Fabric gives you several places to put analytical data, all stored in OneLake as Delta tables (Eventhouse uses its own format and can make tables available in OneLake). The right choice depends on who builds it, in what language, and how fresh it must be:

  • Where should my analytical data live?
    • The team writes T-SQL, needs multi-table transactions, and thinks in tables and stored procedures?
      • → Warehouse
    • The team uses Spark or Python, data arrives as files, or there are semi-structured and unstructured sources?
      • → Lakehouse (with its read-only SQL analytics endpoint for SQL users)
    • Data is events or telemetry, queried within seconds, often with time-series questions?
      • → Eventhouse (KQL)
    • A well-run SQL Server or Azure SQL warehouse already exists and works?
      • → Keep it. Mirror it into OneLake only if you need Direct Lake or to combine it with other Fabric data
    • Data lives in another cloud store and must not be copied?
      • → OneLake shortcuts to ADLS Gen2, Amazon S3 and other supported sources

Most enterprise designs end up with a Lakehouse for raw and cleaned data and either a Warehouse or a "gold" Lakehouse for the dimensional model that semantic models read.

Storage

ItemWhat it isWrite withRead with
OneLakeOne logical data lake per tenant; every Fabric item stores its data hereEach item's engineAny Fabric engine, and ADLS-compatible APIs
LakehouseFiles and Delta tables, plus an automatic SQL analytics endpointSpark, Dataflow Gen2, pipelinesSpark, SQL (read-only through the endpoint), Direct Lake
WarehouseRelational warehouse with full T-SQL DDL and DMLT-SQL, pipelines, Dataflow Gen2T-SQL, Direct Lake, Spark (read)
EventhouseKQL databases for streaming and time-series dataEventstreams, ingestion APIsKQL, Real-Time dashboards, OneLake availability
DeltaThe open table format (Parquet plus a transaction log) behind Lakehouse and Warehouse tables
ShortcutsPointers to data in other OneLake locations or external stores, without copyingLike local tables

Ingestion

ToolBest for
MirroringNear real-time replication of supported operational databases into OneLake (for example Azure SQL, Snowflake, Cosmos DB and SQL Server through a gateway) with no pipelines to maintain
PipelinesOrchestration: copy activities, scheduling, dependencies, calling notebooks and stored procedures
Dataflow Gen2Low-code Power Query transformations, writing to a Lakehouse or Warehouse; the natural step up from Power Query in a model
NotebooksSpark (PySpark, Spark SQL) for large-scale or complex transformation and data engineering
ShortcutsMaking data available without moving it

The medallion pattern (bronze raw, silver cleaned, gold modelled) is a sensible default for organising those steps. It is a convention, not a feature, so keep the layers your team can actually maintain.

Semantic layer

ModeHow it reads dataChoose it when
ImportCopies data into the model at refreshSmall to large models, any source, fastest queries, data can be minutes to hours old
DirectQuerySends queries to the source per visualData must be current to the second, or is too big to import, and the source is fast
Direct Lake on OneLakeReads Delta tables from OneLake directly into the VertiPaq engine; can combine tables from several Fabric itemsData is already in Fabric as Delta; you want import-like speed without scheduled copies
Direct Lake on SQL endpointReads Delta tables through one Lakehouse's or Warehouse's SQL analytics endpointYou need to use SQL views, or want automatic fallback to DirectQuery
CompositeMixes storage modes in one modelAggregations in Import over a DirectQuery detail table, or a local model extending a shared one

Warning: The two Direct Lake variants behave differently. Direct Lake on OneLake doesn't fall back to DirectQuery: if a query can't be answered in Direct Lake it errors rather than silently becoming slow. Direct Lake on SQL endpoint can fall back to DirectQuery (for example when it reads a SQL view, when SQL-endpoint security applies, or when a table exceeds capacity guardrails), and the DirectLakeBehavior property controls whether that's allowed. Know which one your model uses before you promise performance. The Direct Lake in depth topic has hands-on exercises.

Reference architectures

Small team, Power BI only

No Fabric capacity needed. Upgrade when the same cleaning logic is copied into several models, or a model hits size and refresh limits.

Enterprise BI on Fabric

One certified model per business domain; reports connect to it with live connections.

Lakehouse-centric

Spark-heavy teams land everything in Lakehouses and build gold Delta tables with notebooks; analysts query through the SQL analytics endpoint; semantic models use Direct Lake on OneLake.

Warehouse-centric

SQL teams load staging tables with pipelines and transform with stored procedures in a Warehouse. It's the closest to a classic SQL Server warehouse, with T-SQL skills reused directly.

Real-time analytics

Capacity and licensing basics

Write the decision down

Whatever you choose, record the context, options, decision and the trigger to revisit it in an architecture decision record. Sprint 09 is a full Fabric migration decision to practise on, and the decision library compares the common pairs.

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