- Archive
- /
- Attribute Import
- /
- The Dry-Run Report
The Dry-Run Report
Explains how the Dry-Run Report previews import changes, highlights mismatches between spreadsheet and folder data, and provides a detailed audit before running the actual import.
The final wizard step — Step 6 — is named Dry run for a reason. No data is sent to Forma until you click Run import. Until then, the screen and the downloadable XLSX show you exactly what would change and exactly where the spreadsheet and the folder disagree. That's two reports in one: an import preview, and a stand-alone MIDP audit you can use even if you never run the import.
What Goes Into the Dry Run
Building the preview makes one read-only pass over your data:
- List every file in the destination folder, recursively.
- For each spreadsheet row, find the matching file (exact, then stripped name).
- Read existing custom-attribute values for matched files.
- For each cell that would be written, classify it as
apply,skip, orerror. - Compute coverage in both directions: rows-without-files (orphaned rows) and files-without-rows (orphaned files).
Nothing is created, renamed, or written. You can run the dry run as many times as you want — it's free.
Reading the On-Screen Preview
MIDP Coverage Hero
A large percentage at the top:
Your spreadsheet covers N of M files in this folder.
This is the inverse of "what's missing from your MIDP." If 60% of files in the folder have no row in the spreadsheet, that's a significant audit finding regardless of whether the import is correct.
Counter Pills
| Pill | What it counts |
|---|---|
| Matched rows | Rows whose match-key value found exactly one file in the destination. These are the ones that will (potentially) write. |
| Orphaned rows | Spreadsheet rows whose value didn't match any file. Reasons: typo, file in a different folder, file deleted, blank match cell. |
| Ambiguous rows | Rows whose match-key value matched ≥2 files. Resolved by making the source value more specific, or by narrowing the destination folder. |
| Files not in sheet | Files in the destination folder that no row references. The reverse of the MIDP. |
| Cells to apply | Total writes the run would perform — sum of every (matched row × applicable mapping) that passes policy and coercion. |
Attribute Coverage Table
Per-mapping summary. See Mapping columns to attributes for how to read each column.
Row Details
Expand Show row details to see one row per spreadsheet entry, with each cell tagged apply / skip / error and a reason on hover.
For multi-sheet imports, a sheet filter sits above the table. Click a sheet name (or All) to filter rows from just that source.
New Attributes Confirmation
If any column maps to a brand-new custom attribute, a blue confirmation panel lists each one. You must tick the checkbox for every attribute before the Run import button enables — this is a deliberate guard against accidentally polluting a project's attribute schema.
Warnings
If anything went wrong building the preview (a sheet had no rows at the chosen header position, an attribute name collides with an existing one, etc.) the warnings list is rendered in amber above the counters. They don't block the run but are worth reading.
The 9-Sheet XLSX Report
Click Download report (XLSX) to get the full preview as an Excel workbook. This is what you'd hand to a teammate, attach to a discipline sign-off, or archive against a stage gate. It's identical to the on-screen preview except all rows are included — there's no row cap.
The file is named attribute-import-dry-run_yyyymmdd-HHmm.xlsx.
| # | Sheet | Contents |
|---|---|---|
| 1 | Summary | Source file, sheet(s), project, folder, generated timestamp; the MIDP-coverage % rendered large; counter table for matched/orphaned/ambiguous/files-not-in-sheet/cells-to-apply/cells-to-skip/cells-with-error/new-attributes-pending. |
| 2 | Will apply | One row per (spreadsheet row × cell that would write). Cols: Row #, File name, Attribute, Source value, Coerced value, Existing value (and Sheet, when multi-sheet). |
| 3 | Skipped | Cells that would skip. Adds a Reason column: already populated, skip policy, or blank source. |
| 4 | Errors | Cells whose value couldn't be coerced. Cols: Row #, File name, Attribute, Source value, Reason. |
| 5 | Orphaned rows | Spreadsheet rows whose match-key value didn't find any file. Full row contents preserved (every header → cell value). |
| 6 | Ambiguous matches | Rows that matched ≥2 files. Cols: Row #, File name, Candidates (semicolon-joined paths). |
| 7 | Files not in spreadsheet | The reverse direction — ACC files in the folder that no row references. Cols: File name, Folder path, plus current value of every mapped attribute. |
| 8 | Attribute coverage | The on-screen coverage table, one row per mapping. |
| 9 | New attributes | Attributes that would be created on Run. Cols: Header, Attribute name, Type, Allowed values. |
Every data sheet has bold headers, a frozen header row, and auto-filter on every column.
You can run the dry run, download the XLSX, and never click "Run import." That's a perfectly valid workflow for monthly MIDP audits where you only want the gap report — not the write.
Using the Report as a Stand-Alone MIDP Audit
A common pattern at the BIM-manager level:
- Get the latest MIDP from the document controller.
- Run it through the import wizard against the live ACC folder.
- Don't click Run — download the XLSX.
- Send Sheet 5 (Orphaned rows) and Sheet 7 (Files not in spreadsheet) back to the document controller as a punch list of MIDP corrections.
- Re-run after corrections to show the coverage % moving up.
You can do this at any cadence — pre-deliverable check, monthly audit, RIBA-stage gate — without making any changes to Forma. The XLSX is your evidence.
What Happens When You Click "Run Import"
Once you're satisfied with the dry run, Run import kicks off the live run. Foreman:
- Creates any new attributes you confirmed.
- Extends allowed-value lists on existing list/dropdown attributes if you opted in.
- Reads existing values for files whose mappings use Fill blanks only.
- Iterates the source rows, writing per-file in batches.
A live progress dialog tracks Applied / Skipped / Failed counters, the current file, and any recent errors. Cancel at any point — the run stops gracefully and is recorded.
After the run completes, the History tab gives you the full audit trail. See Import history and saved mappings for details.
Audit Logging
Both downloads and runs are recorded in your tenant's audit log:
AttributeImport.DryRunReportDownloaded— every report download. Records source file, project, folder, and the same counts that appear on the summary sheet.AttributeImport.Executed— every successful run. Records source file, applied/skipped/failed counts, attributes created.
Org admins can see these from the Activity page if member-visible audit logging is enabled.