What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
A gallery can look correct on a test list of 40 records and then quietly miss matching rows once the source grows into the thousands. Delegation decides which of those outcomes you get. It is the step where Power Apps hands a formula to the data source to run, instead of pulling rows into the app and filtering them there. Whether a given formula is delegated depends on the connector, the operation, the column type, and the way the expression is written. This article explains how to reason about that with real formulas, and where the rules differ between Dataverse and SharePoint.
What delegation actually does
Delegation is the translation of a Power Fx expression into a query that the connected data source can execute itself. If the formula and the connector both support the operation, the source filters, sorts, or otherwise processes the rows, and only the results travel to the app. That keeps the local data payload small, which matters most for galleries and tables over large remote tables.
As an Amazon Associate I earn from qualifying purchases.
Support is set by the connector, not by Power Fx as a whole. Microsoft’s delegation overview in Microsoft Learn explains that a query becomes nondelegable when it uses a feature the source does not support. If any part of the expression falls outside that support, Power Apps does not delegate part of the query and treats the whole expression as local work. The guidance is blunt: “Use only formulas that can be delegated.”
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →What happens when a formula is not delegated
Nondelegable work runs locally against a limited set of rows. Microsoft documents a default local row limit of 500, which can be raised to a maximum of 2,000 in the app settings (see the delegation overview and the data sources guidance). The app then works over that subset only.
#1 Best Overall
This is the core failure mode. If the row you are looking for sits at position 3,412 in a table, a nondelegable search will not find it, and nothing on screen says so. Raising the limit to 2,000 does not fix this for a source that holds more rows; it only widens the window the app scans locally. The fix is to make the formula delegable against the source, or to narrow the data at the source with a view or a targeted filter.
Reading real formulas
The formulas below are teaching patterns with an explicit data source and field names. They are not verified against a live app, and whether each one delegates depends on your connector, the column types, and the connector’s current support table.
Rank #2
Pattern 1: a simple equality filter
Filter(Orders, Status = "Open")
A single equality comparison against a simple text or choice column is the most common delegable shape. For Dataverse, Microsoft lists Filter and equality comparisons as delegable across the data types in its table. For SharePoint, the same expression can work on simple fields, but the restrictions covered below apply, so check the field type before relying on it.
Pattern 2: filter, then sort on the server
SortByColumns(
Filter(Orders, Status = "Open"),
"CreatedOn",
SortOrder.Descending
)
This is a server-side filter-and-sort pattern only when both operations and both fields are supported by the data source. Syntax alone does not guarantee it. Confirm the sort column’s type in the connector table before you treat the gallery as fully server-side.
Pattern 3: arithmetic inside the filter
Filter(Orders, Amount + 10 > 100)
Microsoft’s Dataverse notes specifically say that numeric arithmetic expressions such as field + 10 > 100 are not delegable. This is the most common way a formula looks correct and then returns partial results. Where the business logic allows, compare the column directly to a value you have already calculated, for example a threshold that you compute once in a variable and then pass to the filter. Then verify the connector and type support again, because the simpler expression is only a step toward delegation, not a guarantee.
Dataverse and SharePoint are different connectors
Do not apply one connector’s support table to the other. The two most useful differences for gallery and search work are summarised below. Where the cited Microsoft pages do not address a point, the table says so rather than filling it in.
Rank #4
| Behaviour | Dataverse | SharePoint |
|---|---|---|
| Filter with simple equality | Listed as delegable for the listed data types in Microsoft’s Dataverse connector page | Works on simple fields; complex-type restrictions apply (see Microsoft’s SharePoint connector page) |
| Arithmetic on a numeric column in a filter | Not delegable | Not stated in the cited SharePoint notes; verify before use |
Date comparisons using Now() or Today() |
Listed as exceptions in DateTime comparisons | Not stated in the cited SharePoint notes |
CountRows |
May return a cached value | Not delegated |
CountIf |
Microsoft directs makers to CountIf(table, True) for non-cached totals under 50,000 rows, subject to permissions |
Not delegated |
| Aggregate functions | Limited to 50,000 rows; not supported on views | Not stated in the cited SharePoint notes |
| Complex or special columns | Support varies by listed data type | Person subfields, Choice and Lookup fields, and the ID column have restrictions; the ID column does not support relational comparisons as if it were a normal number |
Dataverse specifics
Microsoft’s Dataverse page lists Filter, Lookup, comparisons, And, Or, Not, and Sort and SortByColumns as supported in specified data-type combinations. Keep those combinations attached to any example you publish or reuse. The aggregate limit of 50,000 rows matters for totals: a count that looks complete on a small table may not be complete on a larger one, so use the cached or non-cached guidance from the table above deliberately.
SharePoint specifics
SharePoint’s connector notes state that CountRows and CountIf are not delegated. They also describe restrictions for complex types. If you use a blank-check workaround, be aware of the difference. IsBlank(CustomerId) does not delegate, while comparing a column to Blank() may delegate in the cases Microsoft describes. The two are not interchangeable: the Blank() comparison handles empty strings differently, and the documented support applies to equality, not to <>. Test the exact expression against your own list before you rely on it.
Best Value
Warnings, and what they do and do not tell you
The formula editor may show a warning for nondelegable expressions, but warnings only appear for formulas that use data sources with delegation support. The absence of a warning is therefore not proof that the query runs on the server. Use this sequence when you review a formula:
- Identify the data source and open the matching connector page in Microsoft Learn.
- Check each function, operator, and column type in the expression against that page, including comparisons and sorts.
- Look for arithmetic or calculated values inside the filter and move them into a variable where possible.
- Test with a table larger than 2,000 rows and search for a value you know sits near the end of the source. A missing result points to local processing.
- For development only, you can set the row limit to 1 to surface nondelegation problems faster. Do not use that setting as a runtime fix.
Functions that need careful wording
UpdateIf and RemoveIf are not generally delegated. Microsoft’s Dataverse notes describe local work that simulates delegation up to a limit, and the outcome depends on records already held in the cache. A Microsoft release-plan entry describes enhanced behaviour that can process more than 2,000 records when a large amount of data is cached, as described in the enhanced delegation release-plan entry. Do not assume an unbounded record count for either function. Check the current behaviour for your environment before you build a bulk update on it.
Keeping payloads small in galleries and search
Delegation is one part of performance. Microsoft’s small data payloads guidance, last updated 11 December 2023, suggests aiming for a default gallery or table query of roughly 100 to 200 records. That is design guidance, not a platform limit, and galleries and tables load results in pages. Use source-side views, sensible default filters, and a search box that only runs a delegable filter once the user has typed a term. A screen that loads everything and filters it locally will be slower and less accurate than one that asks the source for a narrow answer.
A checklist before you publish a gallery or search
- The connector page confirms every function, operator, and column type in the formula.
- The formula contains no arithmetic on numeric columns inside the filter.
- The app returns the expected result for a record beyond the first 2,000 rows.
- Counts use the cached or non-cached approach that matches the table size and your permissions.
- Blank checks use the expression you have tested, not an assumed equivalent.
- Default gallery queries stay close to the 100 to 200 record guidance, with paging for the rest.
Microsoft’s connector pages and limits change over time, so read the current versions of the linked pages when you build or review a formula.
Source for the connector and data-source guidance: Understand data sources for canvas apps.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




