Data tables
Filter, sort, group
Combine filter conditions, sort by multiple fields, group by any field.
Filter basics
Filters are the workhorse of every view. Open the Filter panel; each rule has three parts: field, operator, value. Rules chain with AND by default — wrap them in a group to switch to OR.
Rules apply live; there is no "Apply" button. Delete a rule via the × at the end of the row. For complex queries, prototype in a personal view, then promote once it survives a few days of use.
- AND / OR / NOT groups nest to any depth
- Date fields:
is today,last 7 days,next month,before 2026-01-01 - Number fields:
>,<,≥,between,is empty - Select fields:
is,is any of,is not,contains - Relation fields:
is linked to,is not linked to,linked count > - Checkbox fields:
is checked/is unchecked
Filter recipes
Common filter recipes, ready to copy. Kition serializes them to JSON inside the view config.
// "My open tasks due this week"
status is any of [Todo, In progress]
AND owner is "me"
AND due_date is in next 7 days
// "Stale leads we haven't touched"
stage is "Lead"
AND last_contact is before 30 days ago
// "P0 bugs without an owner"
priority is "P0"
AND owner is empty
AND status is not "Closed"Sort: multi-field priority
Sort by field; with multiple fields, top-to-bottom is priority. Example: priority descending, then due_date ascending — yields "P0 first, earliest due date within each priority".
Sort interacts with grouping: within a group, rules apply; between groups, default is lexicographic on the group value, but you can drag groups to reorder manually.
Group: collapse + aggregate
Group by any select, date, or number field. Each group header shows row count, collapses on click, and supports aggregates (numbers: sum, avg, min, max; any field: count, count unique, % filled).
Kanban is structurally a group-by-select view rendered horizontally — dragging a card to a new column writes the field value. Grid grouping is vertical and collapsible, better for reports like "tasks per owner".
// Reports config: tasks per owner this sprint
Filter: sprint is "2026-W12"
Group: owner
Sort: priority desc, due_date asc
Aggregate header:
count
sum(estimate_hours)
avg(score)Performance and limits
- Filter and sort run inside the table engine — well under a second for tables up to 50K rows
ai_fieldis not directly filterable — cache its output to atextcolumn and filter that- Filtering on
rolluptriggers a cross-table join; over 100K rows, add an index in Settings → Tables → Indexes - View state stores locally; in team vaults, shared views sync to every member