Поделиться через


Занятие 3. Добавление параметров для выбора нескольких значений в списке (построитель отчетов 2.0)

На этом занятии объясняется, как изменить параметр, чтобы он мог иметь несколько значений. Такие параметры называют многозначными. По умолчанию параметр может принимать одно значение. Параметры BusinessPersonID и DayoftheWeek, созданные на предыдущем занятии, являются однозначными. Чтобы сделать параметр многозначным, нужно знать, был ли параметр создан автоматически из параметра запроса, как параметр BusinessPersonID, или создан вручную в области «Данные отчета», как параметр DayoftheWeek.

Чтобы сделать параметр отчета многозначным, нужно просто установить свойство параметра отчета. Если параметр отчета основан на параметре запроса, также необходимо изменить запрос. Если параметр используется в фильтре, необходимо изменить оператор фильтра, указав в нем набор значений вместо одного значения.

Замена существующего набора данных

  1. В области «Данные отчета» щелкните правой кнопкой мыши набор данных DataSet1 и выберите пункт Запрос.

    Откроется текстовый конструктор запросов.

  2. Текст в текстовом поле необходимо заменить следующим текстом запроса:

    SELECT
      SH.OrderDate
      ,DATENAME(weekday, SH.OrderDate) as Weekday
      ,SH.SalesOrderNumber
      ,SD.OrderQty
      ,SD.LineTotal
      ,P.Name AS [Product]
      ,PS.Name AS [Subcategory]
    FROM Sales.SalesPerson SP 
      INNER JOIN Sales.SalesOrderHeader AS SH 
          ON SP.BusinessEntityID = SH.SalesPersonID
      INNER JOIN Sales.SalesOrderDetail AS SD 
         ON SH.SalesOrderID = SD.SalesOrderID
      INNER JOIN Production.Product AS P
       ON SD.ProductID = P.ProductID
      INNER JOIN Production.ProductSubcategory AS PS
       ON PS.ProductSubcategoryID = P.ProductSubcategoryID
      INNER JOIN Production.ProductCategory AS PC
       ON PC.ProductCategoryID = PS.ProductCategoryID
    WHERE PC.Name = 'Clothing' 
       AND (SH.OrderDate BETWEEN (@StartDate) AND (@EndDate))
          AND SH.SalesPersonID IN (@BusinessPersonID)
    

    Этот запрос идентичен предыдущему, но условие равенства = было заменено на условие включения IN:

    AND SH.SalesPersonID IN (@BusinessPersonID)
    
  3. Нажмите кнопку Выполнить (!). При получении запроса на ввод параметров введите значения из следующей таблицы. Конструктор запросов не поддерживает проверку многозначных параметров.

    @StartDate

    20010101

    @EndDate

    20030101

    @BusinessPersonID

    290

  4. Нажмите кнопку ОК. 

    Появится результирующий набор для менеджера по продажам Ranjit Varkey Chudukatil с идентификатором BusinessPersonID = 290.

Изменение параметра отчета BusinessPersonID с однозначного на многозначный

  1. В области «Данные отчета» разверните узел Параметры и дважды щелкните параметр BusinessPersonID.

  2. Установите флажок Разрешить несколько значений.

  3. Нажмите кнопку ОК. 

  4. Нажмите кнопку Просмотр. Отчет запустится автоматически. Раскрывающийся список значений параметра BusinessPersonID будет содержать все имена менеджеров по продажам.

ПримечаниеПримечание

Значение (Выделить все) отображается в раскрывающемся списке доступных значений как первое доступное значение для многозначного параметра. Используйте этот флажок, чтобы выбрать или очистить все значения.

Добавление нового набора данных для заполнения списка допустимых значений параметра отчета

  1. Переключитесь в режим конструирования.

  2. На панели инструментов области «Данные отчета» нажмите Создать и выберите Набор данных. Откроется диалоговое окно Свойства набора данных.

  3. В поле Имя введите WeekDaysfromQuery.

  4. Убедитесь, что в списке Тип запроса выбран тип Текст.

  5. Нажмите кнопку Конструктор запросов и выберите Редактировать как текст.

  6. В области запросов вставьте следующий запрос:

    SET DATEFIRST 1;
    SELECT DISTINCT 
       DATEPART(weekday, S.OrderDate) as WeekdayNumber,
       DATENAME(weekday, S.OrderDate) as Weekday
       FROM Sales.SalesOrderHeader S
    Order by WeekdayNumber
    
  7. На панели инструментов конструктора запросов нажмите кнопку Выполнить (!). В результирующем наборе отобразятся порядковые номера и дни недели.

  8. Два раза подряд нажмите кнопку ОК для выхода из диалогового окна Свойства набора данных.

    В области «Данные отчета» появится источник данных WeekDaysfromQuery.

Изменение параметра с однозначного на многозначный с использованием значений по умолчанию и допустимых значений

  1. В области «Данные отчета» разверните узел Параметры и дважды щелкните DayoftheWeek. Откроется диалоговое окно Свойства параметра отчета.

  2. Выберите Разрешить несколько значений.

  3. Нажмите кнопку Допустимые значения.

  4. Выберите Получать значения из запроса.

  5. Из раскрывающегося списка в поле Набор данных выберите WeekDaysfromQuery.

  6. В поле Поле значения выберите из раскрывающегося списка элемент WeekdayNumber.

  7. В поле Поле метки выберите из раскрывающегося списка элемент Weekday.

Пользователь выбирает значения параметров из меток, но в отчете используются сами значения. Это важно, если задаются значения по умолчанию или фильтр. Значения в поле WeekdayNumber должны быть целочисленными.

  1. Нажмите кнопку Значения по умолчанию.

  2. Выберите Указать значения.

  3. Нажмите кнопку Добавить.

  4. В поле Значение замените день Пятница на число 6. Поскольку значения берутся из набора данных, который поддерживает дни недели и по номерам, и по именам, значение по умолчанию должно указывать номер дня недели. Значение 6 соответствует дню Суббота.

  5. Нажмите кнопку Добавить.

  6. В поле Значение введите число 7. Это значение соответствует дню Воскресенье.

  7. Нажмите кнопку ОК. 

    Перед предварительным просмотром отчета необходимо в критерии фильтра для таблицы задать использование оператора IN, потому что параметр DayoftheWeek является многозначным.

Изменение фильтра для использования многозначного параметра

  1. В области «Данные отчета» щелкните правой кнопкой мыши набор данных DataSet1 и выберите пункт Свойства набора данных.

  2. Перейдите на вкладку Фильтры. Здесь уже есть фильтр, добавленный на занятии 1 для параметра DayoftheWeek.

  3. Убедитесь, что в раскрывающемся списке в столбце Выражение выбрано значение [Weekday].

  4. Измените значение Оператор со знака равенства (=) на оператор In.

  5. В поле Значение введите [@DayoftheWeek.Label].

    Укажите метку параметра, чтобы название дня недели сравнивалось с полем метки, а не с числовым полем для дня недели.

  6. Нажмите кнопку ОК. 

    Табличный фильтр теперь будет сравнивать значение поля Weekday с меткой в параметре DayoftheWeek с использованием оператора In. При выборе нескольких значений для параметра отчета фильтр проверит каждую строку таблицы на присутствие значения поля Weekday в коллекции DayoftheWeek.

  7. Нажмите кнопку Выполнить, чтобы выполнить предварительный просмотр отчета. В отчете показан параметр отчета DaysoftheWeek со значениями по умолчанию Суббота и Воскресенье, которые являются метками для указанных значений по умолчанию. Используйте раскрывающийся список, чтобы выбрать несколько значений для параметра DayoftheWeek.

Следующие шаги

Изменение свойств параметров отчета из однозначных в многозначные выполнено успешно. Чтобы использовать коллекцию многозначных параметров, были сделаны необходимые изменения запроса, фильтра и выражения. Было изучено использование многозначных параметров в выражениях. Следующее занятие посвящено созданию списка значений параметра, заполняемого с помощью условия на основании выбранного значения предыдущего параметра. См. раздел Занятие 4. Добавление каскадных параметров (построитель отчетов 2.0).