Why Dataverse Is the Preferred Backend
Microsoft Dataverse is the structured, relational data platform that underlies model-driven apps and is now the recommended backend for canvas apps that need to scale. Data lives in tables with strongly typed columns, one-to-many and many-to-many relationships, and server-side business rules, and Dataverse enforces row-level, table-level, and field-level security through security roles and business units. This is a fundamentally different model from flat file sources like a SharePoint list or an Excel workbook, where security is coarser and relationships must be faked with lookup columns and manual joins.
Cricket analogy: Dataverse's security roles work like the BCCI granting a player central contract tiers (A, B, C) that decide exactly which matches, data, and dressing-room privileges they can access, rather than every player having the same blanket access to team information.
Adding the Dataverse Connector to Your App
In Power Apps Studio, you add Dataverse by choosing Add data, selecting the Dataverse connector, picking the environment, and then choosing specific tables such as Account, Contact, or a custom table like 'Service Requests'. Because Dataverse is a first-class Power Platform data source, tables appear with their complete schema, including lookup columns, choice columns, and calculated or rollup columns, and referencing a related table in a formula (for example, ThisItem.'Primary Contact'.'Full Name') automatically pulls that related table into the app's data sources without a separate manual join step.
Cricket analogy: Adding a Dataverse table and having its related tables come along automatically is like selecting a player's Cricinfo profile and instantly seeing their linked career stats, team history, and head-to-head records pulled in without searching each page separately.
// Create a new Account record and link it to a selected Contact via a lookup column
Patch(
Accounts,
Defaults(Accounts),
{
Name: txtAccountName.Text,
'Primary Contact': LookUp(Contacts, Contact = dropContact.Selected.Contact),
'Account Type': 'Accounts (Account Type)'.Customer
}
)Working with Choice Columns and Lookups in Formulas
Dataverse choice columns (formerly called option sets) are strongly typed enumerations, so you cannot assign a plain string like "Active" to them; instead you reference the table-qualified enum value, such as 'Accounts (Status)'.Active, and Power Fx validates that value at compile time. Lookup columns work similarly: you cannot assign a raw ID or text value, you must supply an actual record reference, typically obtained through LookUp() against the related table, so a formula like Patch(Accounts, Defaults(Accounts), {'Primary Contact': LookUp(Contacts, Contact = dropContact.Selected.Contact)}) correctly creates the relationship rather than storing an orphaned value.
Cricket analogy: Choice columns behave like the official DRS decision categories (Out, Not Out, Umpire's Call) that a third umpire must select from a fixed list, rather than typing a free-text explanation that the scoring system cannot interpret.
The exact enum name shown in Power Fx (e.g. 'Accounts (Account Type)') includes the table name in parentheses because the same logical choice label can exist on multiple tables with different underlying option sets. Always let IntelliSense autocomplete the choice reference rather than typing it from memory.
Delegation and Performance with Dataverse
Dataverse offers the broadest delegation support of any Power Apps connector: Filter, Sort, Search, and aggregate functions such as Sum, Average, and CountRows can be pushed down to the server, letting an app work correctly against tables with millions of rows instead of being capped at the 2,000-record non-delegable limit that applies to local processing. However, delegation is not unlimited — certain operations, such as filtering on a formula-calculated column, using nested functions inside a condition in unsupported ways, or some case-sensitive exact text comparisons, still cannot be delegated, and Power Apps Studio flags these with a blue delegation warning triangle so you can rewrite the formula or accept partial results.
Cricket analogy: Delegable queries against millions of Dataverse rows are like Cricinfo's Statsguru running a server-side query across every ODI ball bowled since 1971, instead of you manually scrolling through printed scorecards to tally the answer yourself.
Ignoring a blue delegation warning is a common cause of production bugs: the app will appear to work correctly in testing with a small dataset, then silently return incomplete results (missing rows beyond the first 2,000, or beyond a smaller threshold set in app settings) once the underlying Dataverse table grows. Always rewrite flagged formulas to use delegable operators, or move the calculation into a Dataverse calculated/rollup column so it evaluates server-side.
- Dataverse stores data in strongly typed tables with relationships, business rules, and role-based security, unlike flat sources such as SharePoint lists or Excel.
- Add Dataverse via Add data > Dataverse connector, choosing an environment and specific tables; related tables load automatically when referenced.
- Choice columns require table-qualified enum values (e.g. 'Accounts (Status)'.Active), not plain strings.
- Lookup columns must be set to an actual record reference, typically obtained via LookUp(), not a raw ID or text.
- Dataverse has the widest delegation support of any connector, covering Filter, Sort, Search, and aggregates like Sum and CountRows.
- Blue delegation warning triangles indicate a formula can't be fully pushed to the server and may silently truncate results past 2,000 rows.
Practice what you learned
1. What must you use to assign a value to a Dataverse choice column in Power Fx?
2. How do you correctly set a Dataverse lookup column such as Primary Contact when patching a new record?
3. What is the non-delegable record processing limit that applies when a Power Fx formula against Dataverse cannot be pushed to the server?
4. Which of the following is generally fully delegable against a Dataverse table?
5. Why does adding one Dataverse table sometimes automatically add another table to an app's data sources?
Was this page helpful?
You May Also Like
Connecting to SharePoint and Excel
How to connect Power Apps to SharePoint lists and Excel workbooks, model columns correctly, and understand the delegation and file-locking limits of each source.
SQL Server Connector
How to connect Power Apps to Azure SQL Database or on-premises SQL Server, work with stored procedures and views, and understand the connector's delegation behavior and gateway requirements.
Delegation and Its Limits
A deep dive into how Power Apps delegation works, which functions and connectors support it, and practical strategies for working around non-delegable formulas.
Working with Collections
How to create, update, and manage in-memory Collections in Power Apps for local state, offline caching, and processing data that can't be delegated to a server.
Related Reading
Related Study Notes in Microsoft Technologies
Browse all study notesWindows 10 / UWP Development Study Notes
.NET · 30 topics
Microsoft TechnologiesWindows Batch Scripting Study Notes
Batch · 30 topics
Microsoft TechnologiesMFC (Microsoft Foundation Classes) Study Notes
C++ · 30 topics
Microsoft TechnologiesSilverlight Study Notes
.NET · 30 topics
Microsoft TechnologiesXAML Study Notes
.NET · 30 topics
Microsoft TechnologiesWPF (Windows Presentation Foundation) Study Notes
.NET · 30 topics