This approach really works very well.
You do not know what your data / metadata is, but the concepts can be explained with a simple example. Consider the following data:

We will create a simple report based on this, grouped by the grp column:

Sorting groups by sum val, from highest to lowest:

To get the current rank and total, we use the RunningValue function.
To get a group rating, use:
=RunningValue(Fields!grp.Value, CountDistinct, Nothing)
To get the total usage:
=RunningValue(Fields!val.Value, Sum, Nothing)
Finally, we need to display the total for Top N values; in this case I show the top 2.
For the second line of group details, use the following Row Visibility expression:
=IIf(RunningValue(Fields!grp.Value, CountDistinct, Nothing) = 2, false, true)
That is, only this line is shown when there were two groups, i.e. top 2. You could change the value as needed.
This shows us one common line if required:

You need to apply these concepts to your data. If you still have problems, I suggest trying to reproduce my results with the above data / code to make sure you understand all the concepts involved.
Edit after comment:
In situations where the number of groups is less than N, but you want to display the last total number, you need to add an additional check to the expression on the top line of the Row Visibility line , for example:
=IIf(RunningValue(Fields!grp.Value, CountDistinct, Nothing) = 10 or (RunningValue(Fields!grp.Value, CountDistinct, Nothing) = CountDistinct(Fields!grp.Value, "DataSet1") and CountDistinct(Fields!grp.Value, "DataSet1") < 10) , false , true)
So, now the expression will display for the 10th row, or if the total number of groups in the DataSet is less than 10, it will be displayed for the last group.
It is a bit more complicated, but in the past it worked for me; Depending on your data and reporting settings, you may need a little Scope to get it working in your environment.