There are a couple of basic approaches you can follow.
The first is to simply store your data with a timestamp field, and then summarize it as needed for your reports, using aggregate queries.
The second approach is as you've defined - where you add tables to store summarized data.
How you approach this issue depends to a great extent, how you will be running your reports.
Your approach works best for situations where you will be running your reports often. It isolates your data storage from your reporting functions; you update the reporting data periodically, and it is accessed as a "snapshot."
It is NOT current data, however.
If you generate your reports not that often, it can be more effecient to simply generate the aggregate (summed/grouped) data as needed, when needed. However, summarizing data IS more time consuming (and server processor intensive) than simply viewing pre-summarized data.
Really, your chosen design will be a trade-off between storage size and processing time. If you think you may be storage constrained, you may wish to summarize the data on an Ad-Hoc basis. If you have plenty of disk storage, and you don't need to view "live" summarized data often, it may be better to summarize your data during off hours and update summary tables for later reporting.