top of page

Avoiding Delegation Issues with Lookup Columns in Power Apps Using SharePoint

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

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


ProgeSwiss logo

Reach out to us

Route de Crassier 7 - 1262, Eysins CH

+41 21 560 3113

© 2025 ProgeSwiss. All rights reserved.

Connect with Us

  • LinkedIn
  • Facebook
  • Youtube
bottom of page