Skip to content

Filter Rows

Transform

Remove rows that don’t match your conditions. Define one or more condition groups — rows pass if they match ALL conditions in ANY group (AND within groups, OR across groups). Use it to clean data, extract subsets, or focus on specific segments before further processing.

Filter Rows evaluates each row against your conditions and keeps only the rows that pass. It processes data one row at a time (streaming), so it works efficiently even on large files.

Conditions are organized into groups. Within a group, all conditions must be true (AND logic). Across groups, any group passing is enough (OR logic). This lets you express rules like “keep rows where status is ‘active’ AND region is ‘US’” or more complex filters like “(status is ‘active’ AND region is ‘US’) OR (status is ‘pending’ AND amount > 1000)”.

If no conditions are defined, all rows pass through unchanged.

Input: One tabular data connection. Output: The same columns, with non-matching rows removed.

Each group contains one or more conditions. Add multiple groups to create OR logic.

Each condition specifies a column, an operator, and (for most operators) a comparison value.

OperatorDescriptionRequires Value
equalsExact string matchYes
not equalsPasses when the cell does not match the valueYes
containsSubstring match (case-sensitive)Yes
not containsPasses when the cell does not contain the valueYes
greater thanNumeric comparison: cell > valueYes
less thanNumeric comparison: cell < valueYes
greater than or equalsNumeric comparison: cell ≥ valueYes
less than or equalsNumeric comparison: cell ≤ valueYes
is emptyPasses when the cell is empty, null, or undefinedNo
is not emptyPasses when the cell has any valueNo

You have a user list and want to extract rows where the status column is “active”.

Before:

nameemailstatus
Alice[email protected]active
Bob[email protected]inactive
Carol[email protected]active
Dave[email protected]pending

Configuration: One group with one condition — column: status, operator: equals, value: active.

After:

nameemailstatus
Alice[email protected]active
Carol[email protected]active

You want to exclude rows where the email column is empty.

Before:

nameemailrole
Alice[email protected]admin
Bobuser
Carol[email protected]user

Configuration: One group with one condition — column: email, operator: is not empty.

After:

nameemailrole
Alice[email protected]admin
Carol[email protected]user

You want to keep orders above $500 OR orders from VIP customers, regardless of amount.

Before:

customeramounttier
Acme Corp250standard
Beta Inc750standard
Gamma LLC100vip
Delta Co50standard

Configuration: Two groups:

  • Group 1: column amount, operator greater than, value 500
  • Group 2: column tier, operator equals, value vip

After:

customeramounttier
Beta Inc750standard
Gamma LLC100vip
  • All comparisons are string-based except the numeric operators (greater than, less than, greater than or equals, less than or equals), which parse both the cell and the comparison value as numbers. If either side can’t be parsed as a number, the condition fails for that row.
  • contains is case-sensitive. “Active” does not match a condition value of “active”. To do case-insensitive matching, add a Computed Column that lowercases the field first, then filter on that.
  • Empty string vs. null. The is empty operator matches empty strings, null, and undefined. The equals operator with an empty value matches only empty strings, not null.
  • No conditions = passthrough. If you add a Filter Rows node but don’t define any conditions, all rows pass through unchanged. This is intentional — it lets you set up the node and configure it later without breaking the flow.