Занятие 3. Добавление параметров для выбора нескольких значений в списке
На этом занятии будет проведено изменение параметров BusinessPersonID и DayoftheWeek с однозначных на многозначные. Многозначные параметры позволяют выбирать для параметра отчета несколько значений. Чтобы изменить параметр отчета BusinessPersonID, необходимо изменить запрос набора данных AdventureWorks2008 таким образом, чтобы параметр @BusinessPersonID проверялся в наборе выбранных значений, а не на равенство одному значению, а также задать свойство многозначности для параметра отчета. Чтобы изменить параметр отчета DayoftheWeek, необходимо задать многозначность свойства, установить доступные значения из нового набора данных и ввести выражение для значений по умолчанию. Затем необходимо путем создания нового набора данных предоставить доступные значения для параметра DayoftheWeek. Наконец, в отчет следует добавить текстовое поле для отображения выбранных значений параметра DayoftheWeek.
Замена существующего набора данных
В области «Данные отчета» щелкните правой кнопкой мыши набор данных AdventureWorksDataset и выберите пункт Свойства набора данных.
Убедитесь, что в списке Источник данных выбран набор данных AdventureWorks_Ref.
Убедитесь, что в списке Тип запроса выбран тип Текст.
Нажмите кнопку Конструктор запросов, чтобы открыть конструктор запросов.
Текст в текстовом поле необходимо заменить на следующий текст запроса:
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)) AND soh.SalesPersonID IN (@BusinessPersonID)Этот запрос идентичен предыдущему, но условие равенства было заменено на условие включения.
AND soh.SalesPersonID IN (@BusinessPersonID)Нажмите кнопку Выполнить (!). При получении запроса на ввод параметров выберите значения из следующей таблицы. Конструктор запросов не поддерживает проверку многозначных параметров.
@StartDate
20010101
@EndDate
20030101
@BusinessPersonID
290
Нажмите кнопку ОК.
Для менеджера по продажам по имени Ranjit Varkey Chudukatil появится результирующий набор с параметром BusinessPersonID = 290.
Изменение параметра отчета BusinessPersonID с однозначного на многозначный
В области «Данные отчета» разверните узел Параметры и дважды щелкните параметр BusinessPersonID.
Установите флажок Разрешить несколько значений.
Нажмите кнопку ОК.
Нажмите кнопку Просмотр. Отчет запустится автоматически. Раскрывающийся список значений параметра BusinessPersonID будет содержать все имена менеджеров по продажам.
Примечание |
|---|
Значение (Выбрать все) отображается в раскрывающемся списке доступных значений как первое доступное значение для многозначного параметра. Установите этот флажок, чтобы выбрать или очистить все значения. По умолчанию выбраны все значения. |
Добавление нового набора данных для заполнения списка доступных значений параметра отчета
Переключитесь в режим конструирования.
В области «Данные отчета» щелкните правой кнопкой мыши AdventureWorks_Ref и выберите Добавить набор данных. Откроется диалоговое окно Свойства набора данных.
В поле Имя введите WeekDaysfromQuery.
Убедитесь, что в списке Тип запроса выбран тип «Текст».
В поле Запрос введите или вставьте следующую строку запроса.
SET DATEFIRST 1; SELECT DISTINCT DATEPART(weekday, S.OrderDate) as WeekDayNumber, DATENAME(weekday, S.OrderDate) as Weekday FROM Sales.SalesOrderHeader S Order by WeekDayNumberНа панели инструментов конструктора запросов нажмите кнопку Пуск (!) . В результирующем наборе отобразятся порядковые номера и дни недели.
Два раза подряд нажмите кнопку ОК для выхода из диалогового окна Свойства набора данных.
Источник данных WeekDaysfromQuery появится в области «Данные отчета».
Изменение параметра с однозначного на многозначный с использованием значений по умолчанию и допустимых значений
В области «Данные отчета» разверните узел Параметры и дважды щелкните DayoftheWeek. Откроется диалоговое окно Свойства параметра отчета.
Выберите Разрешить несколько значений.
Нажмите кнопку Допустимые значения.
Выберите Получать значения из запроса.
Из раскрывающегося списка в поле Набор данных выберите WeekDaysfromQuery.
Из раскрывающегося списка в поле Значение выберите Weekday.
Из раскрывающегося списка в поле Метка выберите Weekday.
Нажмите кнопку Значения по умолчанию.
Выберите Указать значения.
(Необязательно) Выберите существующее значение пятница, затем нажмите кнопку Удалить.
Нажмите кнопку Добавить.
В поле Значение введите суббота.
Нажмите кнопку Добавить.
В поле Значение введите воскресенье.
Нажмите кнопку ОК.
Перед предварительным просмотром отчета необходимо в критерии фильтра, определенном для области данных таблицы, задать использование оператора IN, потому что теперь параметр DayoftheWeek является многозначным.
Настройка фильтра для использования многозначных параметров
В режиме конструктора щелкните правой кнопкой мыши внутри таблицы и выберите пункт Свойства табликса. Откроется диалоговое окно Свойства табликса.
Перейдите на вкладку Фильтры. Там уже должен быть фильтр, добавленный на занятии 1 для параметра DaysoftheWeek.
Убедитесь, что в раскрывающемся списке в столбце Выражение задано значение [Weekday].
Убедитесь, что выбран параметр Текст.
Измените Оператор со знака равенства (=) на оператор In.
Убедитесь, что в раскрывающемся списке в текстовом поле Значениезадано значение в [@DayoftheWeek].
Нажмите кнопку ОК.
Теперь фильтр таблицы настроен для сравнения значения поля «День недели» со значением параметра DayoftheWeek с помощью оператора In. При выборе многозначных значений для параметра отчета фильтр будет проверять все строки таблицы на наличие поля «День недели» в коллекции DayoftheWeek.
Нажмите кнопку Просмотр. В отчете отобразится параметр отчета DaysoftheWeek со значениями по умолчанию Суббота и Воскресенье. Воспользуйтесь раскрывающимся списком для выбора нескольких значений параметра DayoftheWeek.
Следующие шаги
Изменение свойств параметров отчета из однозначных в многозначные выполнено успешно. Для использования коллекции многозначных параметров были сделаны необходимые изменения запроса, фильтра и выражения. Было изучено использование многозначных параметров в выражениях. Следующее занятие посвящено созданию списка значений параметра, заполняемого с помощью условия на основании выбранного значения предыдущего параметра. См. раздел Занятие 4. Добавление каскадных параметров.
Примечание