!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
)