Hi Jeff,
Not sure if this is a best practice but you can summarize all levels using a retreive from database and the aggregate list function. The combination of using the retrieve and the aggregate list function will do an xpath sum function and wont return all objects to memory. So if you database allows it, you can write an xpath constraint for VP, Regional VP, Sales Director, and Sales rep which all result in you counting sales.
So if I were you I wouldnt summarize summaries, I would always summarize sales records.
Hope this helps!
My advise would be to create seperate entities where you aggregate all the data. This way when analyzing you do not retrieve the real data but always work with the seperate created entities and thus not slowing the application. Most of time these overviews can do some heavy data retrievals and if you do that on the actual data that might have some performance drawbacks for the application itself.
Regards,
Ronald