Занятие 1. Добавление параметров для фильтрации отчетов по дате
Включив в запрос для отчета параметры для начальной и конечной даты, можно указать временной диапазон, который ограничит данные, получаемые из источника данных. Также можно создать дополнительные параметры для фильтрации данных после их получения из источника данных.
В ходе этого занятия к отчету будут добавлены параметры @StartDate и @EndDate, чтобы ограничить данные, получаемые из источника данных. Параметры отчета StartDate и EndDate будут созданы автоматически и добавлены в область «Данные отчета». Параметры учитывают регистр символов. Параметры запроса начинаются с символа @, в отличие от параметров отчета.
В качестве типа данных параметров будет установлен DateTime. При этом на панели инструментов средства просмотра отчетов появится элемент управления «календарь» вместе с текстовым полем параметра. Будут заданы значения для параметров по умолчанию, чтобы отчет мог выполняться автоматически. И наконец, будет создан параметр отчета DayofWeek, не привязанный к параметру запроса. Он будет использован для фильтрации данных после их получения из источника данных.
Прежде чем приступать к работе с данным учебником, необходимо сначала пройти предыдущий учебник, Учебник Создание простого табличного отчета.
Открытие существующего проекта сервера отчетов
Нажмите кнопку Пуск, выберите пункт Все программы, затем Microsoft SQL Server 2008, а затем выберите пункт Среда Business Intelligence Development Studio.
В меню Файл выберите пункт Открыть и выберите Проект или решение.
Перейдите к файлу 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,, например, 20010101.
В столбце Значение параметра введите значение для параметра @EndDate, например, 20030101.
Нажмите кнопку ОК.
Результирующий набор будет содержать отфильтрованный набор данных с заказами, относящимися к 2001 и 2002 годам.
Дважды нажмите кнопку ОК. В области «Данные отчета» отображаются поля набора данных. Следует также заметить, что параметры отчета, StartDate и EndDate, будут созданы автоматически и добавлены в узел «Параметры».
После задания параметров запроса для отчета, нужно изменить тип данных параметров отчета, чтобы они соответствовали типу данных в источнике данных. По умолчанию используется тип Text, который соответствует типу String большинства источников данных. Если данные источника — числовые, логические или типа даты и времени, нужно изменить тип данных параметра отчета.
Изменение типа данных и значений по умолчанию для параметра отчета
В области «Данные отчета» разверните узел «Параметры» и дважды щелкните StartDate. Откроется диалоговое окно Свойства параметра отчета.
Убедитесь, что имя параметра — StartDate , а запрос на его введение — Start Date.
В списке Тип данных выберите Дата-время.
Нажмите кнопку ОК.
В области «Данные отчета» дважды щелкните EndDate. Проверьте значения имени и запроса на введение.
В списке Тип данных выберите Дата-время.
Нажмите кнопку ОК.
Нажмите кнопку Просмотр. Оба параметра, StartDate и EndDate, появятся на панели инструментов вместе с элементом управления «календарь». Элементы управления «календарь» появляются автоматически, если параметр имеет тип данных Date/Time, а список допустимых значений не определен. Если список допустимых значений задан, вместо календаря появится раскрывающийся список значений.
Введите значения параметров для запуска отчета.
В текстовом поле параметра StartDate введите дату 2001-01-01.
В текстовом поле параметра EndDate введите дату 2003-01-01.
Нажмите кнопку Просмотр отчета. Отчет содержит только те записи, даты которых попадают в рамки значений параметров отчета.
После создания параметров отчета можно создать для этих параметров значения по умолчанию. Параметры по умолчанию позволяют выполнять отчет автоматически. В противном случае для выполнения отчета пользователю необходимо ввести значения параметров.
Задание значений параметров по умолчанию
В представлении конструктора, в области «Данные отчета» разверните узел «Параметры» и дважды щелкните StartDate. Откроется диалоговое окно Свойства параметра отчета.
Нажмите кнопку Значения по умолчанию.
Выберите параметр Задание значений. Появится кнопка Добавить и пустая сетка Значение.
Нажмите кнопку Добавить. В сетку параметров добавится пустая строка.
Щелкните текстовое поле Значение и удалите находящийся там текст (Null).
Введите 2001-01-01. Нажмите кнопку ОК.
В области конструктора отчета дважды щелкните EndDate.
Нажмите кнопку Значения по умолчанию.
Выберите параметр Задание значений.
Нажмите кнопку Добавить.
Введите 01.01.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,, например, 20010101.
В столбце Значение параметра введите значение для параметра @EndDate, например, 20030101.
Нажмите кнопку ОК. В наборе результатов должен появиться новый столбец, озаглавленный Weekday.
Дважды нажмите кнопку ОК. В области «Данные отчета» убедитесь, что Weekday является полем.
(Необязательно) Форматирование даты в табличных данных, которые будут отфильтрованы
Перейдите на вкладку Конструктор.
Щелкните правой кнопкой ячейку с выражением для поля [Date] и выберите параметр Свойства текстового поля.
Щелкните Число, а затем в поле Категория выберите Дата.
В поле Тип введите «31 января 2000 года, понедельник».
Нажмите кнопку ОК.
Добавление нового параметра отчета
В представлении конструктора, в области «Данные отчета» нажмите кнопку Создать и выберите Параметр. Откроется диалоговое окно Свойства параметра отчета.
В поле «Имя» введите DayoftheWeek.
В текстовом поле Запрос введите День недели для фильтрации:
Убедитесь, что поле типа данных содержит значение Text.
Нажмите кнопку Значения по умолчанию.
Выберите параметр Задание значений. Появится кнопка Добавить и пустая сетка Значение.
Нажмите кнопку Добавить.
Введите пятница.
Нажмите кнопку ОК.
Задание фильтра таблицы с выражением параметра
В представлении конструктора щелкните правой кнопкой мыши маркер строки или столбца таблицы и выберите Свойства табликса.
ПримечаниеОбласть данных таблицы представляет собой шаблон, основанный на области данных табликса.
Перейдите на вкладку Фильтры. Появится пустая сетка фильтра.
Щелкните «Добавить». В сетку параметров добавится пустая строка.
Из раскрывающегося списка в поле Выражение выберите [Weekday].
Убедитесь, что в качестве параметра Оператор установлен знак равенства (=).
Нажмите кнопку выражения (fx) рядом с текстовым полем Значение. Откроется диалоговое окно Выражение.
В поле «Категория» нажмите Параметры. В области «Значения» появится текущий список параметров. Дважды щелкните DayoftheWeek. Выражение параметра успешно добавлено в текстовое поле выражения. Теперь в текстовом поле «Выражение» появится следующее выражение: =Parameters!DayoftheWeek.Value.
Нажмите кнопку ОК. Снова нажмите кнопку OK для выхода из диалогового окна Свойства табликса.
Теперь фильтр для таблицы настроен на сравнение значения в поле «Weekday» со значением параметра DayoftheWeek. Например, при вводе на панели инструментов значения пятница для параметра DayoftheWeek обработчик отчетов обрабатывает только те строки таблицы, где в поле «Weekday» указано значение пятница.
Нажмите кнопку Просмотр. Отчет запускается автоматически, поскольку все параметры имеют значения по умолчанию. Таблица отображает только значения, попавшие во временной интервал с StartDate по EndDate и выпавшие на пятницу.
Следующие шаги
Были определены параметры запроса и отчета, установлены значения параметров по умолчанию и задан фильтр для таблицы. Следующее занятие посвящено созданию списка доступных, или допустимых, значений параметра. См. раздел Занятие 2. Добавление параметров для создания списка доступных значений.