The user needs to find data that matches specific criteria within a large dataset. Filtering, in its simplest form, takes the shape of…
attribute “x” + logic “y” + value “z” = resulting subset of data.
Note of clarification
Filtering is the process of narrowing down a homogenous dataset by locating matching values within a defined attribute(s).
Search attempts to locate a search string amongst a heterogeneous set of data, usually without limiting the attributes searched.
Datasets can be presented in a number of formats: tables/grids, cards, cascading columns, topologies, dashboards, etc. The method of filtering should remain consistent regardless of the data’s format.
Tables often allow users to filter directly in the column header, unfortunately this introduces inconsistency in how a user performs filtering. If this filtering method is allowed, consideration must be given to how it aligns with the primary filtering pattern.
Attributes that are available to filter on may be limited technically, due to lack of access or excessive fetch times.
The number of attributes in a dataset may be large.
Applicable logic (e.g. contains, is not, greater than, etc.) and value format (strings, integers, binaries, etc.) varies between attributes.
The user may need to create complex filtering queries to return the results they seek.
The user must be kept informed of the state of the dataset they are looking at.
Filters should be visually prominent without overshadowing content.
Spatially, filters should imply they “own” the content being returned.
The user will likely want to save filtered states they return to often as “saved views”.
Context set by the filter state may need to be retained as the user moves from one screen of the application to another.
Filtering should be easy for novices to use, but have accelerators and allow for complex filtering to satisfy expert users.