From my experience you can do this with the "PREVGROUPVAL" and "PARENTGROUPVAL" functions with Custom Summary Formulas. My example code is below were I used it to calculate a 3 month rolling average for Average Booking Lead Time across a bucketed field. "BucketField_27501594" is my Product in your case.
If (NOT(Isnull(PREVGROUPVAL(Opportunity.Booking_Lead_Time__c:AVG, Opportunity.Date_of_RFS__c,2))) , (PREVGROUPVAL(Opportunity.Booking_Lead_Time__c:AVG, Opportunity.Date_of_RFS__c,2) + PREVGROUPVAL(Opportunity.Booking_Lead_Time__c:AVG, Opportunity.Date_of_RFS__c,1) + PARENTGROUPVAL(Opportunity.Booking_Lead_Time__c:AVG, BucketField_27501594, Opportunity.Date_of_RFS__c)) / 3, PARENTGROUPVAL(Opportunity.Concession_2_Rate__c:AVG, BucketField_95927130, Opportunity.QuotedDate__c)
)
Hope this help, it basically adds up the previous 2 months values and current and divides by 3 to display on that current month.