A project is a silo. Any single board is perfectly legible, and the question people actually ask — what is late across all forty, who is carrying too much, which client absorbs the most hours — needs all of them at once, which is exactly the shape Asana is not.
Imported projects are ordinary tables. Ask across them, group by assignee or section, total whatever you total, and keep the answer as a saved report rather than a spreadsheet somebody rebuilds each month.
The work is not attached to the thing the work is for. A project called “Harborline rollout” knows nothing about the Harborline contract, the invoice, the kit on site or the renewal date, so every cross-reference happens in somebody's head.
Link the imported tasks to your client, deal or asset records. Delivery and commercial finally sit in one place, which is the reason to do this at all rather than admiring a copy of your board.
Custom fields are per project and mostly per paid tier, so the field you need on every project either does not exist on half of them or is spelled differently on each.
Add the field once, to your own table, and it applies to everything in it. Nothing about it depends on which Asana plan the project was created under.
Reporting across projects means a monthly export, a pivot table, and a set of assumptions nobody wrote down. The number is stale the day it is produced and unreproducible the month after.
The report reads the tables directly and is current whenever it is opened. The assumptions live in the report's own filters, where somebody else can read and argue with them.