>For reports with data grouping (subtotals), using a single report is more complicated, but I think it could be done, too. (For instance, copy the fields required for grouping to a separate field, using always the same fieldname for different grouping criteria).
If you have data grouping you can set up the data group with an expression of ... EVALUATE(lcMyGroup) ... where lcMyGroup is an expression that you can define in the program that calls the report. This way, you can set the expression to whichever sort order you are using. Depending on how the indexes are set, you may be able to use EVALUATE(KEY()) and not worry about a variable.
Cathy