There's been several iterations of reporting in Pega.
Early on, the thinking was to separate the list of columns (Rule-Obj-List) from the criteria definitions.
I think some variation of this idea might have merit.
My experience tells me that there's two main pieces of a report: the Source, and the Display.
The Source includes the class/joins, columns, & calculations (e.g., the SQL call, minus the paging)
The Display includes, the criteria values, paging size, output type (e.g., chart), column order/visibility. (As it is, currently the paging size *can't* be customized by the user)
When calling the report programatically, only the Source would be needed, not the display.
Many different Displays could re-use the same Source.
Typically a user will customize the Display for their own queries.
Without this customization, user need to SaveAs the whole report, and as such the Source part of the report would be duplicated. Any changes any of the Source fields (e.g., adding properties to the request)
One possible way to achieve this is to create a subclass of Report-Definition which allows certain aspects of the report to be inherited from a specified Report.