Skip to main content
Automation

Power Apps Data Architecture: Dataverse vs Azure SQL, Delegation Limits and Performance

The app worked beautifully in the demo with 200 test rows. In production, against two million rows, it silently returns the wrong total — because a non-delegable function quietly capped the query at 500 records and nobody saw an error. The Dataverse-versus-Azure-SQL decision for a Power App is not a preference; it sets your delegation behaviour, your performance ceiling and your governance model, and the wrong choice surfaces as subtle wrong numbers at exactly the scale where they matter.

Amit Kumar Singh - Technology Consulting Partner at MyData Insights

Technology Consulting Partner · MyData Insights

14+ years in industrial data · Former Accenture & EY · India, GCC, SEA

26 October 2026 · 10 min read

The bottom line

The data source behind a Power App decides more than where rows live — it decides delegation, performance and governance. Dataverse is the native choice: rich security, relationships, business rules and strong delegation support, at a per-capacity cost and with modelling overhead. Azure SQL suits large existing relational data and heavy transactional volume, is familiar to data teams and cheaper at scale, but has narrower delegation support in Power Apps, so non-delegable queries silently cap at the delegation limit and return wrong results. A hybrid — Dataverse for app-centric entities, Azure SQL for high-volume or system-of-record data — is common and correct. The non-negotiable rule: design for delegation, because the failure mode is not an error, it is a quiet wrong answer.

The failure mode is a wrong answer, not an error

Most technical mistakes announce themselves — a page errors, a build fails, a query times out. The Power Apps data-source mistake does something worse: it works, and it lies. An app that exceeds a delegation limit does not crash; it silently processes only the first tranche of rows (500 by default, up to a configurable cap) and returns a total, a count or a filtered list that looks right and is wrong. The demo passes because the test data is small. Production fails quietly because the data is not.

This is why the Dataverse-versus-Azure-SQL question has to be answered at design time with delegation in mind, not treated as an implementation detail. The two options behave differently against Power Apps' delegation model, and the difference determines whether your app is correct at scale or confidently incorrect.

Delegation decides correctness at scale

Delegation is the mechanism by which Power Apps pushes a query — a filter, a sort, an aggregate — down to the data source to execute, rather than pulling rows into the app and processing them locally. It matters because the app only ever retrieves a limited number of rows (the delegation limit); anything the source cannot handle is done on that limited set. A delegable filter runs across all two million rows; a non-delegable one runs across the first 500 and silently ignores the rest.

Which functions are delegable depends on the connector. Dataverse has broad delegation support; Azure SQL supports delegation for many operations but not all, and the gaps are where apps go wrong. The practical discipline is the same for both: know which functions delegate for your source, watch for the delegation warnings in the maker studio, and design queries to stay delegable — never assume a filter or aggregate ran across the whole table just because it returned a number.

A delegation warning in Power Apps is not a style note — it is a correctness warning. An app full of ignored delegation warnings is an app that returns right-looking wrong numbers the day the data grows.

When Dataverse is the right data layer

Dataverse is the native Power Platform data platform and the default for app-centric data. It brings a rich security model (table, row and field-level security tied to Entra ID), relationships, business rules, calculated and rollup columns, auditing, and strong delegation support — so the correctness trap is far smaller. For data that belongs to the app and its processes, where governance and security matter and volumes are moderate, Dataverse is usually the right answer and the lowest-risk one.

The costs are real but predictable: Dataverse consumes capacity (database, file and log) that is licensed, and modelling data into it is an exercise in its own right rather than pointing at an existing table. For a greenfield app with its own entities, that overhead buys security and delegation you would otherwise have to engineer; for a thin app over a large existing relational store, it can be unnecessary duplication.

When Azure SQL is the right data layer

Azure SQL suits apps over large, existing relational data, heavy transactional volume, or a system of record that other applications also use. Data teams know it, it scales cost-effectively, and it avoids duplicating a warehouse of data into Dataverse just to surface it in an app. For an app that reads and writes to data the business already manages in SQL, pointing Power Apps at it directly is often the pragmatic, cheaper choice.

The catch is delegation: the Azure SQL connector delegates many operations but not all, and the non-delegable gaps are where the silent-wrong-number risk concentrates. The mitigations are design-time — use views or stored procedures to shape data into delegable patterns, keep the app's queries within the delegable function set, filter server-side, and never rely on client-side processing across a large table. Done with that discipline, Azure SQL is a strong backing store; done naively, it is where apps quietly break.

The hybrid model is often correct

It is not a binary choice, and the best architecture is frequently both. Use Dataverse for the app-specific entities that benefit from its security, relationships and delegation — the records the app itself owns and governs — and Azure SQL for high-volume or system-of-record data that lives elsewhere and is shared with other systems. The app reads from each where it fits, rather than forcing all data into one store.

This mirrors a sound data architecture generally: the operational system of record stays where it belongs, and the app layer holds only what it owns. In a Microsoft estate it also composes cleanly with the rest of the stack — Dataverse and Azure SQL both surface into Fabric for analytics, so the transactional app and the reporting layer share a coherent foundation rather than diverging.

Where this breaks

The commonest failure is ignoring delegation warnings until production exposes them, by which point the fix is a re-architecture under pressure rather than a design decision made calmly. No data source removes the need to design for delegation; it only changes which functions are safe. Treat every delegation warning as a defect, not a suggestion.

Cost and governance also cut both ways: Dataverse capacity costs can surprise teams who modelled a large dataset into it unnecessarily, while Azure SQL used naively pushes security and access logic into the app where it is harder to govern than Dataverse's built-in model. And a hybrid adds its own complexity — two data layers to secure, monitor and keep coherent — so it is the right answer when the data genuinely has two homes, not a default to reach for because choosing is hard.

What to do first

Decide the data layer from the data's nature and the delegation behaviour, before building screens.

  • Classify the app's data: app-owned entities (lean Dataverse) versus large or shared system-of-record data (lean Azure SQL)
  • For any source, list the queries the app will run and confirm each is delegable for that connector
  • For Azure SQL, shape data into delegable patterns with views or stored procedures before the app grows
  • Treat every delegation warning in the studio as a correctness defect to resolve, not ignore
  • Test against production-scale data volumes, not demo data — the trap only appears past the delegation limit

If a Power App is returning numbers that look right and aren't, the data architecture and delegation design are usually why. Book 30 minutes with Amit on the Dataverse-versus-Azure-SQL decision and delegation-safe design for your apps. No slides, no pitch deck, no obligation to proceed.

Free Assessment

Where does your operation sit on the data maturity curve?

8 questions. 3 minutes. You get a scored breakdown across data infrastructure, analytics readiness, and automation potential — with a specific next step for your industry.

AutomationPower PlatformPower AppsAzureArchitectureData Integration

Your Data · Our Technology · Our Automation

Get practical insights every fortnight

Amit writes about Microsoft Fabric, Power BI, AI in operations, and digital transformation for manufacturing and supply chain leaders. Practitioner perspective - no fluff, no vendor spin.

No spam. Unsubscribe any time. Also on Substack.

FAQ

Common questions

What is delegation in Power Apps and why does it matter?

Delegation is Power Apps pushing a query — filter, sort or aggregate — down to the data source to run across all rows, rather than pulling a limited set into the app and processing locally. It matters because the app only retrieves a limited number of rows, so a non-delegable query runs on the first 500 (or the configured cap) and silently ignores the rest, returning a right-looking wrong result. It is a correctness issue, not performance tuning.

Should I use Dataverse or Azure SQL for my Power App?

Use Dataverse for app-owned entities where security, relationships and strong delegation matter and volumes are moderate — it is lower-risk for correctness. Use Azure SQL for large existing relational data, heavy transactional volume, or a shared system of record, accepting that you must design for its narrower delegation support. Many apps correctly use both: Dataverse for app data, Azure SQL for high-volume or shared data.

Does Azure SQL support delegation in Power Apps?

For many operations, yes, but not all — and the non-delegable gaps are where apps silently return wrong results. The mitigations are design-time: shape data with views or stored procedures into delegable patterns, keep queries within the delegable function set, filter server-side, and heed the delegation warnings. With that discipline Azure SQL is a strong backing store; used naively it is where apps quietly break at scale.

Why does my Power App show the wrong total in production but not in testing?

Almost always a delegation limit. In testing the data is small enough to fit within the limit, so everything is processed and the total is right. In production the table exceeds the limit, a non-delegable query processes only the first tranche, and the total is computed on a subset with no error raised. The fix is making the query delegable, and testing against production-scale data.

Is a hybrid Dataverse plus Azure SQL architecture a good idea?

Often, yes — when the data genuinely has two homes. Dataverse holds the app-owned entities that benefit from its security and delegation; Azure SQL holds high-volume or shared system-of-record data. Both surface into Fabric for analytics, keeping transactional and reporting layers coherent. It adds complexity (two layers to secure and monitor), so use it when the data shape calls for it, not as a default.

Is this your situation?

A 30-minute working call with Amit. We look at your actual setup, not a template, and you leave with a clear next step.