Fred,
First, if the resulting dataset is just one datatable (a join of customers and jobs), then you only need to issue one 'setdatasource' statement to Crystal.
But if you're passing a dataset with just one table (result of the join), keep in mind that when you design the report, you have to give Crystal a structure that's basically the same as what you'll pass to it at runtime. Again, that design-time structure could be an XML-generated dataset, or something from SQL Server, etc.
As for the sort order, the group by, etc...the sort order should be reflected in the dataset/datatable that you pass to Crystal.
As far as letting the users select fields to display, that gets a bit more complicated, and I'd need to know a little more details about your requirements. (It *can* be done with Crystal, but again I need to know a little more about that, and these other 10 parameters).
While Crystal can't do everything, in general it's definitely more powerful compared to the Access report Writer, though it may take some code to accomplish what you want it to do.
Kevin