Filter
Build precise table filters with column actions, AND/OR connectors, and bracketed groups.
Filtering narrows a table to the records that match a condition. XPortal gives you a quick search, a filter control inside each column header, and a full Filter editor for combining conditions.
Search and Filter solve different problems
Use search when you want a quick text lookup across the table. Use Filter when you need an explicit rule such as “Status is Active”, “Created after a date”, or “Program contains Health”. Use the Filter button when more than one condition must work together.
The three ways to narrow a table
| Control | Best for | How it behaves |
|---|---|---|
| Search | A quick lookup | Searches the table's searchable fields using a text query |
| Column filter | One condition on one column | Creates one self-contained Column → Action → Value unit |
| Filter | Several conditions or grouped logic | Builds a left-to-right chain of conditions with AND/OR and brackets |
The table updates only when the condition is complete and valid. An unfinished value is not a reliable filter and should be completed or removed before you interpret the results.
Search
Use the search field at the top of a table when you are looking for a name, identifier, email address, or another piece of text quickly.
Search is useful for discovery, but it is intentionally broad. It does not explain the rule that produced the result as clearly as a structured filter does. When another person needs to repeat your work, or when the result will be exported, use the Filter control and leave the condition visible.
Filter one column from its header
Each supported column has a small filter button in its header. The button is usually hidden until you hover over or focus the column header, as shown in the table reference.
Create the Column → Action → Value unit
-
Move your pointer over the column header. The column actions become visible.
-
Select the small filter button with the funnel icon.
-
XPortal exposes a single filter unit for that column:
Column → Action → Value
-
Choose the action, such as contains, equals, is any of, after, or between.
-
Enter or choose the value. For some actions, no value is needed, such as is empty, is not empty, is true, or is false.
-
Review the active filter indicator and the rows returned by the table.
The column header unit is intentionally small and focused. It represents one condition for one column. It does not provide a place to add another condition beside it, and it does not let you chain header conditions with AND or OR in the header itself.
When the header filter is the right choice
Use it when the question is simple:
- First Name contains “Sam”
- Status is “Active”
- Created At after 1 January 2026
- Outstanding Balance greater than 0
- Orientation Completed is false
When the question involves multiple columns, return to the table's Filter button.
Build a combined filter with the Filter button
The Filter button opens the full filter editor. It is the place to combine several Column → Action → Value units into one query.
Add a condition
- Select Filter in the table toolbar.
- Select Add filter.
- Choose the column you want to use.
- Choose the action for that column.
- Enter the value or values required by that action.
- Select Add filter again to add another condition.
The editor lays the conditions out as a chain. After the first condition, each condition has a connector that you can set to AND or OR.
AND and OR
- AND means both sides must match.
- OR means either side may match.
For example:
Status is Active AND Program contains Health
returns students who are active and whose program contains “Health”.
Status is Active OR Program contains Health
returns students who are active, students whose program contains “Health”, or students who match both.
The connector belongs to the condition that follows it. Read the chain from left to right so you can see how each new condition joins the result already built.
How evaluation order works
XPortal evaluates an ungrouped filter chain from left to right. It does not automatically give every AND higher precedence than every OR.
Let:
- A = Status is Active
- B = Location is Brisbane
- C = Orientation Completed is true
This chain:
A OR B AND C
is evaluated as:
(A OR B) AND C
The result of A OR B is created first, then C is applied to that result. If your intended meaning is different, use brackets rather than relying on the reader to infer your intention.
Group expressions with brackets
The Filter editor lets you group adjacent filter units so that the group is evaluated first. This is the filtering equivalent of putting parentheses around part of a mathematical expression.
Example: change the meaning of a chain
Suppose you want:
Show students who are active, or who are in Brisbane and have completed orientation.
The intended expression is:
A OR (B AND C)
To build it:
- Add Status is Active.
- Add Location is Brisbane and set its connector to OR.
- Add Orientation Completed is true and set its connector to AND.
- Select Group filters.
- Select the adjacent Location and Orientation Completed units.
- Select Wrap in brackets.
- Confirm that the editor now shows the group around
B AND C. - Select Apply filters.
The resulting expression is A OR (B AND C), not (A OR B) AND C.
Grouping rules
- You must select at least two filter units.
- The selected units must be adjacent in the chain.
- The bracketed group is evaluated before it joins the surrounding chain.
- You can remove a group by selecting either bracket.
- The Filter editor supports nested groups where the filter structure allows them.
- Grouping does not change the meaning of a condition; it changes when that condition is evaluated.
Do not skip the brackets when meaning matters
“Active or Brisbane, and orientation complete” can produce a different result from “active, or Brisbane and orientation complete”. If the business rule contains the word “and” inside an “or” rule, group the inner expression and check the brackets before applying the filter.
Choose the right action for the data type
The middle cell in the filter unit is the Action menu. It is not a free-text instruction: XPortal chooses the available actions from the column's data type, so the action and the value editor always agree.
The seven column data types
XPortal currently defines seven filter data types. Integer, decimal, currency, and percentage are number display formats, not separate filter types; they use the same numeric actions.
| Data type | What the column contains | Value editor you may see |
|---|---|---|
| String | Free-form text such as names, emails, IDs, and addresses | Text, list of text values, or no value for presence actions |
| Enum | One choice from a finite set such as status, gender, or salutation | One option or several options from a list |
| Boolean | A true/false fact such as orientation completed | No value: choose true or false in the Action menu |
| Number | A numeric value such as balance, count, percentage, or duration input | One number, a list, a range, or a target plus tolerance |
| Date | One calendar date such as created date or commencement date | An absolute date, preset date, relative date, or date range |
| Date range | A span with a start and end, such as a deferment or enrolment period | Date, date range, or duration |
| Multiple values | Several values stored in one field, such as tags or selected subjects | One value, a list of values, a set, or a count |
The same action label can appear for different data types but still mean something type-specific. For example, between on a number checks a numeric interval; between on a date checks a calendar interval; and duration between on a date range checks the length of the span.
String actions
String columns hold free-form text. Text matching follows the column's matching settings, which can include case sensitivity, trimming surrounding whitespace, accent sensitivity, and a fuzzy similarity threshold.
Comparison
| Action | What it means | Example |
|---|---|---|
| equals | The complete cleaned text is exactly the value entered. | First Name equals Aisha |
| does not equal | The complete cleaned text is not the value entered. Empty values are not treated as a match; use is not empty when presence is the actual question. | Campus does not equal Brisbane |
Text
| Action | What it means | Example |
|---|---|---|
| contains | The column contains the entered text anywhere. | Email contains @example.edu |
| does not contain | The column does not contain the entered text. | Notes does not contain withdrawn |
| starts with | The column begins with the entered text. | Last Name starts with Mc |
| does not start with | The column does not begin with the entered text. | ID does not start with TEMP- |
| ends with | The column ends with the entered text. | Email ends with .edu.au |
| does not end with | The column does not end with the entered text. | Phone does not end with 0000 |
Pattern matching
| Action | What it means | Example |
|---|---|---|
| matches regex | The value matches the regular expression you enter. Use this when the matching rule itself is a pattern. | Student ID matches regex ^S-\d{4}$ |
| does not match regex | The value fails to match the regular expression. An invalid expression does not produce a useful match. | Code does not match regex ^TEST- |
| matches wildcard | The complete value matches a wildcard pattern. * represents any number of characters and ? represents one character. | Email matches wildcard *@example.edu |
| does not match wildcard | The complete value does not match the wildcard pattern. | ID does not match wildcard TEMP-* |
| fuzzy matches | The value is similar enough to the target according to the similarity threshold. This is useful for likely spelling variations, not for exact reporting. | Name fuzzy matches Jonathon |
| does not fuzzy match | The value is below the similarity threshold for the target. | Name does not fuzzy match Jonathon |
Lists
| Action | What it means | Example |
|---|---|---|
| is one of | The complete column value equals at least one item in the entered text list. | Student ID is one of S-1001, S-1002 |
| is not one of | The complete column value does not equal any item in the entered text list. | Campus code is not one of TEMP, TEST |
Length
Length actions compare the number of characters in the column after the configured whitespace handling is applied.
| Action | What it means |
|---|---|
| length equals | Character count is exactly the entered number. |
| length does not equal | Character count is different from the entered number. |
| length greater than | Character count is greater than the entered number. |
| length greater than or equal | Character count is at least the entered number. |
| length less than | Character count is less than the entered number. |
| length less than or equal | Character count is at most the entered number. |
| length between | Character count falls inside the entered lower and upper bounds, using the selected inclusive or exclusive boundaries. |
Presence
| Action | What it means |
|---|---|
| is empty | The column has no value. |
| is not empty | The column has a value, regardless of the value's text. |
Enum actions
Enum columns use a controlled list of options. Choose the option shown by XPortal rather than typing a spelling variation. This is the usual type for statuses, salutations, genders, locations, and other finite choices.
Selection
| Action | What it means | Example |
|---|---|---|
| is | The column has exactly the selected option. | Status is Active |
| is not | The column does not have the selected option. Empty values are not a substitute for a real enum value. | Status is not Withdrawn |
| is any of | The column has at least one of the selected options. | Status is any of Active, Pending |
| is none of | The column has none of the selected options. | Status is none of Withdrawn, Completed |
Presence
Enum columns also support is empty and is not empty. Use these when the question is whether an option has been recorded, not which option it is.
Boolean actions
Boolean columns represent a yes/no fact. The action itself supplies the value, so the Value cell does not need a separate input.
| Action | What it means | Example |
|---|---|---|
| is true | Keep rows whose normalized value is true. | Orientation Completed is true |
| is false | Keep rows whose normalized value is false. | Is International is false |
| is empty | Keep rows where no boolean value has been recorded. | Orientation Completed is empty |
| is not empty | Keep rows where some boolean value has been recorded. | Orientation Completed is not empty |
is false and is empty are different. A missing answer is not the same as a recorded false answer.
Number actions
Number columns can be formatted as integer, decimal, currency, or percentage, but all four use the numeric action menu. The formatting changes how the value is displayed; it does not change the comparison rules.
Comparison
| Action | What it means | Example |
|---|---|---|
| equals | Numeric value is exactly the target number. | Outstanding Balance equals 0 |
| does not equal | Numeric value is different from the target number. | Course Count does not equal 0 |
| greater than | Numeric value is above the target; the target itself is excluded. | Balance greater than 100 |
| greater than or equal | Numeric value is at least the target; the target itself is included. | Attendance greater than or equal 80 |
| less than | Numeric value is below the target; the target itself is excluded. | Age less than 18 |
| less than or equal | Numeric value is at most the target; the target itself is included. | Attempts less than or equal 3 |
| approximately equals | Numeric value is within the entered tolerance of the target, inclusive. For example, target 100 with tolerance 5 matches 95 through 105. | Amount approximately equals 100 ± 5 |
Range
| Action | What it means |
|---|---|
| between | Numeric value falls inside the lower and upper bounds. Each boundary can be inclusive or exclusive. |
| not between | Numeric value falls outside the selected numeric range. |
Lists
| Action | What it means |
|---|---|
| is one of | Numeric value exactly matches at least one number in the list. |
| is not one of | Numeric value does not match any number in the list. |
Presence
Number columns support is empty and is not empty. A zero is a value, so it is not empty.
Date actions
Date columns represent one calendar date. XPortal evaluates dates in the application's configured Australia/Brisbane date context and lets you use absolute dates, named presets, or relative dates.
Calendar date
| Action | What it means | Example |
|---|---|---|
| is on | Date is exactly the selected calendar date. | Commencement Date is on 1 July 2026 |
| is not on | Date is different from the selected calendar date. | Created At is not on 1 July 2026 |
| before | Date is earlier than the selected date; the selected date is excluded. | Completion Date before 1 July 2026 |
| on or before | Date is earlier than or equal to the selected date. | Due Date on or before 1 July 2026 |
| after | Date is later than the selected date; the selected date is excluded. | Created At after 1 July 2026 |
| on or after | Date is later than or equal to the selected date. | Start Date on or after 1 July 2026 |
| between | Date falls inside the selected start and end dates, using the selected boundary settings. | Start Date between 1 July and 31 July |
| not between | Date falls outside the selected date range. | Created At not between 1 January and 31 March |
Relative date
| Action | What it means | Example |
|---|---|---|
| in last N | Date falls from today back through the selected number of days, weeks, months, quarters, or years. | Created At in last 7 days |
| not in last N | Date does not fall in that trailing period. | Created At not in last 7 days |
| in next N | Date falls from today forward through the selected period. | Graduation Date in next 30 days |
| not in next N | Date does not fall in that upcoming period. | Graduation Date not in next 30 days |
| more than N ago | Date is earlier than the boundary calculated by subtracting the selected period from today. | Created At more than 12 months ago |
The date picker also provides presets such as today, yesterday, tomorrow, the start or end of this week, month, quarter, or year.
Presence
Date columns support is empty and is not empty. A missing date is not matched by a comparison such as not on; use is not empty when presence is what matters.
Date-range actions
Date-range columns contain a start and end date. These actions compare the stored span with a date or another span.
Range relationship
| Action | What it means | Example |
|---|---|---|
| overlaps | At least one day of the stored range intersects the target range. | Deferment overlaps July |
| does not overlap | The stored range has no intersection with the target range. | Enrolment does not overlap the holiday period |
| contains date | The stored range includes the target date. | Enrolment contains date 15 July |
| does not contain date | The stored range does not include the target date. | Deferment does not contain date 15 July |
| contains range | The stored range fully contains the target range. | Enrolment contains range 1–15 July |
| does not contain range | The stored range does not fully contain the target range. | Enrolment does not contain range 1–15 July |
| is contained by range | The stored range sits fully inside the target range. | Class is contained by range 1–31 July |
| is not contained by range | The stored range is not fully inside the target range. | Class is not contained by range 1–31 July |
| entirely before | The stored range ends before the target range begins. | Deferment entirely before 1 July |
| entirely after | The stored range begins after the target range ends. | Deferment entirely after 31 July |
Start date
These actions compare only the start of the stored range:
| Action | What it means |
|---|---|
| starts on | Start date equals the target date. |
| starts before | Start date is earlier than the target date. |
| starts on or before | Start date is earlier than or equal to the target date. |
| starts after | Start date is later than the target date. |
| starts on or after | Start date is later than or equal to the target date. |
| starts between | Start date falls inside the target date range. |
End date
These actions compare only the end of the stored range:
| Action | What it means |
|---|---|
| ends on | End date equals the target date. |
| ends before | End date is earlier than the target date. |
| ends on or before | End date is earlier than or equal to the target date. |
| ends after | End date is later than the target date. |
| ends on or after | End date is later than or equal to the target date. |
| ends between | End date falls inside the target date range. |
Duration
Duration actions compare the length of the stored range. The available units are days, weeks, months, and years.
| Action | What it means |
|---|---|
| duration equals | Range lasts exactly the entered duration. |
| duration does not equal | Range lasts a different duration. |
| duration greater than | Range lasts longer than the entered duration. |
| duration greater than or equal | Range lasts at least the entered duration. |
| duration less than | Range lasts less than the entered duration. |
| duration less than or equal | Range lasts at most the entered duration. |
| duration between | Range duration falls within the lower and upper duration bounds, with selectable boundary inclusion. |
Presence
Date-range columns support is empty and is not empty. Use these when the range itself has not been recorded or has been recorded, regardless of its length.
Multiple-value actions
Multiple-value columns store a set or list inside one field. XPortal normalizes the individual values before comparing them, so the actions below are about membership in that set, not about substring matching across the whole display string.
Membership
| Action | What it means | Example |
|---|---|---|
| contains | Set contains the one entered value. | Subjects contains Mathematics |
| does not contain | Set does not contain the one entered value. | Tags does not contain inactive |
| contains any of | Set contains at least one value from the entered list. | Subjects contains any of Math, English |
| contains none of | Set contains none of the entered values. | Tags contains none of archived, test |
| contains all of | Set contains every value from the entered list. | Subjects contains all of Math, English |
| does not contain all of | Set is missing at least one value from the entered list. | Subjects does not contain all of Math, English |
Set comparison
| Action | What it means |
|---|---|
| exactly equals set | Set contains exactly the entered values: no missing values and no additional values. |
| does not exactly equal set | Set differs from the entered set by at least one value. |
Item count
Count actions compare the number of distinct normalized values in the set:
| Action | What it means |
|---|---|
| count equals | Set contains exactly the entered number of values. |
| count does not equal | Set contains a different number of values. |
| count greater than | Set contains more values than the entered number. |
| count greater than or equal | Set contains at least the entered number of values. |
| count less than | Set contains fewer values than the entered number. |
| count less than or equal | Set contains at most the entered number of values. |
| count between | Set contains a number of values inside the selected lower and upper bounds. |
Presence
Multiple-value columns support is empty and is not empty. An empty set is different from a set containing one value.
What appears in the Value cell
The Action determines the kind of control that appears in the third cell:
| Action needs… | What appears in Value |
|---|---|
| No operand | Nothing to enter. The action itself is the test, as with is empty or is true. |
| One text value | A text input. |
| Several text or number values | A list editor or text area for multiple values. |
| One enum option | A single-choice option list. |
| Several enum options | A multi-select option list. |
| One number | A numeric input using the column's format. |
| A number range | Lower and upper bounds plus inclusive/exclusive boundary controls. |
| An approximate number | Target and tolerance inputs. |
| One date | A date picker or date preset. |
| A date range | Start and end date operands. |
| A relative date | Amount plus unit, such as 30 days. |
| A duration | Amount plus unit, such as 6 months. |
| A duration range | Lower and upper duration bounds plus a unit. |
If the Value cell says Set value…, the filter is not ready. Complete it before applying the filter.
How “not” actions treat missing values
For most data types, a missing value is not treated as a successful not equals, does not contain, or other negative comparison. Use is empty or is not empty when you need to include or exclude missing values deliberately. This keeps “different from X” separate from “not provided”.
Enter values carefully
Text values
Text filters can expose matching options such as case sensitivity, trimming surrounding whitespace, accent sensitivity, and fuzzy similarity. Use the simplest matching option that answers the question. Regex, wildcard, and fuzzy matching are powerful, but they can return more records than a simple contains or equals action.
Lists and status values
For a status or another finite list, select the canonical option rather than typing a variation. Use is any of when several values are acceptable and is none of when they should all be excluded.
Numbers and ranges
For a range, enter a lower bound, an upper bound, or both. Check whether each boundary is inclusive or exclusive. For example, “at least 10” includes 10, while “greater than 10” does not.
Dates
Absolute dates answer questions about a known calendar date. Relative dates answer questions that should move with time, such as “in the next 30 days” or “in the last 3 months”. Use a relative action for a recurring work queue so you do not have to edit the date every morning.
Apply, clear, and review filters
The full Filter editor keeps changes as a draft while you work:
- Select Apply filters to apply the complete chain to the table.
- Select Cancel to close the editor without applying the draft changes.
- Select Clear all to remove the filters in the editor.
- Use the active filter count on the Filter button as a reminder that the table is restricted.
- Review the table after applying filters; a correct expression can still return zero rows if no records match it.
When you open a previously configured filter, review the column, action, value, connectors, and brackets as one expression. Changing one part can change the result substantially.
Filter checklist
- Are you filtering the correct page, organisation, and row type?
- Did you choose the correct column rather than a similarly named field?
- Does the action match the value type?
- Does the value use the exact status or option required?
- Should the next condition use AND or OR?
- Does the expression need brackets?
- Did you apply the filter after reviewing the whole chain?
- If you export next, did you check the resulting row count and visible columns? See Export.