Sounds like you might need to use GetSummary() instead since your summary is not breaking.
Something like: GetSummary(Contact Sum ; Contact Name) * .15
The magic of summary fields breaks down when they are used in calculations. If you put your summary field and your calc field side by side and produce a summary report you’ll see that the summary field displays the correct values for each summary part. The calc field displays the correct value for the entire found set. The calc field has to be regarded as a global field, it produces the same result for each record and each summary part. Frustrating isn’t it?
You are really trying to obtain a weighted average, which is supported by summary fields. If you add a number field , e.g., “commission”, and populate it with the appropriate amount then you can produce a weighted average.
In each line item you could have a calc that multiplies Earnings by .15. Then create a summary field that totals this calc. Use this new summary field in both the reports that sort by name and date.