Введение в службы Reporting Services
Добавление программного кода к отчету
Если вы хотите настроить несколько свойств при помощи одного выражения, например, выражения цели продаж, которое мы использовали в предыдущем разделе, можно скопировать и вставить код в каждое выражение. Однако такой подход является неэффективным и трудно управляемым. Например, вам придется обновить каждый случай, если когда-либо нужно будет отредактировать отчет, чтобы изменить цель продаж.
Для решения этой проблемы следует вставить код централизованно, либо из самого отчета, либо из внешней сборки, ссылающейся на этот отчет. В этой лекции мы рассмотрим только первый случай.
Мы разработаем функцию отчета для централизации вычислений полных имен сотрудников. Следовательно, мы используем выражение, которое ввели в предыдущем разделе, в ячейке под названием столбца Name.
Добавление кода с помощью вкладки Код
- Перейдите на вкладку Layout (Макет). В меню Report (Отчет) выберите команду Report Properties (Свойства отчета).
- Перейдите на вкладку Code (Код). Перед вами окажется пустое текстовое поле, в котором можно ввести код. Это текстовое поле не предлагает никакой помощи при вводе (ни выделения цветом синтаксиса, ни "умного ввода"). Следовательно, используйте его только в особых случаях, когда вы уверены в точности ввода Хорошая идея – ввести код в более мощном редакторе, проверить его, а затем вставить результирующий код в это текстовое поле.
- Вставьте или введите следующий код в окне Custom Code (Пользовательский код) (этот код довольно многословен, но имена переменных короткие из соображения лучшей читаемости кода).
function FullName (fn as String, mn as String, ln as String) as String Dim res as string res = fn & " " res &= IIf(Len(mn) = 1, mn & ". ", "") res &= IIf(Len(mn) > 1, mn & " ", "") res &= ln return res end function
- Нажмите кнопку ОК, чтобы подтвердить изменения.
- На вкладке Layout (Макет) щелкните правой кнопкой мыши на строке Details (Подробности) столбца Name и выберите из контекстного меню команду Expression (Выражение). Измените выражение следующим образом:
=Code.FullName(Fields!FirstName.Value,Fields!MiddleName.Value, Fields!LastName.Value)
- Сохраните отчет и просмотрите результаты на вкладке Preview (Просмотр). Если при вводе кода или выражения в ячейку вы сделали ошибку, то на вкладке Preview (Просмотр) получите сообщение об ошибке.
- Теперь можно использовать этот код в других местах, например, в параметре интерактивной сортировки для столбца Name. Хотя более логично выполнить сортировку по фамилии, измените поле сортировки просто для изучения следующим образом: выделите название столбца Name на вкладке Layout (Макет).
- Щелкните правой кнопкой мыши ячейку, выберите Properties (Свойства) и перейдите на вкладку Interactive Sort (Интерактивная сортировка).
- Замените текущее выражение следующим, после окончания правки нажмите кнопку ОК.
=Code.FullName(Fields!FirstName.Value, Fields!MiddleName.Value, Fields!LastName.Value)
- Сохраните отчет и просмотрите результаты на вкладке Preview (Просмотр). Обратите внимание на то, что столбец Name отсортирован по полному имени, а не по фамилии, как предполагалось.
Свойство Name и свойство Dataset
Некоторые интересные свойства устанавливаются автоматически Конструктором отчета, пока мы разрабатываем макет. Вам нужно знать об этих свойствах и их значении, чтобы полностью разобраться в редактировании отчета.
- Все элементы отчета идентифицируются по имени. Свойство Name задается как обычно, добавлением порядкового номера после типа элемента, например, textbox1 , textbox2 ... или table1 , table2... Хотя такие имена вполне традиционны и их можно использовать, все же они не очень хорошо подходят для понятного программирования. В мире программирования рекомендуется давать каждому элементу без исключения дружественное к пользователю имя, которое помогает идентифицировать этот элемент при написании кода. Однако в Конструкторе отчетов многие объекты существуют без нашего ведома, пока они по какой-либо причине нам не понадобятся. Следовательно, хотя мы не можем рекомендовать изменять имя каждого элемента, в целом это неплохая практика. В любом случае, вам следует изменять хотя бы имена элементов, используемых в выражениях. Чтобы просмотреть, какие именованные объекты существуют в отчете, можно развернуть раскрывающийся список в верхней части Окна свойств. Есть и другой способ - можно просмотреть непосредственно файл RDL XML и выполнить поиск атрибута Name (Имя) в элементах.
- Очень важным является также свойство Dataset binding. Некоторые объекты отчета, например, те, которые являются контейнерами или областями данных, "волшебным" образом знают, откуда они должны извлекать данные. Если вы посмотрите значение свойства Dataset на вкладке объекта отчета Table (Таблица), который содержит несколько полей, вы заметите, что в качестве значения этого свойства установлено имя набора данных. В нашем примере это значение - dsEmployeeSales. Эта привязка определяет источник данных для всех объектов, зависимых от данных, внутри этого объекта контейнера. Если вы проверите значение этого свойства в только что созданной таблице, то обнаружите, что оно остается незаполненным до тех пор, пока вы не перетащите в него поле при помощи мыши или не зададите привязку вручную.
Коллекции Reporting Services
Кроме коллекции Fields, которую мы использовали в нашем примере отчета, службы Reporting Services предоставляют и другие коллекции для использования в выражениях отчетов: Globals , Parameters , ReportItems и User. Каждая из этих коллекций объединяет различные типы объектов.
- Fields. Ссылается на поля, содержащиеся в определенном наборе данных. При использовании коллекции Fields в области данных, например, в таблице, предполагается набор данных, к которому она принадлежит вследствие привязки области данных (привязка области данных устанавливается через свойство Dataset области данных). При использовании вне области данных, коллекция Fields требует определения области действия (путем явного назначения имени набора данных).
- Globals. Содержит такие объекты, как PageNumber, TotalPages, ReportFolder и ReportName. Элементы из этой коллекции вам придется использовать достаточно часто.
- Parameters. Содержит все параметры, объявленные в отчете. Если отчет объявляет какие-либо параметры, то их свойства доступны через эту коллекцию.
- ReportItems. Включает все текстовые поля отчета. Не забывайте, что ячейки таблицы - это тоже текстовые поля. Следовательно, можно обратиться к нужному набору объектов через эту коллекцию.
- User. Содержит два объекта: User и Language ; однако, к этим объектам можно обратиться только через коллекцию User.
Заключение
Из этой лекции вы узнали, что такое система отчетов предприятия, и получили некоторые сведения по планированию отчетов. Кроме того, в лекции рассматривалась архитектура служб Reporting Services, ее основные компоненты и задачи, выполняемые каждым из них.
Вы поэкспериментировали с процедурами разработки основного отчета: это создание отчета, настройка источника данных и запроса к данным, создание и редактирование макета отчета, добавление программного кода для выполнения общих операций, а также придание отчету некоторой интерактивности.
В Электронной документации по SQL Server 2005 есть дополнительная информация по каждой из этих тем. Рекомендуется изучить области данных list (список) и matrix (матрица), группирование, область действия выражения, каскадирование параметров, работа с функциями видимости, диаграммы, вложенные отчеты, культура использования языка и отчеты служб Analysis Services.