Вот краткий пример.
ПРИМЕЧАНИЕ: Я использую образец базы данных AdventureWorks здесь ..
Сначала мы создадим подотчет. Это будет стандартный отчет, но в нашем случае он даст результаты только за один месяц. В этом примере я передаю только номер месяца в качестве параметра, но, очевидно, вам может потребоваться изменить его, чтобы передать год и / или другую информацию.
Я создал новый отчет с именем Month Sub Report
Я создал два наборы данных, которые дадут мне продажи по лицам и продажи по территориям за тот же месяц. Я использовал следующие запросы:
-- query for dsSalesByPerson
select MONTH(OrderDate) as MonthNumber, SalesPersonID, p.LoginID , SUM(TotalDue) as Amount
from Sales.SalesOrderHeader s
join HumanResources.Employee p on s.SalesPersonID = p.BusinessEntityID
where datepart(yy, OrderDate) = 2013
and MONTH(OrderDate) = @MonthNumber
GROUP BY MONTH(OrderDate), SalesPersonID, p.LoginID
-- query for dsSalesByTerritory
select MONTH(OrderDate) as MonthNumber, t.Name as Terrotory , SUM(TotalDue) as Amount
from Sales.SalesOrderHeader s
join sales.Customer c on s.CustomerID = c.CustomerID
join sales.SalesTerritory t on c.TerritoryID = t.TerritoryID
where datepart(yy, OrderDate) = 2013
and MONTH(OrderDate) = @MonthNumber
GROUP BY MONTH(OrderDate), t.name
Примечание Оба они используют одно и то же имя параметра с ТОЧНЫМ написанием, включая регистр. При создании наборов данных параметр будет создан автоматически. Если имя одинаково для обеих баз данных, будет создан только 1 параметр, который нам нужен.
Затем я добавил две простые таблицы и текстовое поле, похожее на заголовок (реальные заголовки не работают в вложенные отчеты)
Окончательный дизайн выглядел следующим образом.
Когда я запускаю вложенный отчет, я получаю что-то вроде этого.
Сохраните и закройте этот дизайн отчета ....
Затем создайте новый отчет, в этом примере я назвал его Month Master Report
.
Я создал набор данных с именем dsMonths
со списком месяцев в (MonthNumber и MonthName), который мы будем использовать в нашем основном параметре отчета, чтобы позволить пользователям выбирать месяцы, о которых они хотят сообщить.
Я установил доступные значения, чтобы они указывали на наш запрос набора данных dsMonths, и установил его, чтобы разрешить множественные значения (оставьте тип в виде текста)
Далее создайте другой набор данных с именем dsMain
. Запрос для этого набора данных должен возвращать уникальный список номеров месяцев из вашей базы данных, поэтому он может выглядеть примерно так:
select DISTINCT MONTH(OrderDate) as MonthNumber
from Sales.SalesOrderHeader s
where datepart(yy, OrderDate) = 2013
and MONTH(OrderDate) IN (@Months)
ORDER BY MONTH(OrderDate)
Примечание: Здесь мы используем IN, так как передаем список @Months in.
Затем вставьте таблицу
Установите для свойства Набор данных таблицы значение dsMain
Затем удалите строку заголовка и все столбцы, кроме 1 .
На вашем столе должна остаться только одна ячейка. В этой ячейке щелкните правой кнопкой мыши и вставьте вложенный отчет.
Щелкните правой кнопкой мыши заполнитель вложенного отчета и выберите свойства.
Установите вложенный отчет, который использовался в качестве ранее созданного вложенного отчета (т. Е. * 1062). *)
Перейдите на вкладку параметров и нажмите «Добавить». Выберите «MonthNumber» из раскрывающегося списка и поля monthnumber из выпадающего списка значений.
Далее дважды щелкните «(Подробно ) "группа строк nuder главного окна дизайна, нажмите" Разрывы страниц "и выберите" Между каждым экземпляром "
НАКОНЕЦ! Переместите таблицу в верхний левый угол страницы и прогуляйте тело отчета, чтобы вокруг него не было много места (или это может вызвать неожиданные разрывы страниц)
Когда мы запускаем отчет и выбираем несколько месяцев мы получаем следующее, с каждым выбранным месяцем на новой странице (я только показываю последнюю страницу на этом изображении)
Надеюсь, что это будет дать вам достаточно, чтобы решить вашу проблему.