The issue that your experiencing is the evaluation time of the variable. You probably have Whileprintingrecords as the evaluation time.
This means that variable is only evaluated when the report prints hence you cannot subtotal it.
Using Subreports you are normally forced to use whileprintingrecords.
A solution to your problem is to have a subreport to have a subreport to calcuate the subototal and another subreport to calculate the grand total. (Not nice, but works well.. all be it slow)
Other than that, the only possibilty is to get the database to summarise the information you want. This can either be done at the database via a View, or with version 9, modify the SQL to simulate the view.
Cheers
Fred