Key takeaways
- Both platforms can run a medallion lakehouse. Feature lists rarely decide; people, consumers, governance and the billing model do.
- If Power BI is the main consumer and the team thinks in SQL and reports, Fabric starts ahead. If the team ships code with tests and CI, Databricks does.
- A Fabric capacity is shared. A heavy background job can push report users into delays and rejections.
- Databricks scales to zero, but someone has to own compute policies, or the bill spreads across many small decisions.
- "Both" works when each table has one owner and data flows one way. A mirrored catalog does not carry Unity Catalog grants.
Clients rarely ask which platform has more features. They ask which one they will regret less. The honest answer depends less on the platforms than on the people who will run the thing in its second year.
I deliver on both. The medallion patterns I use, SCD2 history in bronze, current-row silver, dimensional gold, look the same on each. What changes is everything around them: who writes the code, how it deploys, who governs access, and how the cost behaves.
Named model: five questions, in this order
- People: who builds and runs it in year two?
- Consumers: what reads the gold layer, and is that Power BI?
- Footprint: where does the data already land, and what is already governed?
- Cost: a shared capacity you reserve, or compute you pay for per use?
- Edge: is there streaming or machine learning that sets the bar?
Figure 1. Each question tilts; none decides alone. Two strong tilts in opposite directions is the signal for both.
Context and constraint
This is a framework, not a scorecard. I do not weight the questions or add them up; I look for the one or two that are not negotiable for this client, and let those lead. Product status below is as of October 2026, with Learn links where it matters.
Design
1. People: who runs it in year two
Fabric lowers the entry bar: pipelines, Dataflows, notebooks and Power BI in one workspace and one place to look. That is a real advantage for a team of BI developers and analysts. The bite comes later: low-code workspaces grow fast and deploy badly unless someone brings Git discipline early. Post 11 and post 46 are what that discipline costs.
Databricks assumes engineers: code in a repo, bundles, tests, a pipeline. Post 50 shows the ladder. Hand that to a team without engineers and it does not get simpler, it gets abandoned, and notebooks get edited in the workspace.
So my first question is not about data at all: who on the client side can review a pull request?
2. Consumers: is Power BI the point?
In most of my projects, Power BI is where the business meets the data, whichever platform sits underneath. If it is the main consumer, Fabric removes a hop: Direct Lake reads Delta tables in OneLake without an import refresh, and the semantic model lives next to the data (post 9, post 24).
Databricks data can still reach Direct Lake. A mirrored Azure Databricks catalog in Fabric is generally available: Fabric mirrors the catalog structure, reads the tables through shortcuts without copying them, and you can build Direct Lake reports on it (mirrored catalog). Changes can take seconds to minutes to appear. Plan for two prerequisites: the EXTERNAL USE SCHEMA privilege on the Unity Catalog side, and network access from Fabric to the storage account behind the catalog (tutorial). Publishing a catalog to OneLake from the Databricks side is a second route, still in Public Preview (Fabric with Azure Databricks).
If the gold layer also feeds applications, APIs, other teams' notebooks and models, Power BI is one consumer among many and stops being the deciding factor.
3. Footprint: what is already governed
Where the data lands today matters more than where it could land. A client with an existing Unity Catalog setup, groups and grants already in place, should not rebuild that governance in another product to save a hop for reports. A client whose sources already land in Microsoft services, with no lakehouse yet, has nothing to migrate away from.
The bite is governance in two places. Unity Catalog grants do not travel with a mirrored catalog: the same tutorial tells you to set access in Fabric's own permission model, and tables with row filters or column masks are not mirrored at all (limitations). On the Fabric side, OneLake security is generally available, but its roles do not restrict workspace Admins, Members and Contributors (OneLake row and column security). Workspace roles are a security decision, not a convenience.
4. Cost: reserved and shared, or per use
No numbers here, because they age badly and depend on your agreement. The shapes are what matter.
A Fabric capacity is reserved compute shared by every workload on it. Smoothing spreads background jobs over the next 24 hours, which makes steady loads pleasant. Overuse it, though, and Fabric first delays and then rejects interactive requests, and report users are the interactive requests (throttling). One oversized nightly job becomes a morning of slow reports. Separate capacities, or on-demand billing for Spark, which takes Spark off the capacity (on-demand billing for Spark), are the usual fixes.
Databricks bills compute as it runs, and idle compute can cost nothing. That suits spiky loads. The bite is ownership: without compute policies, auto-termination and tags, the bill is the sum of many small choices nobody reviews.
5. Edge: streaming and machine learning
Both platforms stream and both do machine learning. The question is how deep. Code-first ML with its own lifecycle, feature pipelines and model serving leans Databricks. Event data that business users explore and alert on leans toward Fabric's Real-Time Intelligence. If neither is on the roadmap, do not let a hypothetical one pick the platform.
6. When the honest answer is both
Two strong tilts in opposite directions, for example an engineering team with an existing Unity Catalog setup and a business that lives in Power BI, usually mean both. The pattern I trust: Databricks owns engineering and the tables; Fabric mirrors the gold catalog and owns semantic models and reports.
It works if three rules hold. Each table has one owner and one writer. Data flows one way per layer. And access is designed twice on purpose: Unity Catalog for the engineering side, Fabric permissions and OneLake security for consumers, reviewed together.
The reverse direction exists too. Azure Databricks can read Fabric Lakehouse and Warehouse tables through OneLake catalog federation, read only, with several Fabric tenant settings to enable (OneLake federation). Writing from Databricks into OneLake through an external location is in Beta, and Learn warns that any non-viewer in that Fabric workspace can read, write and delete the data (OneLake external location). I would not build a two-way flow on that yet.
Figure 2. One owner per table, one direction per layer, two permission models designed on purpose.
Figure 3. Pick the bites you can staff for.
Common mistakes
Choosing by feature list. Both have the feature; the question is who will run it.
One capacity for engineering and reports. The nightly job slows the morning.
Databricks with no engineers. It ends up as edited notebooks and an unowned bill.
Assuming mirrored means governed. Unity Catalog grants stay behind; masked tables do not mirror.
Workspace Contributor as a convenience. It bypasses OneLake security roles.
"Both" without table ownership. Two writers, two truths.
Letting a future ML project decide today. Decide on what is on the roadmap.
Use as-is or adapt
Use as-is
- The five questions, people first.
- One owner and one writer per table when you run both.
- Separate heavy engineering from report capacity, or take Spark off it.
- Designing access on each side explicitly, never assuming it carries over.
Adapt before you use
- The order of consumers and footprint, when what already exists is large.
- How you split capacity, by workload or by environment.
- Whether reports read a mirrored catalog or a copied gold layer, given sync latency and the row filter and column mask limits.
- Whether you need the reverse flow at all.
Related
- Databricks Bundles: What Changes per Target? (what the Databricks ladder costs)
- Fabric CI/CD: How Do You Limit Blast Radius Across Dev Workspaces? (what the Fabric ladder costs)
- Data Agent Readiness: Is Genie (and Fabric Agents) Really a Modeling Problem? (modeling matters on both)
- OneLake Shortcuts: Should Shortcuts Stay Bronze-Only? (where shortcuts belong in a medallion)
- Direct Lake: Do You Still Need to Refresh a Semantic Model? (the Power BI side of the hop)
Pick the platform your team can run, then design the seams on purpose.