A schedule is a live query with an editable result set. If you think in SQL, the mapping is almost exact — and thinking of it that way makes the dialog obvious.
The mapping
| Schedule tab | SQL |
|---|---|
| Category (in the New Schedule dialog) | FROM |
| Fields | SELECT |
| Filter | WHERE |
| Sorting/Grouping | ORDER BY / GROUP BY |
| Itemize every instance (unchecked) | GROUP BY collapse |
| Calculated value | a computed column |
| Formatting → Calculate totals | SUM() |
Fields
The Fields tab lists available parameters. More is available than you'd expect:
- Instance parameters of the category
- Type parameters of the category (marked as such)
Count— a virtual field, essential when not itemizing- Fields from related elements — the
Select available fields fromdropdown lets a door schedule pullRoom: Name, or a wall schedule pullPhase Created. This is the closest thing Revit has to a join, and it's underused. - Project information fields
- Calculated values and percentages
If a parameter isn't listed, it's not on that category. Go add it as a project or shared parameter first.
Multi-category and other special schedules
- Multi-Category schedule — schedules across every category at once. Only shows parameters common to all of them (mostly shared parameters). The right tool for a furniture-and-equipment schedule spanning several categories.
- Material Takeoff — schedules the materials inside elements, with area and volume per material layer. This is how you get "total m² of gypsum board" rather than "number of walls".
- Sheet List — schedules sheets. Your drawing index.
- View List — schedules views. An excellent QC tool: filter to views with no sheet number to find orphans, or check that every view has a view template.
- Note Block — schedules annotation symbols. Used for general-note systems.
- Graphical Column Schedule — the structural one. Different beast entirely.
Filters
Up to a handful of rules, ANDed (and in recent versions, with And/Or options).
The two operators worth knowing beyond the obvious:
has a value/has no value— the QC workhorse. Filter tohas no valueon a required parameter and every row is a to-do.contains/does not contain— for text parameters where naming conventions encode meaning (RB-EXT-...).
Filters can only use fields you've added to the Fields tab in some Revit versions — if a filter dropdown is missing a parameter, add it as a field first (you can hide the column afterwards in Formatting).
Sorting/Grouping
- Up to four sort keys.
- Header per group inserts a title row. Footer inserts a summary row —
combined with
Calculate totals, that's subtotals per group. - Blank line between groups, for readability on a sheet.
- Grand totals at the bottom.
- Itemize every instance — unchecked collapses identical rows into one. With a
Countfield, that's your quantity schedule.
Formatting
Per-column: heading text (override the parameter name), orientation, alignment, field formatting (units and rounding independent of project units), and:
- Calculate totals — sum for numbers, and for a
Countfield. - Hidden field — keep the field for filtering/sorting but don't show the column. Essential.
- Conditional formatting — colour cells by rule. Underused; excellent for QC schedules where you want problems to be visually obvious.
Calculated values
Fields → Calculated Value. A formula over other fields, without adding a parameter to
the model.
Name: Area per Occupant
Type: Area
Formula: Area / OccupancyUnits are enforced exactly as in family formulas:
Area / Number → Area ✔ into an Area parameter
Area / Number → Area ✘ into a Number parameter
Area / Number / 1 SF → unitless ✔ into a Number parameter
Length * Length / 1 SF → unitless ✔The / 1 SF (or / 1 m²) division to cancel units is the standard idiom. It looks
wrong and it's correct.
Percentage is a separate option on the same dialog — it computes each row as a percentage of its group or of the total. Use it rather than hand-rolling a formula.
Key schedules
New Schedule → Schedule keys. A schedule of presets.
- Create a key schedule for Rooms, name the key
Room Style. - Add fields for the things a style controls: Floor Finish, Base Finish, Wall Finish, Ceiling Finish, Ceiling Height.
- Add rows:
Office,Corridor,Restroom,Open Office. Fill in their values. - On any room, set
Room Style = Office.
Every field in the key now populates on that room automatically and becomes
read-only on the element. Change the Office row once and every office updates.
This is the correct way to manage finishes, and it generalizes: door hardware sets, wall assemblies by type code, equipment specification groups. Any time you're typing the same set of values repeatedly, you want a key schedule.
Note the constraint: a key schedule's fields become read-only on the instance. If you need a per-room exception, either add a separate non-key parameter for it, or don't use a key for that field.
Editing the model from a schedule
Type into a cell and the model changes. This is not a report — it's a data grid over the model.
Consequences:
- Bulk data entry is vastly faster in a schedule than by selecting elements.
- Sorting first, then filling down, lets you enter data in a sensible order.
- Selecting a row and clicking
Highlight in Modeljumps to the element in a view. - Deleting a row deletes the element. Which is how you clean up unplaced rooms, and also how you delete 40 doors by accident. Read the confirmation.
- Read-only fields (type parameters shown in an instance schedule, key-driven fields, computed values like Area) can't be edited — Revit greys them.
Schedules as an audit tool
The use case almost no tutorial covers. Build these and never put them on a sheet:
| QC schedule | Finds |
|---|---|
| Rooms, sorted by Area ascending | Unenclosed rooms (0 or blank) and unplaced rooms |
Any category, filtered [required param] has no value |
Missing data, row by row |
| Generic Models, itemized | Content modelled in the wrong category |
| Walls, not itemized | Duplicate/near-duplicate types — a standards problem |
| Walls, with Area and Volume totals | Absurd values from bad top constraints |
| View List, filtered to no Sheet Number | Orphan views |
| View List, showing View Template | Views not under template control |
| Sheet List with Revision fields | Sheets missing from a revision |
| Doors, showing Mark, sorted by Mark | Duplicate marks |
| Material Takeoff by material | Materials nobody meant to use |
Ten minutes of this finds more than an hour of clicking around a model. Pair it with
Manage → Warnings and you have a genuine model-health review.
Putting a schedule on a sheet
Drag it from the Project Browser onto a sheet. Then:
- The Appearance tab controls fonts, grid lines, and whether the title shows.
- A schedule too long for one sheet gets split: drag the break control (the small Z-shaped handle) at the bottom, and drag the new column beside the first. It stays one schedule.
- Column widths are dragged on the sheet, not in the schedule view.
Rows: Blank row before dataand the header/footer options from Sorting/Grouping are what make it look like a real drawing-set schedule rather than a spreadsheet dump.
Exporting
File → Export → Reports → Schedule writes a delimited text file, with options for
whether to include grouping headers and how to quote.
It's crude. It is also, nine times out of ten, exactly what somebody wanted when they asked for "the model data" — reach for it before you reach for Dynamo or the API.