Yes, we have reports such as you're describing. Typically, these are a single table using a single dataset, and at run time, the user selects which fields from the dataset they wish to display.
1) Define a single dataset with all possible data columns.
2) Lay all fields out in a single table. This method does not permit reordering the table columns, but a more sophisticated approach could accomplish this need.
3) Create a multi-select parameter listing all possible columns for the end-user to select. I just hardcode the possible values in the parameter itself, but you could also drive this via a table if appropriate.
4) In each table column. set the visibility based on whether or not the value is selected in the parameter. Typically, I do this with a custom IF statement that checks if the column "name" (whatever I used in the parameter) is contained in the array of values selected by the user. If it is, show the column. If not hide it.
Now there are some caveats to this method:
* The dataset returns all columns but you only show some of them. This can cause a performance degradation, and in fact, we had to follow the method suggested by Jack in the previous reply and build two datasets -- one with common columns and the other with the less used.
* In SSRS 2005, the page width is greater than the original table. If you had columns, the table shrinks in width, but the page doesn't. This leaves lots of white space to the right of the table, which can be a problem with printing or export to PDF. I understand that SSRS 2008 has resolved this, but haven't had a change to verify yet.
* As I said above, the column order is fixed.
Hope this helps.