Now that I've finally gotten this to work, this is how I did it. (I'm using 2012 but compatibility is 2008).
In all honesty, since I completely forgot how to do subreports (shameful, I know!), I watched the WiseOwl video on it. Well worth the watching, and super easy to follow. It can be found here.
First you create the outer report, for the Year(s).
SELECT DISTINCT YEAR(orderdate) AS OrderYear
FROM Sales.Orders
ORDER BY OrderYear
Then you create the subreport... this is the stored procedure I used... won't work unless you're using SQL Server 2008R2 at least.
CREATE PROC horizRunTotal AS
SELECT
orderDate
,DATEPART(QUARTER,orderDate) AS Qtr
,MONTH(orderDate) AS OrderMonth
,YEAR(OrderDate) AS OrderYear
,productid
,qty
, SUM(x.qty) OVER (PARTITION BY OrderMonth, ProductID
ORDER BY OrderYear, OrderMonth, ProductID
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as RunTotal
FROM
(SELECT
so.orderDate
,DATEPART(QUARTER,so.orderDate) AS Qtr
,MONTH(so.orderDate) AS OrderMonth
,YEAR(so.OrderDate) AS OrderYear
,sod.productid
,sod.qty
FROM Sales.Orders so INNER JOIN Sales.OrderDetails sod
ON so.OrderID = sod.OrderID) x
I'm cheating and using a dataset from Itzik Ben-Gan's TSQL 2012 windowing functions book[/url] (only because it's super simple and clear... unlike that AdventureWorks monstrosity).
If you don't have 2008R2, then you'll likely have to use one of the tricks on http://www.sqlauthority.com, like this one[/url].
Now that I've explained this backwards, ...
step 1 is from SQL Authority,
step 2, build the report/subreport.