web
You’re offline. This is a read only version of the page.
close
Skip to main content

Announcements

News and Announcements icon
Community site session details

Community site session details

Session Id :
Power Platform Community / Forums / Power Apps / Delegation for 50k row...
Power Apps
Answered

Delegation for 50k row Sharepoint Excel

(1) ShareShare
ReportReport
Posted on by 26
Hi all,
 
I have set up a Power App that works but breaks when the source has more than 2,000 rows and it only reads the first 2,000.
 
The good news is, it should filter AppOwner on the users email, and the user shouldn't need to see anything more than those matching rows, which will be less than 2,000.
 
So I have a dropdown with the filter
 
Distinct(
    Filter(
        Filter(AppOwners, Lower('IT Owner Email') = Lower(User().Email)),
        Name <> Blank()
    ),
    Name
)
 
which worked until I tested with 50k rows. Unfortunately I couldn't get the email to work without the Lower() wrap which I think is part of the problem.
 
What's the best approach for delegation in this scenario?
 
Appreciate any support.
Categories:
I have the same question (0)
  • Verified answer
    Haque Profile Picture
    3,653 on at
     
    To me it seems fishy with Lower() function on the column! If possible do a reseach on this - though it sounds bit harsh I doubt the reality is this.
     
    Filter(AppOwners, Lower('IT Owner Email') = Lower(User().Email)) // The red marked Lower() function may be our evil-friend!
     
    Delegation supported by Dataverse for the Filter function and the equality operator = but not for some functions like Lower(). Using Lower() on a column inside a filter breaks delegation - probably.
     
    A possible work around might be: To do a case-insensitive filter on email, please avoid using Lower() on the column. Instead, normalize the user email in your app to lowercase and compare it directly to the column value, assuming the column values are stored consistently (e.g., all lowercase).
     
    As an example, if 'IT Owner Email' column stores emails in lowercase, we could  write:
    Filter(
      AppOwners,
      'IT Owner Email' = Lower(User().Email) && !IsBlank(Name) // Avoiding Lower() on column
    )
    
     
    Now we can use Distinct on filtered result like this (to get unique Name):
    Distinct(
      Filter(
        AppOwners,
        'IT Owner Email' = Lower(User().Email) && !IsBlank(Name)
      ),
      Name
    )
    
    It's not guranteed but I guess this approach keeps the filter delegable and avoids the 2,000 row limit.
     
    If the column values are not normalized, one of the other ways is, we can consider adding a calculated or business rule column in Dataverse to store the lowercase email for future filtering.
     
    Last one - let's ensure data source is Dataverse (not SP or Excel or SQL server), as Dataverse supports delegation better.
     
    If this idea solve the issue please marked as Answered and you should LIKE this?
  • Verified answer
    SebS Profile Picture
    4,826 Super User 2026 Season 1 on at
    !IsBlank() is also non-delegable, so at this point you have to be deliberate about how you design the query. Delegation is not simple, and understanding it is a key part of building scalable Power Apps solutions.
     
    In this scenario there are several traps.
     
    The only viable approach is pre-filtering.
     
    First, ask yourself a critical question:
    Does filtering by user email reduce the dataset to fewer than 2,000 rows?
     
    If yes, you can safely pre-filter on email (delegable), then perform non-delegable operations (such as Distinct() or !IsBlank()) on the reduced result set.
    Use With() to scope the delegable filter first, then apply additional logic locally.
    If User().Email can return more than 2,000 rows, this approach will not be reliable.
     
    Why?
    Because With() does not force full delegation. It still relies on the underlying query, and once a non-delegable function is introduced, Power Apps evaluates only a partial window of the data (up to the delegation limit). That window is not guaranteed to be the first 2,000 rows, but it is still capped — meaning records can be missed.
     
    This is why applying !IsBlank() too early causes failure:
    Power Apps pulls a partial dataset, then filters locally, which leads to incomplete results.
     
    Given those constraints, the best possible partial solution (assuming the email filter reduces the dataset sufficiently) is:
     
     
    With(
        { myEmail: Lower(User().Email) },
        With(
            {
                FilterData: Filter(
                    AppOwners,
                    'IT Owner Email' = myEmail
                )
            },
            Sort(
                Distinct(
                    Filter(FilterData, !IsBlank(Name)),
                    Name
                ),
                Value,
                SortOrder.Ascending
            )
        )
    )

    or approuch with Collection
     
    With(
        { myEmail: Lower(User().Email) },
        ClearCollect(
            colAppOwnersByUser,
            Filter(
                AppOwners,
                'IT Owner Email' = myEmail
            )
        )
    );
    Sort(
        Distinct(
            Filter(
                colAppOwnersByUser,
                !IsBlank(Name)
            ),
            Name
        ),
        Value,
        SortOrder.Ascending
    )
     



     
  • Verified answer
    WarrenBelz Profile Picture
    155,838 Most Valuable Professional on at
    I need to add something here as Excel is really the "data source of last resort" with limited and inconsistent delegation capabilities at the best of times on smaller data sets and with 50k rows, you are going to have much more grief than this.
     
    I suggest you move the data to a SharePoint list and then use what @SebS has posted, which will work fine as long as there are less than 2,000 records where the 'ITOwner Email' matches the User's email. Note however that you cannot use Lower on the datafield value (you can on the User email) as it is not Delegable.
     
    If there are more than 2,000 matching records (up to 4,000) there is a solution, but you will need to be in SharePoint.

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Season of Sharing Community Challenge Launch!

Jump in, show your community spirit, and win prizes!

Kudos to our 2025 Community Spotlight Honorees

Expanding mentorship, skilling, and AI innovation

Congratulations to the May Top 10 Community Leaders!

These are the community rock stars!

Leaderboard > Power Apps

#1
Valantis Profile Picture

Valantis 424

#2
WarrenBelz Profile Picture

WarrenBelz 355 Most Valuable Professional

#3
11manish Profile Picture

11manish 290

Last 30 days Overall leaderboard