Занятие 1. Добавление параметров для фильтрации отчетов по дате (службы SSRS)
Включив в запрос для отчета параметры для начальной и конечной даты, можно указать временной диапазон, который ограничит данные, получаемые из источника данных. Также можно создать дополнительные параметры для фильтрации данных после их получения из источника данных.
В ходе этого занятия к отчету будут добавлены параметры @StartDate и @EndDate, чтобы ограничить данные, получаемые из источника данных. Параметры отчета StartDate и EndDate будут созданы автоматически и добавлены в панель «Данные отчета». Параметры учитывают регистр символов. Параметры запроса начинаются с символа @, в отличие от параметров отчета.
В качестве типа данных параметров будет установлен DateTime. При этом на панели инструментов средства просмотра отчетов появится элемент управления «календарь» вместе с текстовым полем параметра. Будут заданы значения для параметров по умолчанию, чтобы отчет мог выполняться автоматически. И наконец, будет создан параметр отчета DayofWeek, не привязанный к параметру запроса. Он будет использован для фильтрации данных после их получения из источника данных.
Прежде чем приступать к работе с данным учебником, необходимо сначала пройти предыдущий учебник, Учебник Создание простого табличного отчета.
Открытие существующего проекта сервера отчетов
Нажмите кнопку Пуск, выберите пункт Все программы, затем Microsoft SQL Server 2008 R2, а затем выберите пункт Среда Business Intelligence Development Studio.
В меню Файл выберите пункт Открыть, а затем Проект или решение.
Нажмите Tutorial и выберите Tutorial.sln. Этот проект был создан в разделе Учебник Создание простого табличного отчета.
Чтобы открыть проект, нажмите кнопку ОК. В обозревателе решений будет отображен проект Tutorial с одним отчетом, имя которого Sales Orders.rdl.
Примечание Если окно обозревателя решений не видно, в меню Вид выберите команду Обозреватель решений.
Преобразование внедренного источника данных в общий источник данных
В панели «Данные отчета» щелкните правой кнопкой мыши источник данных AdventureWorks и выберите команду Преобразовать в общий источник данных. В Обозреватель решений будет добавлен источник данных с именем AdventureWorks.rds.
В панели «Данные отчета» щелкните правой кнопкой мыши источник данных AdventureWorks и выберите Свойства набора данных.
В поле Имя введите AdventureWorks_Ref.
Нажмите кнопку ОК.
Замена существующего набора данных
В панели «Данные отчета» щелкните правой кнопкой мыши набор данных AdventureWorksDataset и выберите пункт Свойства набора данных.
Примечание Если панель «Данные отчета» не видна, в меню Вид выберите пункт Данные отчета.
Убедитесь, что в списке Источник данных выбран набор данных AdventureWorks_Ref.
Убедитесь, что в списке Тип запроса выбран тип Текст.
Нажмите кнопку Конструктор запросов, чтобы открыть конструктор запросов.
Текст в текстовом поле необходимо заменить на следующий текст запроса:
SELECT soh.OrderDate AS [Date], soh.SalesOrderNumber AS [Order], pps.Name AS Subcat, pp.Name as Product, SUM(sd.OrderQty) AS Qty, SUM(sd.LineTotal) AS LineTotal FROM Sales.SalesPerson sp INNER JOIN Sales.SalesOrderHeader AS soh ON sp.BusinessEntityID = soh.SalesPersonID INNER JOIN Sales.SalesOrderDetail AS sd ON sd.SalesOrderID = soh.SalesOrderID INNER JOIN Production.Product AS pp ON sd.ProductID = pp.ProductID INNER JOIN Production.ProductSubcategory AS pps ON pp.ProductSubcategoryID = pps.ProductSubcategoryID INNER JOIN Production.ProductCategory AS ppc ON ppc.ProductCategoryID = pps.ProductCategoryID GROUP BY ppc.Name, soh.OrderDate, soh.SalesOrderNumber, pps.Name, pp.Name, soh.SalesPersonID HAVING (ppc.Name = 'Clothing' AND (soh.OrderDate BETWEEN (@StartDate) AND (@EndDate)))
Этот запрос идентичен предыдущему, но к нему было добавлено условие с двумя ограничивающими параметрами:
AND (soh.OrderDate BETWEEN (@StartDate) AND (@EndDate))
На панели инструментов нажмите кнопку Выполнить (!). Откроется диалоговое окно Определение параметров запроса для ввода значений параметров.
Введите два значения, чтобы увидеть отфильтрованный результирующий набор.
В столбце Значение параметра введите значение для параметра @StartDate,, например 1/31/2001.
В столбце Значение параметра введите значение для параметра @EndDate, например 1/31/2003.
Нажмите кнопку ОК.
Результирующий набор будет содержать отфильтрованный набор данных с заказами, относящимися к 2001 и 2002 годам.
Дважды нажмите кнопку ОК. В панели «Данные отчета» отображаются поля набора данных. Следует также заметить, что параметры отчета, StartDate и EndDate, будут созданы автоматически и добавлены в узел «Параметры».
После задания параметров запроса для отчета, нужно изменить тип данных параметров отчета, чтобы они соответствовали типу данных в источнике данных. По умолчанию используется тип Text, который соответствует типу String большинства источников данных. Если данные источника — числовые, логические или типа даты и времени, нужно изменить тип данных параметра отчета.
Изменение типа данных и значений по умолчанию для параметра отчета
В панели «Данные отчета» разверните узел «Параметры» и дважды щелкните StartDate. Откроется диалоговое окно Свойства параметра отчета.
Убедитесь, что имя параметра — StartDate , а запрос на его введение — Start Date.
В списке Тип данных выберите Дата-время.
Нажмите кнопку ОК.
В панели «Данные отчета» дважды щелкните EndDate. Проверьте значения имени и запроса на введение.
В списке Тип данных выберите Дата-время.
Нажмите кнопку ОК.
Нажмите кнопку Просмотр. Оба параметра, StartDate и EndDate, появятся на панели инструментов вместе с элементом управления «календарь». Элементы управления «календарь» появляются автоматически, если параметр имеет тип данных Date/Time, а список допустимых значений не определен. Если список допустимых значений задан, вместо календаря появится раскрывающийся список значений.
Введите значения параметров для запуска отчета.
В текстовом поле параметра StartDate введите дату 1/31/2001.
В текстовом поле параметра EndDate введите дату 1/31/2003.
Нажмите кнопку Просмотреть отчет. Отчет содержит только те записи, даты которых попадают в рамки значений параметров отчета.
После создания параметров отчета можно создать для этих параметров значения по умолчанию. Параметры по умолчанию позволяют выполнять отчет автоматически. В противном случае для выполнения отчета пользователю необходимо ввести значения параметров.
Задание значений параметров по умолчанию
В представлении конструктора, в панели «Данные отчета» разверните узел «Параметры» и дважды щелкните StartDate. Откроется диалоговое окно Свойства параметра отчета.
Нажмите кнопку Значения по умолчанию.
Выберите параметр Задание значений. Появится кнопка Добавить и пустая сетка Значение.
Нажмите кнопку Добавить. В сетку параметров добавится пустая строка.
Щелкните текстовое поле Значение и удалите находящийся там текст (Null).
Введите 1/31/2001. Нажмите кнопку ОК.
На панели конструктора отчета и дважды щелкните EndDate.
Нажмите кнопку Значения по умолчанию.
Выберите параметр Задание значений.
Нажмите кнопку Добавить.
Введите 1/31/2003. Нажмите кнопку ОК.
Нажмите кнопку Просмотр. Отчет будет выполнен незамедлительно, поскольку для всех параметров были заданы значения по умолчанию.
Добавление в запрос нового поля для фильтрации
Переключитесь в режим конструирования.
Щелкните правой кнопкой мыши набор данных AdventureWorksDataset и выберите пункт Свойства набора данных. В конструкторе запросов замените существующий запрос следующим:
SELECT soh.OrderDate AS [Date], DATENAME(weekday, soh.OrderDate) as Weekday, soh.SalesOrderNumber AS [Order], pps.Name AS Subcat, pp.Name as Product, SUM(sd.OrderQty) AS Qty, SUM(sd.LineTotal) AS LineTotal FROM Sales.SalesPerson sp INNER JOIN Sales.SalesOrderHeader AS soh ON sp.BusinessEntityID = soh.SalesPersonID INNER JOIN Sales.SalesOrderDetail AS sd ON sd.SalesOrderID = soh.SalesOrderID INNER JOIN Production.Product AS pp ON sd.ProductID = pp.ProductID INNER JOIN Production.ProductSubcategory AS pps ON pp.ProductSubcategoryID = pps.ProductSubcategoryID INNER JOIN Production.ProductCategory AS ppc ON ppc.ProductCategoryID = pps.ProductCategoryID GROUP BY ppc.Name, soh.OrderDate, soh.SalesOrderNumber, pps.Name, pp.Name, soh.SalesPersonID HAVING (ppc.Name = 'Clothing' AND (soh.OrderDate BETWEEN (@StartDate) AND (@EndDate)))
В запросе определяется дополнительный вычисляемый столбец для дня недели, в который была осуществлена продажа. Для этого в инструкцию SELECT добавлена следующая команда:
DATENAME(weekday, soh.OrderDate) as Weekday.
Нажмите кнопку «Выполнить» (!). Откроется диалоговое окно Определение параметров запроса.
В столбце Значение параметра введите значение для параметра @StartDate,, например 1/31/2001.
В столбце Значение параметра введите значение для параметра @EndDate, например 31.01.2003.
Нажмите кнопку ОК. В результирующем наборе должен появиться новый столбец с именем Weekday.
Дважды нажмите кнопку ОК. В области данных отчета убедитесь, что Weekday является полем.
(Необязательно) Форматирование даты в табличных данных, которые будут отфильтрованы
Перейдите на вкладку Конструктор.
Щелкните правой кнопкой ячейку с выражением для поля [Date] и выберите параметр Свойства текстового поля.
Щелкните Число, а затем в поле Категория выберите Дата.
В поле Тип введите «31 января 2000 года, понедельник».
Нажмите кнопку ОК.
Добавление нового параметра отчета
В представлении конструктора, в панели «Данные отчета» нажмите кнопку Создать и выберите Параметр. Откроется диалоговое окно Свойства параметра отчета.
В поле «Имя» введите DayoftheWeek.
В текстовом поле Запрос введите День недели для фильтрации:
Убедитесь, что поле типа данных содержит значение Text.
Нажмите кнопку Значения по умолчанию.
Выберите параметр Задание значений. Появится кнопка Добавить и пустая сетка Значение.
Нажмите кнопку Добавить.
Введите пятница.
Нажмите кнопку ОК.
Задание фильтра таблицы с выражением параметра
В представлении конструктора щелкните правой кнопкой мыши маркер строки или столбца таблицы и выберите Свойства табликса.
Примечание Область данных таблицы представляет собой шаблон, основанный на области данных табликса.
Перейдите на вкладку Фильтры. Появится пустая сетка фильтра.
Нажмите кнопку «Добавить». В сетку параметров добавится пустая строка.
Из раскрывающегося списка в поле Выражение выберите [Weekday].
Убедитесь, что в качестве параметра Оператор установлен знак равенства (=).
Нажмите кнопку выражения (fx) рядом с текстовым полем Значение. Откроется диалоговое окно Выражение.
В поле «Категория» нажмите Параметры. В панели «Значения» появится текущий список параметров. Дважды щелкните DayoftheWeek. Выражение параметра успешно добавлено в текстовое поле выражения. Теперь в текстовом поле «Выражение» появится следующее выражение: =Parameters!DayoftheWeek.Value.
Нажмите кнопку ОК. Снова нажмите кнопку OK для выхода из диалогового окна Свойства табликса.
Теперь фильтр для таблицы настроен на сравнение значения в поле Weekday со значением параметра DayoftheWeek. Например, при вводе на панели инструментов отчета значения Пятница для параметра DayoftheWeek обработчик отчетов обрабатывает только те строки таблицы, в поле Weekday которых содержится значение Пятница.
Нажмите кнопку Просмотр. Отчет запускается автоматически, поскольку все параметры имеют значения по умолчанию. Таблица отображает только значения, попавшие во временной интервал с StartDate по EndDate и выпавшие на пятницу.
Следующие шаги
Были определены параметры запроса и отчета, установлены значения параметров по умолчанию и задан фильтр для таблицы. Следующее занятие посвящено созданию списка доступных, или допустимых, значений параметра. См. раздел Занятие 2. Добавление параметров для создания списка доступных значений (службы SSRS).
См. также