Query Blocks
How to build, configure, and customize live data tables inside a dynamic document.
A Query Block is a live data table embedded directly in the document. It queries event data (crew, activities, advances, requests, tasks, resources, files, orders, and more) and renders the results as a formatted table every time the document loads. The data is always current; there's no manual refresh and no export step.
Inserting a Query Block
Query Blocks are inserted using slash commands. Type / in the editor to open the command menu, then select the block you want to insert.
To insert a blank Query Block that you configure from scratch, use /data table.
Several pre-configured Query Blocks are also available as slash commands, each starting with a ready-to-use column set:
| Command | What it starts with |
|---|---|
/crew roster | Crew name, title, phone, company |
/activity schedule | Activity name, start time, end time, location |
/request summary | Request name, resource type, approval status, collaborator |
/advance overview | Advance name, collaborator, area |
/contact list | Crew name, title, email, filtered to points of contact |
Presets render immediately with their pre-configured columns. You can add columns, change filters, and adjust any setting after insertion. Presets are a starting point, not a fixed template.
Selecting a Source Entity
When a blank Query Block is inserted, the first thing you see inside the block is a Pick a Source prompt. This is where you choose which type of event data the block will query.
Available sources:
- Crew Members
- Collaborators
- Areas
- Activities
- Advances
- Requests
- Questions
- Resources
- Files
- Orders
- Tasks
Once you select a source, the block renders an empty table and waits for you to add columns.
Adding Columns
Columns are added through the Add Column picker, which opens directly inside the Query Block.
The picker starts by listing all direct properties of the selected source. Clicking any property adds it as a column immediately. Beyond direct properties, the picker also exposes navigations to related entities. For a Crew Members block, for example, you can navigate into the Collaborator that each crew member belongs to and add the collaborator's name as a column. The result is a single row per crew member that includes data from both entities, with no manual join required.
The picker uses stacked navigation rather than cascading flyouts. Clicking into a related entity transitions the menu to show that entity's properties, with a back button at the top to return to the previous level. Navigating through multiple levels of relationships works the same way: each level replaces the current one.
Supplemental columns are custom fields for data that doesn't exist in any entity. They appear at the bottom of the picker as + Custom Column. Supplemental columns can hold text, numbers, or checkboxes, and their values are filled in manually within the table. They're stored as part of the document itself, not in any underlying event entity. This is useful for annotations like channel assignments, confirmation flags, or any per-row context that's specific to this document.
Filtering
Filters are accessed via the Filter button in the Query Block toolbar. Click it, then Add Filter to create a filter rule.
Each filter rule has three parts: the property to filter on (selected through the same picker used for columns), the operator (is, is not, contains, is empty, and similar), and the value. For categorical fields, the value is selected from the available options. For date fields, it's a date picker. For text fields, it's free input.
To make a filter react dynamically based on a document variable rather than a fixed value, click the pin icon in the value area and select a variable. When a viewer sets that variable, the block re-queries using the bound value. This is what makes a single document layout work for multiple collaborators, areas, or dates.
Binding a filter to a variable is what makes a document reusable. A day sheet filtered to a specific collaborator variable works for every collaborator on the event. Change the variable, and the entire document updates.
Sorting and Grouping
Sort and Group controls sit alongside the Filter button in the block toolbar. Sorting applies a primary sort to the rows: pick a property and choose ascending or descending. Grouping organizes rows into labeled sections based on a shared property value, such as grouping requests by collaborator or activities by area.
Column Labels and Reordering
Column headers default to the property name, but you can give any column a custom label when adding it, for example labeling Collaborator.Name as "Company" for a cleaner table header. Columns can also be dragged to reorder them within the block.
How Queries Work
Every Query Block query is scoped to the current event automatically. There's no configuration needed to prevent data from other events from appearing. It's enforced at the query level before any filtering or selection runs.
When you navigate through the column picker (for example, clicking into Collaborator from a Crew block and selecting Name), the path you followed through the picker is what gets stored. The backend infers what to include and how to join the data from that path. You never define a join explicitly.