Avoiding Delegation Issues with Lookup Columns in Power Apps Using SharePoint
- Arnaud LG

- Jun 13
- 3 min read
When using Power Apps with SharePoint as a data source, Power Apps SharePoint delegation issues often arise — especially when working with lookup columns. Delegation refers to the ability for Power Apps to push data processing to the data source instead of retrieving all records and processing them locally, which is inefficient and limited to 500–2000 records by default.

Power Apps SharePoint delegation: The Problem with SharePoint Lookup Columns
SharePoint Lookup fields (as well as Person, Choice, and Managed Metadata fields) are complex types.
Power Apps cannot delegate queries involving these fields to SharePoint. This includes filtering, sorting, searching, or comparisons using these fields.
Recommendations to Avoid Delegation Issues on Lookup Columns
1. Avoid Filtering or Sorting on Lookup Columns
Don’t use formulas like:
Filter(MyList, LookupField.Value = "SomeValue")This is not delegable, and Power Apps will only evaluate up to the data row limit (default 500).
Instead, consider denormalizing: instead of using a LookUp column to refere to another list item, use a numeric column to store the ItemId of and filter on that.
Filter(MyList, LookupField_Id = 2)2. Denormalize Lookup Values for Delegable Filtering
There are two effective denormalization approaches:
a) Use a Plain Text Column for Unique Names
Ideal for master data lists with a stable, unique text value, such as a list of countries.
Example:
SharePoint list Countries with field Title = "Switzerland"
Add a CountryName text column in your main list.
Copy the value when assigning:
Patch(MyList, Defaults(MyList), { CountryName: drp_Country.Selected.Title })Filter with:
Filter(MyList, CountryName = "Switzerland")✅ This is fully delegable.
b) Use a Number Column to Store the Lookup Item’s ID
Best when:
The lookup list is large
There is no unique text field
Or the text field is subject to change
Example:
SharePoint list Products with IDs like 1023, 1045, etc.
In your main list, create a ProductId column (type: Number)
Store the selected item’s .ID:
Patch(MyList, Defaults(MyList), { ProductId: drp_Product.Selected.ID })Then filter delegably:
Filter(MyList, ProductId = 1045)✅ This approach works even with very large lists and avoids relying on volatile string values.
3. Use Collections to Work Around Delegation
If the list isn’t large (under delegation limits), use:
ClearCollect(LocalTasks, Tasks);
Filter(LocalTasks, AssignedTo.DisplayName = User().FullName)Then perform filtering/sorting on the local collection (delegation not required).
⚠️ Only use this method if you're certain the list will stay small. It downloads all records into memory and won’t scale.
4. Use Indexes on Lookup Fields
While this doesn't solve delegation, indexing lookup and text fields in SharePoint helps with:
Performance
View filtering
Data retrieval
Always index any field you plan to filter or sort.
5. Consider Moving to Dataverse for Complex Scenarios
When you outgrow SharePoint’s limitations:
Delegation issues with complex fields
Lack of referential integrity
Need for row-level security or large datasets
Move your app to Dataverse, which offers:
Delegation for complex types (lookup, choices, relationships)
Referential integrity
Richer security models
Better integration with CoPilot, Power Automate, etc.
Code Samples: Delegable vs Non-Delegable
❌ Not Delegable (SharePoint Lookup):
Filter(Orders, Customer.Value = "Contoso")✅ Delegable (Denormalized text field):
Filter(Orders, CustomerName = "Contoso")✅ Delegable (Using ID reference):
Filter(Orders, CustomerId = 1023)Delegation Function Support Comparison (SharePoint)
Function | Delegable on Simple Fields | Delegable on Lookup Fields | Notes |
Filter() | ✅ | ❌ | Use denormalized text or numeric ID |
Search() | ❌ | ❌ | Delegation not supported for any field |
Sort() | ✅ | ❌ | Must sort using simple indexed field |
SortByColumns() | ✅ | ❌ | Only works with simple text/number fields |
LookUp() | ✅ | ❌ | Use caution; breaks with lookup properties |
Collect() | ✅ | ✅ | But results are client-side only |
Conclusion
To build reliable, scalable Power Apps with SharePoint data sources, it’s crucial to understand delegation limits—especially when using lookup columns.
By denormalizing lookup values into delegable columns (text or number), using collections cautiously, and knowing when to transition to Dataverse, you can avoid frustrating performance issues and deliver a robust user experience.



Comments