I think the sub will execute for each group section--whether or not it returns results, so the number of subs is the distinctcount of the group field. To then determine what percentage are not blank, you need to use a shared variable in the subreport footer:
whileprintingrecords;
shared numbervar ID := maximum({table.ID});//some recurring unique ID field
In the main report group header_a section (with the sub in GH_b), add a reset formula:
whileprintingrecords;
shared numbervar ID := 0;
In the main report group footer section, add a formula:
whileprintingrecords;
shared numbervar ID;
numbervar cnt;
if ID <> 0 then
cnt := cnt + 1;
Then in the report footer, use a formula like this:
whileprintingrecords;
numbervar cnt;
cnt % distinctcount({table.groupfield})
-LB