Tutorials/Power Apps/Filtering SharePoint Lists in Power Apps: Practical Examples and Patterns
Power Appsintermediate

Filtering SharePoint Lists in Power Apps: Practical Examples and Patterns

Learn how to use the Filter function to query SharePoint list data efficiently across text, number, date, choice, lookup, person, and yes/no columns, with delegation insights.

NA
Narmer Abader
@narmer · Published June 3, 2026

The Power Apps Filter function is your go-to tool for retrieving a subset of records from a SharePoint list based on one or more logical conditions. When you build canvas apps connected to SharePoint, you frequently need to show only the data that matters—like assets assigned to a specific person, items above a price threshold, or tasks due within a date range.

This article walks through realistic filter patterns using a custom Asset Tracking scenario. Each example covers a different SharePoint column type and includes delegation notes so you know whether the query will scale beyond the default data row limit (500 or 2000 records, depending on your environment).


The Scenario: Managing IT Assets

Imagine a SharePoint list called AssetTracking that your organization uses to track hardware. The list contains these columns:

Column NameData TypeExample Values
AssetIDSingle line of textAST-1001, AST-1002
AssetNameSingle line of textDell Latitude 5430, HP EliteBook 840
CategoryLookup (to Categories list)Laptop, Monitor, Printer
StatusChoiceActive, Retired, Under Repair
AssignedToPerson or GroupUser display name and email
PurchaseDateDate and Time2025-03-15
CostNumber (currency)1200.00
LocationSingle line of textBuilding A – Floor 3, Building B
WarrantyExpiryDate and Time2027-03-15
IsCriticalYes/NoYes, No

A second list called Categories holds the possible lookup values: Laptop, Monitor, Printer, Peripheral.


Filtering Text Columns

Exact Match

To find all assets located in a specific building, use the equals operator:

powerfxFilter text column with exact match
Filter(AssetTracking, Location = "Building A – Floor 3")

This condition delegates well. If the Location column contains more than one word, enclose the entire string in double quotes.

Starts With

To retrieve assets where the location name starts with “Building A”, use StartsWith:

powerfxFilter text column with StartsWith
Filter(AssetTracking, StartsWith(Location, "Building A"))

StartsWith delegates when used with a SharePoint text column. It is case-insensitive by default.

Is Blank

To find assets that have no location recorded:

powerfxFilter text column for blank values
Filter(AssetTracking, IsBlank(Location))

Be aware that checking for blank values may not delegate on all SharePoint connections. For large lists, consider using a separate “NoLocation” flag or test thoroughly.


Filtering Number Columns

Greater Than / Less Than

To show only assets that cost more than $1,000:

powerfxFilter number with greater than
Filter(AssetTracking, Cost > 1000)

To find assets costing $750 or less:

powerfxFilter number with less than or equal
Filter(AssetTracking, Cost <= 750)

Both > and <= delegate for SharePoint number columns.

Between Two Values

To get assets with a cost between $500 and $1,500:

powerfxFilter number with AND condition
Filter(AssetTracking, Cost >= 500 And Cost <= 1500)

The And operator delegates when both sides are delegable individually.

Not Equal

To exclude assets that cost exactly $0 (e.g., uncategorized items):

powerfxFilter number with not equal
Filter(AssetTracking, Cost <> 0)

<> delegates for number columns.


Filtering Date Columns

Date Equals Today

To see assets purchased today:

powerfxFilter date equals current date
Filter(AssetTracking, PurchaseDate = Today())

Today() returns a date-only value, so it aligns with the date part of a Date/Time column.

Date Equals a Specific Date

To find assets purchased on March 15, 2025:

powerfxFilter date with Date function
Filter(AssetTracking, PurchaseDate = Date(2025, 3, 15))

Avoid string conversion; the Date(year, month, day) function is delegable and safer.

Date Between Two Values

To retrieve assets purchased within the first quarter of 2025:

powerfxFilter date between two dates
Filter(AssetTracking, PurchaseDate >= Date(2025, 1, 1) And PurchaseDate <= Date(2025, 3, 31))

Again, both sides of And delegate.

Date Range Contains Another Date

If you need to check whether a record’s start-to-end date range contains a specific date (e.g., warranty covers a certain day), use two comparisons:

powerfxFilter date range contains a date
Filter(AssetTracking, WarrantyExpiry >= Date(2025, 6, 1) And WarrantyExpiry <= Date(2025, 6, 30))

This pattern works for any pair of date columns.


Filtering Yes/No Columns

To display only critical assets:

powerfxFilter Yes/No column for true
Filter(AssetTracking, IsCritical = true)

For non-critical assets:

powerfxFilter Yes/No column for false
Filter(AssetTracking, IsCritical = false)

Yes/No columns are stored as Boolean values. Use the keywords true and false (case-insensitive). These conditions delegate.


Filtering Choice Columns

To show only assets with a status of “Active”:

powerfxFilter choice column using .Value
Filter(AssetTracking, Status.Value = "Active")

Choice columns in SharePoint store an object with a .Value property. Always access .Value for delegation. Never compare directly with Status = "Active" because that would compare against the full object.

To find assets that are not “Active”:

powerfxFilter choice column with not equal
Filter(AssetTracking, Status.Value <> "Active")

The = and <> operators delegate for choice columns when combined with .Value.


Filtering Lookup Columns

Using the Lookup Value

To find all assets in the “Laptop” category:

powerfxFilter lookup column by display value
Filter(AssetTracking, Category.Value = "Laptop")

The .Value property returns the display name of the looked-up item.

Using the Lookup ID

To filter by the internal ID of the looked-up item (for example, if you have the ID from another source):

powerfxFilter lookup column by ID
Filter(AssetTracking, Category.ID = 2)

Both patterns delegate, but filtering by ID is slightly more performant. Use .Value when you want to match based on a user-readable string, and .ID when you have the numeric identifier.


Filtering Person Columns

Person Equals Current User

To show assets assigned to the signed-in user:

powerfxFilter person column by current user email
Filter(AssetTracking, AssignedTo.Email = User().Email)

The User() function returns details of the logged-on user. Comparing email addresses is reliable and delegates.

Person Equals a Specific User

To filter by a specific person (e.g., a manager’s email stored in a variable):

powerfxFilter person column by variable
Filter(AssetTracking, AssignedTo.Email = varManagerEmail)

You can also compare by AssignedTo.DisplayName or AssignedTo.Claims, but the Email property is usually the best choice for delegation.


Combining Multiple Conditions

You can chain conditions with And (or &&) and Or (or ||).

AND Example

Show active, critical assets assigned to the current user:

powerfxMultiple AND conditions
Filter(AssetTracking, Status.Value = "Active" && IsCritical = true && AssignedTo.Email = User().Email)

OR Example

Show assets that are either under repair or retired:

powerfxOR condition for choice column
Filter(AssetTracking, Status.Value = "Under Repair" || Status.Value = "Retired")

When mixing And and Or, use parentheses to clarify precedence:

powerfxMixed AND and OR conditions
Filter(AssetTracking, (Status.Value = "Active" || Status.Value = "Under Repair") && Cost > 500)

All the examples above delegate as long as each individual condition delegates.


Delegation Considerations

The Filter function delegates to SharePoint most commonly used operators for text, number, date, Yes/No, choice, lookup, and person columns. The following operators typically delegate:

  • =, <>, <, >, <=, >=
  • And, Or (with delegable subexpressions)
  • StartsWith
  • IsBlank() (may not delegate on some connectors; test on your list before relying on it)
  • Choice/Lookup column Value and ID

Operators that do not delegate include:

  • Not (use <> instead)
  • EndsWith
  • In
  • Most functions applied to the result (e.g., First, Last)
  • IsBlank on text columns paired with an Or condition in complex ways

Whenever a non-delegable condition is used, Power Apps retrieves only the first 500 records (or 2000, depending on the environment) and applies the filter client-side. This leads to incomplete results for large lists.

Delegation Warning

Always check for delegation warnings in Power Apps Studio. Use the Monitor tool (Advanced Tools → Monitor) to inspect the actual queries sent to SharePoint. A yellow triangle or blue underline in the formula bar indicates that the filter runs locally on a capped row set. Restructure the query or route complex non-delegable logic through a Power Automate flow.


Common Mistakes and Troubleshooting

Tip

Use the Advanced tab of the data source panel in Power Apps Studio to see column internal names exactly as Power Apps sees them. Sometimes spaces or special characters require single quotes around column names in formulas (e.g., 'Last Sold Date').

  • Forgetting .Value for Choice columns – Always use Status.Value = "Active", not Status = "Active".
  • Using Text() on date columns inside FilterText() is not delegable. Compare dates with Date() or Today().
  • Assuming Today() includes timeToday() is date-only. If your column includes time, use DateValue() to extract the date, but that may not delegate. Better: store dates as Date only in SharePoint.
  • Not handling blank dates – Use Or with IsBlank if blanks are valid, but be aware of delegation limits.
  • Mixing data types in comparisons – Comparing a text column to a number will fail. Ensure types match.
  • Hard-coding IDs – Lookup IDs can change if the source list is repopulated. Prefer filtering by .Value when the display name is stable.

Troubleshooting steps:

  1. Add a Label to your app and set its Text property to CountRows(YourFilteredTable). This quickly shows how many records are returned.
  2. Use the Monitor tool to see the actual query sent to SharePoint.
  3. Reduce the number of columns returned by using ShowColumns() if you only need a few fields.
  4. For non-delegable scenarios, consider using ClearCollect() with a delegable outer filter to pull a manageable subset into a local collection. The data row limit (500 by default, up to 2,000 in app settings) applies to this fetch, so pair it with a delegable condition to keep the collection small and fast.

Final Recommendation

The Filter function is the foundation for retrieving data from SharePoint in Power Apps. By choosing delegable operators and understanding the limitations of choice and person columns, you can build apps that perform well even with tens of thousands of records.

Best practices summary:

  • Always favor delegable operators (=, <>, <, >, <=, >=, StartsWith, And, Or).
  • Use .Value for choice columns and .Email for person columns.
  • Keep date comparisons simple using Today() and Date().
  • Combine conditions only with And / Or and ensure each subcondition delegates.
  • Test with a representative dataset (including row counts above the default limit) to verify delegation.

When you encounter a filter requirement that can’t be made fully delegable, consider these alternatives:

  • Pre-filter the data in a SharePoint view and connect Power Apps to that view.
  • Use Power Automate to run server-side queries and return results.
  • Use Search function for simple text lookups across multiple columns (delegates when used with SharePoint).

By following these patterns, you’ll write efficient, maintainable formulas that scale with your data.


References