shared variables is my solution, but running totals will work as well. DBlank is the master of running totals, and I am sure he will chime in.
for shared variables they tend to come in 3's (formulas)
1 to reset the counter to 0 (may be optional)
1 to increment(I would put it in with the suppression criteria...if it is not suppressed, increment you counters
1 for each variable to display the results
in order they look like:
shared numbervar aCount :=0;
"" //hides the output
shared numbervar aCount;
if (a is true) then aCount := aCount + {table.field};
""//hides the output (unless of course you want to see the running total
shared numbervar aCount;
aCount
Running totals will basically automate the above. I would assume that the offset (in this case) is that you already have logic to suppress, and you would need to repeat that logic so that the running total is accurate, whereas in this case, you could incorporate the incrementing in the logic that already exists (probably)
HTH