Skip to main content

How to Filter a Table in Power Apps with Filter

· 4 min read
Jagdish Kumawat
Founder @ Dewiride

Filter takes a table and keeps only the rows that match a condition: the competencies for one job title, the active people in a team, the requests still waiting. It works on SharePoint lists, connector results and any other table, and it's the formula behind almost every gallery. Here's how it works, with two real examples.

Syntax​

Syntax
Filter( Table, Condition1 [, Condition2, ... ] )

The condition is checked for each row, and only rows where it's true are kept. Inside it, you refer to the row's columns by name. The result is a new table; the original isn't changed (Filter reference).

Prerequisites​

  • A table to filter. The examples use the RoleCompetencies SharePoint list and the Office 365 Users connector in the Career Development Plan app; see Part 2 and Part 3 of the series.

Example 1: Rows Where a Column Equals a Value​

The RoleCompetencies list has competencies for several job titles. To keep only the Sales Engineer ones, and show them as a comma-separated list (with Concat, see How to Join Table Values into Text in Power Apps with Concat):

Text control → Text
Concat(Filter(RoleCompetencies, JobTitle = "Sales Engineer"), Competency, ", ")

The formula bar with Concat(Filter(RoleCompetencies, JobTitle = "Sales Engineer"), Competency, ", "), the preview strip reading Customer skill, Leadership with Data type text

The list has eight rows; the filter kept the two for Sales Engineer.

Example 2: Rows Where a True-or-False Column Is True​

For a yes/no column, the column name on its own is the condition. The example keeps only enabled accounts among a manager's direct reports:

App → Formulas (part of MyDirectReports)
Filter(
Office365Users.DirectReportsV2(
MyProfile.id,
{'$select': "id,displayName,mail,userPrincipalName,jobTitle,accountEnabled"}
).value,
accountEnabled
)

See How to Get a User's Direct Reports in Power Apps.

Combining Conditions​

Several conditions separated by commas must all be true:

Example
Filter(RoleCompetencies, JobTitle = "Sales Engineer", IsActive)

The same as JobTitle = "Sales Engineer" && IsActive. For either-or, use || or Or.

Delegation: Filter on Big Lists​

With a data source such as SharePoint, Power Apps tries to send the filter to the source, so only matching rows come back. That's delegation. If the source can't run part of the condition, Power Apps only filters the first rows it downloads (500 by default) and shows a delegation warning. For SharePoint, simple comparisons such as JobTitle = "Sales Engineer" can be delegated; check Microsoft's list before using functions inside a filter on a large list.

Common Mistakes​

MistakeWhat happensDo this instead
Comparing to a value with different spacing or caseRows don't matchClean values first, for example with Trim
Ignoring a delegation warningResults are silently incomplete on big listsUse delegable conditions
Filtering a connector result without .valueAn argument type errorUse the table, such as DirectReportsV2(...).value

Troubleshooting​

SymptomLikely causeFix
No rows come backThe condition is never trueCheck a single row's value in the preview strip
Blue underline and a delegation warningPart of the condition can't be delegatedRewrite it with delegable operators
Rows missing on a big listNot delegated, so only the first rows were filteredFix the delegation warning

FAQ​

Does Filter change my data?​

No. It returns a new table and leaves the source as it is.

How do I get just one row?​

Use LookUp, which returns the first matching record.

Can I filter and sort?​

Yes: Sort(Filter(...), Column); see How to Sort a Table in Power Apps with Sort.

Conclusion​

Filter(table, condition) keeps the rows where the condition is true. Use the column name alone for yes/no columns, separate conditions with commas when all must match, and watch for delegation warnings on large lists.

Additional Resources​

Stay Updated

Subscribe to our newsletter for the latest tutorials, tech insights, and developer news.

By subscribing, you agree to our privacy policy. Unsubscribe at any time.