Views and Table Columns
The transaction tables in DocAI Fabric (Playground, My Work Queue, Evaluation, and Memory) can be tailored to each team and each role. Two building blocks make this possible:
- Custom columns add project-wide columns that show extraction field values or transaction metadata.
- Views save a column layout together with a filter as a named tab above the table, and assign it to the roles that should see it.
Together they let a project designer or supervisor prepare focused work lists, so reviewers open their page and immediately see the right transactions with the right columns, without configuring anything themselves.
Who can do what
Creating and managing views and custom columns is controlled by the permission grant project.configure_transaction_view.
| Capability | Who |
|---|---|
| Create, edit, and delete project views; assign them to roles; add or remove custom columns | Users with the project.configure_transaction_view grant. Among the built-in roles these are Admin, Designer, and Supervisor. Custom roles can be given the grant too. |
| Create and manage their own personal views | Everyone. No grant is needed to save a view that only you can see. |
| Use project views | Everyone. Each user sees the tabs whose audience includes one of their roles, plus the built-in All tab. |
| Adjust their own current tab | Everyone. Any user can show or hide columns, reorder them, change sorting, and apply filters on top of their active tab. These tweaks are personal, affect nobody else, and the Reset action returns the tab to its saved state. |
Views are a convenience, not a security boundary. Which transactions a user can see is always governed by their data visibility permissions, regardless of any view.
Views
A view is a named tab above the table that combines:
- a column layout: which columns are visible, their order, and sorting;
- a filter: filter bar settings and/or an advanced filter expression;
- an audience: the roles that see the tab;
- optional defaults: the roles that land on this tab when they open the page.
Every page also has a built-in All tab that shows everything and cannot be edited.
Project views and personal views
Views come in two kinds, and the tab strip marks the difference with a small person icon.
Project views are part of the project. They are shared with the roles in their audience, they travel with the project when it is exported, imported, or copied from the shared library, and they are versioned along with the rest of the project configuration. Managing them requires the project.configure_transaction_view grant.
Personal views belong to one user. Nobody else sees them, they are never part of the project, and anyone can create them. Use one when you want a saved slice of the table for yourself without changing what the team sees. You can mark one personal view per page as your landing tab, and it takes precedence over the project default for you alone.
If you have the grant, you can turn one of your personal views into a project view with Share with the project. That copies it into the project, so you keep your own tab as well, and the copy starts visible to everyone with no role default until you set one.
Each user can keep up to 30 personal views per project.
Views and publishing
My Work Queue serves the published project views, the same way it runs the published extraction and rule configuration. Editing a project view for that page changes the draft, and the change reaches everyone when you publish the project.
Until then the tab strip shows you your own draft, marked Draft views, so what you just saved is what you keep looking at. One click on that badge switches to Published views, what reviewers see right now, and switching either way loads that set's saved columns and filter.
The other pages, Playground, Memory, and Evaluation, are design-time pages, so they always show the draft views and changes take effect at once.
Personal views never wait for a publish. They apply as soon as you save them.
Saving your changes: Save and Save as
Arrange the table first, then decide what to do with the arrangement. Hide a column, sort differently, add a filter, and the tab you are on gets a small dot: your changes are on screen but not saved into the view yet. Open the small ▾ button on that tab and choose:
- Save to my view keeps the arrangement for you alone. On one of your own tabs it saves in place, and the item names it: Save to "Mine". On a shared tab it makes you a copy of that view, named the same but yours, and moves you onto it. Everyone gets this item, whether or not they can change shared views. It is the first item because adjusting a table for your own convenience is what most changes are.
- Save as new view… keeps the current state as a new view. Give it a name, and if you can manage shared views, choose whether it is yours alone or shared with the project. It starts on Only me, so a new view is private unless you say otherwise. You land on the new tab. The + tab next to the tabs does the same thing.
- Discard changes throws the changes away and puts the tab back to what is saved.
- Update shared view… writes the current columns and filter into the shared view itself, so everyone in its audience gets them. It sits below the separator, with a line saying who receives it, and asks you to confirm before it happens. It only appears if you are allowed to change that view.
There is no separate editor asking what a view should contain: a view contains whatever the table looked like when you saved it.
On the My Work Queue page, changing a shared view goes into the project draft and reaches reviewers when the project is next published, which may be a publish somebody else makes. The confirmation says so. If you only want the arrangement for yourself, use Save to my view and nothing about the shared view changes.
Your unsaved changes are kept per tab, so you can move between tabs, or leave the page and come back, and find each one as you left it. The dot tells you a tab still has changes that are yours alone.
If the view changes while you have unsaved changes on it, the tab says so: "My Open Work" changed since your edits, with two answers. Take the update throws your changes away and shows the view as it now is. Keep mine keeps your arrangement and stops asking. This matters because your unsaved changes sit on top of the view and hide it, so without the notice a column your supervisor added to a shared tab would never appear for you.
Unsaved changes follow you between machines. Arrange a tab on your desktop and it is still arranged when you open the same tab on a laptop, without having to save it into a view first. It is still unsaved work: nobody else can see it, and Discard changes removes it everywhere, not just on the machine you are sitting at. If the same tab was arranged in two places, the most recent arrangement wins, and whatever you are typing right now always wins over one that arrives from elsewhere.
Column widths are always yours. Dragging a column edge sets the width for you alone, on that tab. A width is never part of a view, so it does not raise the dot, it is never saved into a shared view, and discarding your changes leaves it where you put it. To start over, use Reset to View in the column menu, which also restores the default widths.
Renaming, reordering, and deleting
The same ▾ menu carries everything else about the view: rename it, choose who sees it and who lands on it, move it left or right, share a personal view with the project, or delete it. The role pickers only offer roles that can actually open the page the view belongs to, so you cannot assign a Playground view to a role that will never see the Playground.
Views are set up on the page they belong to. A view is mostly a column layout, and each page has its own columns, so to configure the My Work Queue tabs you open My Work Queue.
A useful detail for personal work lists: the filter value @me on the Assignee field always resolves to whoever is looking at the table. A single shared view filtered on Assignee = @me shows each reviewer their own work.
Every project starts with a seeded My Open Work view on the My Work Queue page: not-completed transactions that are assigned to the viewer or unassigned. It is a normal view and can be edited or removed. Projects created before this view was renamed still show it as My Work.
Example: two review steps
Suppose a project has two review steps, "Data Check" and "Final Approval", handled by different people, with a supervisor overseeing both. One way to set this up:
- Create custom roles for the reviewers, for example "Data Check Reviewer" and "Final Approval Reviewer", each with review permissions scoped to its step. Role and review-step scoping are managed in user administration.
- On the My Work Queue page, create a view per step:
- "Data Check" with filter
Step = Data Check AND Assignee = @me OR unassigned, audience and default: Data Check Reviewer. - "Final Approval" with filter
Step = Final Approval, audience and default: Final Approval Reviewer. Give each view the columns that step needs, for example amount and vendor columns for the data check, and an approval-status column for the final step.
- "Data Check" with filter
- Create supervisor views on the same page:
- one view per step (audience: Supervisor) to inspect each queue;
- an "Urgent" view across all steps, for example
Priority = high AND Status != completed, audience and default: Supervisor.
Each reviewer now opens My Work Queue and lands on their own step's tab with a tailored column set. The supervisor gets per-step tabs plus an urgent-work overview. Nobody has to build filters by hand.
Custom columns
Beyond the built-in columns (status, step, priority, and so on), users with the manage grant can add two kinds of project-wide columns. Both are available on every table page, can be sorted, and can be used in filter expressions and views.
To add one, open the column menu on any table header and choose Manage columns, or ask the AI assistant.
Field columns
A field column shows values of extraction fields, for example an invoice number or a total amount. The values are indexed from extraction results, and existing transactions are backfilled automatically when the column is created.
One column can read several fields, so a single heading covers the per-class equivalents of the same thing: a "Document Number" column can read Invoice Number on invoices and Contract Number on contracts. When more than one field has a value, the column either shows the first non-empty value or all values, depending on the combine setting you choose.
Each field column adds indexing work for every processed transaction and loading work for every table page. A handful of well-chosen columns works well; promoting a large share of your extraction fields to columns will slow the tables down. Metadata columns are much cheaper, because their values already live on the transaction record.
Metadata columns
A metadata column shows a transaction metadata value by key, for example a customer name or an order id supplied by the system that submitted the transaction. Like field columns, one metadata column can read several keys with the same fallback-or-show-all behavior. Metadata columns need no backfill and add no processing cost.
Four email columns are ready-made. Every project already has Email Subject, Email From, Email Received At and Email Attachments Count, filled in automatically on transactions imported by an email connector. They are hidden by default, so switch them on in the column menu (or in Manage Columns) when a project works with email. Once shown, they sort, filter and save into views like any other column. If you would rather define your own column on one of these keys, for example to combine it with another key or to rename it, just add it: your column replaces the ready-made one.
You do not have to remember the key names. The key box suggests:
- In your transactions: the keys present in the transactions currently listed, whatever put them there (an import connector, an API upload, a Transform step). Internal processing state, such as which step a transaction is waiting on, is left out.
- The import connectors: the keys each connector writes, even before the first transaction arrives. Email connectors, for example, write Subject, From, To, Cc, Received, Priority, Attachments and Message ID, and every import also records which connector and source type it came from.
Picking a suggestion fills in a readable column name, such as "Received" rather than email_received_at, which you can then change. Any key can still be typed by hand.
Click a metadata column's header to sort by it, exactly like a built-in column. How it sorts is set by the column's value type, described below.
A column reads whatever the transaction carries. An email column stays empty on transactions that did not come from email, so on a project with several sources it is worth keeping such columns hidden in the views where they do not apply.
Value types
Field and metadata columns hold text as it arrives, which is rarely how you want to read it: sorted alphabetically, 10 comes before 2, and a delivery date reads as a raw timestamp. Give the column a value type and it sorts, displays and filters the way the values actually mean.
Pick the type in Manage Columns, in the same dialog where you create or edit the column.
| Type | Sorts by | You can filter with |
|---|---|---|
| Auto (default) | numbers when every value in the column is a number, otherwise alphabetically | is, is not, contains, starts with, ends with, is empty |
| Text | always alphabetically, ignoring case | the same as Auto |
| Number | the value, so 2, 9, 10 rather than 10, 2, 9 | greater than, less than, at least, at most, between |
| Date and Date and time | the point in time, whatever shape the value has | before, after, on or before, on or after, between |
| Yes / No | No before Yes | is, is not |
Auto covers most columns without any setup, which is why it is the default. Set a type when you want the column to answer a range question: "invoices over 10,000", "received in the last week". Those operators only appear on Number and Date columns, because they cannot be answered for text.
Values that do not fit are never hidden. A Number column showing "n/a" keeps showing "n/a", and sorts those rows after the ones that do hold numbers, before the empty ones. The same goes for a date that cannot be read.
Dates: standard timestamps, including the ones email connectors record, are recognized on their own. If your values look like 31/07/2026, choose the matching date format in the dialog, because 03/07/2026 could be March or July and the wrong guess would silently reorder the column.
Numbers: the column can show a fixed number of decimals, and thousands grouping is off by default so a reference number stays 100704 rather than becoming 100,704. Number columns are right-aligned in the table.
Two notes on changing a type later. It applies to everyone, since columns are project-wide. And if a saved view filters the column in a way the new type cannot answer, for example "contains" on a column that is now a Number, that rule is adjusted to the closest equivalent or removed, so no tab is left with a filter that cannot run.
The email columns come ready-typed: Email Received At is a date, Email Attachments Count is a number.
Filtering on any column
The advanced filter (the funnel button next to the search box) builds filter expressions over every table column: the built-in ones, field columns, and metadata columns. Expressions support and/or groups, and work the same way in saved views. This applies to all four table pages.
The operators on offer follow the column's value type, so a Number or Date column can be compared with greater than, at most or between, while a text column gets contains and starts with. Built-in columns are typed already: dates are dates, counts and durations are numbers.
Using the AI assistant
The assistant can do everything described on this page. For example:
- "Show me only failed transactions and hide the status column" adjusts your current tab.
- "Create a view for reviewers with unassigned and my open work, and make it their default" creates and assigns a saved view.
- "Share my Urgent tab with the project and give it to supervisors" copies one of your personal views into the project.
- "Add a Document Number column that reads Invoice Number on invoices and Contract Number on contracts" creates a multi-source field column.
- "Add a column with the customer_name metadata key" creates a metadata column.
- "Make the order total sort by amount, not alphabetically" sets that column's value type to Number.
Changes that affect other users, such as creating views or columns, still require the manage grant and are confirmed with you before they are applied.