Assumptions are: 1) users logon to differentiate themselves. I like to keep things simple. On the ad hoc reports users create I capture the form fields and their respective values and insert those into a reports database table, and only their last 5. However, I also allow the users to save an ad hoc report into a "saved" report table that they name and can then use/rerun on any subsequent visit. I also allow them to save the results of a run report so they can easily monitor changes in the data.
Not very complicated, but effective and the users like it.
Do you use one big reports table, or do you have a table for each report? Are you storing the report fields and values using WDDX, or some other way?
I use 2 tables to create the report. The first table holds the Values of the Report Name, Created by, Created date etc. and the tables to be used. The second table holds the field names of the table(s), and criteria/filter values (If any) from the specified tables. I store the values using the form values the report generation form.