Оптимизация работы серверов баз данных Microsoft SQL Server 2005

Введение в службы Reporting Services

Разбить на страницы
Показывать лекцию целиком

Главная задача пользовательского приложения базы данных - это управление реальными данными через добавление, изменение данных, удаление устаревших данных и т. д. Следовательно, вполне логично, что разработчики концентрируются главным образом на этих функциях. Однако у приложений есть еще одно важное свойство - обеспечить пользователей информацией, которая им нужна для длительного пользования. Эти долгосрочные задачи включают возможность перенести данные на бумагу и проанализировать сводные или архивные данные.

Разработчики приложений для обеспечения этих функций могут использовать традиционные методы, например, запросы, бизнес-объекты и сетки данных. Однако для сводной информации необходимы сложные макеты с версткой, промежуточными итогами и условным форматированием. Эти макеты не так просто разрабатывать и обслуживать с помощью классических инструментов разработки.

Кроме того, некоторые потребители данных, предоставляемых приложением, никогда не имеют дела с самим приложением. В такой ситуации часто оказываются менеджеры или сотрудники, работающие удаленно. Эта группа пользователей предпочитает получать данные приложения по электронной почте или на мобильные устройства по заранее составленному расписанию.

Поскольку эти требования встречаются довольно часто, некоторые издатели программного обеспечения предоставляют встроенные решения по созданию отчетов, в том числе, для предприятий. В этой лекции рассказывается о том, как отвечают этим требованиям службы Reporting Services в Microsoft SQL Server 2005.

Требования к решению создания отчетов

Вот некоторые из требований, которым должно отвечать решение для создания отчетов:

  • Обеспечение пользователей информацией длительного потребления
  • Возможность создания копии информации на бумаге
  • Возможность получения сводных, аналитических и архивных данных
  • Предоставление простого пользовательского интерфейса для создания сложных макетов отчета, включающих вложенные отчеты, промежуточные итоги и условное форматирование.
  • Обеспечение функции распределения отчетов по электронной почте, на мобильные устройства и другие электронные носители
  • Обеспечение планирования создания отчетов
  • Обеспечение средств администрирования системы создания отчетов
  • Возможность установки расширений встроенных функций
  • В следующих разделах подробно рассматриваются все эти функции служб Reporting Services.

    Создание отчетов

    Точно так же, как Excel или Word нуждаются в формате файла ( .xls или .doc ), который включает данные и информацию, относящиеся к работе этих приложений, решениям для создания отчетов нужен файл описания отчета. Службы Microsoft Reporting Services используют для этого файлы Report Definition Language (Языка описания отчетов) RDL. RDL-файлы - это XML-файлы, которые соответствуют открытой схеме.

    Следовательно, все, что нам нужно для создания отчетов, совместимых с Reporting Services - это инструмент, позволяющий создавать XML (RDL)-файлы. При определенной настойчивости файл описания отчета можно создать даже в Блокноте. К счастью, этот способ обычно не используется для создания отчетов. Microsoft SQL Server 2005 позволяет создавать проекты отчетов в Microsoft SQL Server Business Intelligence Development Studio (BIDS) при помощи классического интерфейса макетирования.

    Размещение отчетов

    После создания описания отчета его следует разместить в таком месте, где он будет доступен для поиска и обработки приложением и/или пользователями. Службы Reporting Services включают инфраструктуру, необходимую для хранения отчетов в централизованном защищенном репозитории.

    Размещение производится тремя различными методами: через интерфейс BIDS, посредством загрузки RDL-файлов из Report Manager (Диспетчера отчетов) или через создание сценария выполнения операции загрузки RDL-файла и использование утилиты rs.exe для выполнения этого сценария.

    Доступ к отчетам

    После размещения отчета определенный механизм должен обеспечить пользователю и/или приложениям возможность найти нужный отчет и запросить его обработку. Службы Reporting Services включают адаптированное к нуждам администраторов и интерактивных пользователей веб-приложение Report Manager (Диспетчер отчета). Для автоматического доступа через приложения службы Reporting Services имеют несколько интерфейсов прикладного программирования (API).

    Доставка отчетов

    По умолчанию, для вывода обработки отчета используется формат HTML 4.0. Для пользователей и/или приложений, которым нужен вывод в другом формате, предоставлена функция экспорта. Службы Reporting Services включают не требующую настройки поддержку для самых популярных форматов, таких, как Acrobat (PDF), Microsoft Excel и HTML. Кроме того, службы Reporting Services по умолчанию предоставляют возможность доставки готовых отчетов в файловые хранилища или отправки их по электронной почте.

    Дополнительные возможности служб Reporting Services

    Возможно, вы заметили, что в описании предыдущих функций присутствовали выражения "не требующие настройки" и "по умолчанию". Службы Reporting Services – это расширяемая платформа, которая допускает добавление пользовательского программного кода по нескольким направлениям: безопасность, доступ к источникам данных и доставка. Блоки пользовательского кода по сути представляют собой сборки .NET, которые должны быть зарегистрированы в службах Reporting Services.

    Администрирование служб Reporting Services

    Как уже отмечалось выше, одной из задач системы отчетов на предприятии является предоставление отчетов любому пользователю предприятия в предпочитаемом им формате и месте. Безусловно, не все пользователи должны иметь доступ ко всем отчетам компании, и не всем он будет предоставлен. Следовательно, службы Reporting Services предоставляют среду создания отчетов для целей администрирования.

    Важным преимуществом корпоративной системы отчетности является возможность запланировать обработку отчетов. Эта функция позволяет администраторам решить, когда и с какой периодичностью проводить обработку отчетов. Например, администратор может запланировать создание определенных отчетов по завершении определенных процессов или не допустить обработки пользователями больших отчетов в рабочее время. Используя эту функцию Reporting Services, администратор может отрегулировать рабочую нагрузку системы отчетности в соответствии с требованиями бизнеса данного предприятия и реальными возможностями системы.

    Упрощенные механизмы системы отчетности

    К этому моменту вы уже должны понимать, что корпоративная система отчетности - это полнофункциональное, достаточно сложное бизнес-решение, которое предназначено для обеспечения решений в среде создания отчетов по требованию. Но что делать, если потребности в создании отчетов не такие масштабные, или приложение вообще не использует веб-сервер?

    В Microsoft Visual Studio 2005 есть два элемента управления просмотром и обработкой отчетов, которые позволяют использовать ранее упомянутую инфраструктуру сервера и могут применяться для локального хранения, обработки и доставки отчетов. Обратите внимание на то, что эти элементы управления входят в состав Visual Studio 2005, а не в Microsoft SQL Server 2005.

    Что следует учитывать при проектировании отчета

    В этой книге надлежащее планирование проектирования отчетов не рассматривается, однако стоит отметить, что план должен быть составлен до начала создания отчета. План создания отчета используется для идентификации и анализа общих требований к отчету по нескольким направлениям, в том числе:

  • Содержание отчета.Просмотр каталога образцов отчетов даст вам достаточно глубокое представление обо всех необходимых функциях системы отчетов. Этот обзор поможет найти возможности оптимизации, например, объединение двух аналогичных отчетов в один отчет.
  • Форматирование.Подбор заголовков, колонтитулов, информации об управлении версиями, авторе, дате создания, и аналогичных элементов, которые следует включать во все отчеты.
  • Контроль исходного кода.Файлы определения отчета должны учитывать исходный код, поэтому рекомендуется использовать стратегию контроля исходного кода. Кроме того, поскольку отчет может воспроизводить в печатной или электронной форме документы, имеющие свой жизненный цикл, рекомендуется помещать версию отчета для создания документов на видном месте в каждом отчете, чтобы можно было легко определить, какая версия отчета была использована для получения результатов. Версии могут иметь большие или меньшие номера.
  • Источники данных и безопасность.Пользователи могут требовать, чтобы отчет отображал различные результаты, на основании которых актуально запрашивается обработка отчета. В процессе планирования следует собрать информацию о том, какой тип обеспечения безопасности должен применяться, и о деталях авторизации пользователя для просмотра, обработки и редактирования каждого отчета или пакета отчетов.
  • Жизненный цикл отчета.Следует знать определенные аспекты жизненного цикла каждого отчета, например, периодичность его обработки, количество пользователей, которым нужна результирующая информация и время, необходимое для обработки отчета. С помощью этой информации можно принимать обоснованные решения о проектах отчетов.
  • Каналы и форматы доставки отчетов.Проекты отчетов и упомянутые ранее характеристики будут зависеть от целевого формата доставки (text, RTF, PDF, Excel) и канала доставки (папка с файлами, протокол SMTP, просмотр через интернет, просмотр на карманном компьютере (PDA)). Если вы соберете эту информацию и учтете ее на этапе планирования, то получите определенные преимущества.
  • Архитектура служб Reporting Services

    Службы Reporting Services состоят из нескольких функциональных блоков. Каждый блок выполняет одну или несколько задач, или имеет разные обязанности по отношению к целостному решению. Функции системы отчетов охватывают различные области, поэтому архитектура служб Reporting Services должна обладать достаточной гибкостью. Таким образом, компоненты распределены по различным областям сервера (или серверов) решения, как показано на рис. 8.1.

    (рис 8.1) Архитектура служб Reporting Services в Microsoft SQL Server 2005

    Компоненты сервера

    Службы Reporting Services - это серверный продукт, следовательно, большая часть компонентов этой службы размещается на сервере.

  • Базы данных служб Reporting Services.Базы данных служб Reporting Services хранят метаданные решений, сохраненные отчеты, информацию, имеющую отношению к сеансам и все, что необходимо для обслуживания состояния сервера. Службы Reporting Services управляют двумя базами данных: ReportServer, которая включает всю постоянную информацию, и ReportServerTempDB, которая содержит всю временную информацию. Эти базы данных можно найти в каталоге баз данных SQL Server, как любые обычные базы данных.
  • Служба Windows сервера отчетов.Служба Windows сервера отчетов отвечает за инициализацию и обслуживание серверов, а также за вывод процессов планирования и доставки, с помощью доступных расширений доставки.
  • Веб-служба сервера отчетов.Службы Reporting Services взаимодействуют с внешним миром, главным образом, через интерфейс веб-службы. Действительно, именно этот интерфейс использует Диспетчер отчетов для выполнения своих обязанностей. Доступны две веб-службы: ReportingServices2005 (для управления) и ReportExecutionService (для выполнения отчетов).
  • Эти два блока зависят от некоторых функциональных модулей, в том числе, от различных обработчиков и расширений.

  • Обработчик сервера отчетов.Этот модуль делает всю основную работу по синтаксическому анализу определения отчета, запросу данных от расширения обработки данных, выполнения вычислений и отправке вывода на расширение интерпретации для форматирования вывода при необходимости.
  • Обработчик планирования и доставки.Отвечает за запуск и обслуживание всех запланированных и завершившихся процессов, а также за передачу вывода соответствующему расширению доставки. Модуль взаимодействует с обработчиком сервера отчетов и службой Агент SQL Server.
  • Расширение проверки подлинности.Этот модуль отвечает за проверку подлинности и авторизацию пользователей, обращающихся к службам Reporting Services. Для использования пользовательских или неподдерживаемых механизмов проверки подлинности необходимо создать и зарегистрировать пользовательские сборки.
  • Расширение обработки данных.Данный модуль отвечает за обработку взаимодействия с источниками данных. Источники данных, которые не требуют дополнительной настройки - это SQL Server, службы Analysis Services, Oracle, OLE DB, ODBC, поставщики данных ADO.NET и XML. Для доступа к неподдерживаемым базам данных необходимо создать и зарегистрировать пользовательские сборки.
  • Расширение интерпретации.Службы Reporting Services используют это расширение для формирования окончательной интерпретации отчета в выбранном формате. В Reporting Services имеется несколько расширений подготовки. HTML, PDF, Excel, текст с разделителями "запятая" (CSV), XML, и Image. Чтобы перевести отчеты в дополнительные форматы, следует создать и зарегистрировать пользовательские сборки.
  • Служба Агент SQL Server.Службы Reporting Services используют Агент SQL Server для обработки всех задач, связанных с планированием. Службы Reporting Services создают и удаляют задания Агента SQL Server в определенной им последовательности. Имена заданий, которые генерируются службами Reporting Services, начинаются с GUID, и могут быть использованы в списке заданий Агента SQL Server.

    Эти задания выполняют очень простую работу: они вставляют в базу данных службы Reporting Services строку "schedule fired". Вставка этой строки инициирует на Сервере отчетов действия, связанные с расписанием.

  • Конфигурационные файлы.Хотя в большинстве случаев эту работу выполняют службы Reporting Services и инструменты настройки конфигурации SQL Server, вам следует знать о существовании нескольких файлов конфигурации (.NET-файлов *.config) а также о том, что изменить некоторые параметры можно только прямым редактированием таких конфигурационных файлов.
  • Дополнительные компоненты.Некоторые задачи, связанные с созданием отчетов, например, проверка подлинности или доставка, при выполнении своих обязанностей зависят от приложений сторонних разработчиков или серверов. Например, доставка по электронной почте потребует участия SMTP-сервера, а проверка подлинности - доступности определенных видов полномочий проверки подлинности. Следовательно, установка системы отчетов может быть нарушена, если нарушена связь с этими элементами,
  • Клиентские компоненты

    Службы Reporting Services предоставляют интерфейсы для того, чтобы внешние приложения могли осуществлять обмен данными с сервером. Среди доступных интерфейсов - прямой доступ через URL и API веб-служб. Не существует ограничения на количество возможных клиентских компонентов. В установке SQL Server и служб Reporting Services без дополнительной настройки доступны следующие клиентские инструменты.

  • Диспетчер отчетов.Хотя этот модуль в действительности выполняется на сервере, потому что является приложением ASP.NET, он включен в этот раздел, потому что действует в качестве клиента. Диспетчер отчетов позволяет конечным пользователям обращаться к отчетам и управлять ими в соответствии с набором полномочий, которыми они обладают. Диспетчер отчетов управляет веб-приложением для администраторов служб Reporting Services.
  • Диспетчер конфигурации служб Reporting Services.Как уже говорилось, конфигурация представляет собой критически важный аспект работы служб Reporting Services. Помимо непосредственного редактирования конфигурационных файлов, для централизованного редактирования большей части параметров конфигурации можно использовать Reporting Services Configuration Manager (Диспетчер конфигурации служб Reporting Services).
  • Диспетчер конфигурации SQL Server.С помощью этого инструмента вы сможете запустить и остановить службу Windows Reporting Service и осуществить доступ к Диспетчеру конфигурации служб Reporting Service.
  • SQL Server Management Studio.SQL Server Management Studio позволяет работать с некоторыми аспектами служб Reporting Services, например, хранением информации о пользователях, которым разрешен доступ к службам Reporting Services, ролях, совместно используемых расписаниях, папках и объектах служб Reporting Services, а также генерацией моделей отчетов SMDL (Semantic Model Definition Language, языка определения семантических моделей). SQL Server Management Studio следует рассматривать как альтернативу Диспетчеру отчетов для администраторов.Дополнительная информация Дополнительную информацию о каждом из этих компонентов можно найти в теме "Обзор компонентов Reporting Services" Электронной документации по SQL Server 2005.
  • Масштабируемость

    Хотя подробное описание того, как масштабировать установку Reporting Services с одного сервера до полномасштабной установки, в данной книге не приводится, стоит рассказать здесь о возможностях масштабирования.

    Службы Reporting Services встроены в такие стандартные технологии Microsoft, как базы данных SQL Server, ASP.NET и Internet Information Server (IIS), об этом мы рассказывали в предыдущих разделах. Таким образом, службы Reporting Services могут использовать возможности масштабирования, предоставляемые этими технологиями.

    Не вдаваясь в детали, можно считать, что службы Reporting Services можно расширить до веб-фермы, так же, как любую установку IIS, или оставить кластер SQL Server, как и в любой корпоративной установке.

    Дополнительная информация Дополнительную информацию о масштабировании служб Reporting Services можно найти в темах "Планирование развертывания службы Reporting Services", "Как установить локальную и удаленную базы данных сервера отчетов" и "Серверы отчетов: конфигурации с масштабируемым развертыванием" в Электронной документации по SQL Server 2005.

    Создание основного отчета

    Теперь, когда мы разобрались в бизнес - и архитектурных концепциях, лежащих в основе корпоративной системы отчетов в целом и службы Reporting Services в частности, давайте приступим к созданию отчетов.

    Настройка отчета

    Для создания отчета требуется выполнить несколько действий, диктуемых здравым смыслом: сначала мы создаем проект SQL Server Business Intelligence Development Studio (BIDS), который будет содержать связанные файлы, затем инструктируем BIDS о том, какие данные необходимо показать в отчете. После этого, мы определим, какие данные действительно нужны для отчета и, напоследок, хотя это имеет не последнее значение, создадим макет, протестируем и выполним развертывание нашего отчета.

    Дополнительная информация Развертывание отчетов можно выполнить через Диспетчер отчетов. Дополнительную информацию об этом можно найти в Электронной документации по SQL Server 2005, тема "Развертывание отчетов с помощью Диспетчера отчетов".

    Создаем проект отчета

  • В меню Start (Пуск) выберите All Programs,. Microsoft SQL Server 2005, SQL Server Business Intelligence Development Studio (Все программы, Microsoft SQL Server 2005, Среда разработки SQL Server Business Intelligence Development Studio). В меню File (Файл) выберите команду New (Создать), затем Project (Проект).
  • Откроется диалоговое окно New Project (Создание проекта). В панели Project Types (Типы проектов) выберите Business Intelligence Projects (Проекты бизнес-аналитики). В панели Templates выделите Report Server Project (Проект сервера отчетов). Выберите имя для этого проекта и папку назначения. Для данного проекта мы выбрали, соответственно, имена BasicReport и папку SQL2005StepByStep_Reports. Диалоговое окно должно выглядеть следующим образом:Предупреждение. В этой процедуре мы не будем использовать другой тип проектов отчета: Report Server Project Wizard (Мастер проекта сервера отчетов). Этот тип проекта выбирать не следует. Если вы все же выберете его, то после нажатия на кнопку ОК откроется окно Report Wizard (Мастера отчетов). В таком случае отмените процесс и начните снова. Мастер отчетов сокращает процесс создания отчетов и частично скрывает от вас подробности создания. Это замечательно для простых отчетов, но в нашем примере мы показываем способ, который обычно используют на практике профессионалы. Вот почему мастер отчетов здесь не рассматривается.
  • Нажмите кнопку ОК, чтобы создать проект.
  • Поскольку проект отчета не слишком сложен, в панели Solution Explorer (Обозреватель решения) почти ничего не отображается. Не беспокойтесь, именно так и должно быть. Увидеть Solution Explorer (Обозреватель решений) можно после выбора из меню View (Вид) команды Solution Explorer (Обозреватель решений).
  • Теперь мы добавим наш первый новый отчет, щелкнув правой кнопкой мыши на папке Reports (Отчеты) в Solution Explorer (Обозревателе решений) и выбрав из контекстного меню команды Add, New (Добавить, Создать элемент).Примечание. Можно также начать создание отчета с команды меню Add New Report (Добавить отчет), однако при этом вместо добавления к проекту нового отчета запустится Мастер отчетов.
  • Откроется показанное на следующем рисунке диалоговое окно Add New Item (Добавление нового элемента). Здесь нужно выбрать в панели Templates (Шаблоны) Report (Отчет) и ввести в качестве имени этого отчета BasicReport v1 (см. рис. вверху следующей страницы).
  • Нажмите кнопку Add (Добавить) для подтверждения решения.. BIDS отобразит чистый, только что созданный отчет в окне Report Designer (Конструктора отчетов), как показано на следующем рисунке:
  • Создаем общий источник данных

  • Чтобы создать проект отчета, нам нужно указать BIDS, какой источник данных следует использовать. Щелкните правой кнопкой мыши на папке Shared Data Sources (Общие источники данных) в Solution Explorer (Обозревателе решений) и выберите из контекстного меню команду Add New Data Source (Добавить новый источник данных). Откроется диалоговое окно Shared Data Source (Общий источник данных).Примечание. Можно создать отчет без использования общего источника данных, определив источник данных, связанный с набором данных отчета. В этом случае источник данных является не общим, а частным для данного отчета. Хотя эта возможность допустима в некоторых случаях, следует при любой возможности использовать общие источники данных для облегчения управления решением системы отчетов и в краткосрочном, и в долгосрочном режиме.
  • Введите в качестве имени источника данных dsAdventureWorks.Примечание. Если предполагается обращение к источнику данных не только через Microsoft SQL Server, можно выбрать поддерживаемые источники данных из раскрывающегося списка Type (Тип).
  • Строку соединения можно ввести непосредственно, но после нажатия на кнопку Edit (Изменить) вы окажетесь в знакомом диалоговом окне Connection Properties (Свойства подключения), которое показано на следующем рисунке. Заполните поля в соответствии с данными вашей системы. Для данного примера введите строку соединения с базой данных
  • Нажимая соответствующие кнопки, настройте расширенные параметры, если вы полагаете, что они необходимы в вашей системе. Кроме того, протестируйте соединение. После нажатия на кнопку OK можно проверить строку соединения, сгенерированную в диалоговом окне Shared Data Source (Общие источники данных), как показано на рисунке:
  • Обратите внимание на то, что информация проверки подлинности не отображается в строке соединения. Перейдите на вкладку Credentials (Учетные данные), чтобы просмотреть доступные варианты.
  • Нажмите кнопку ОК, чтобы создать источник данных. В папке Shared Data Sources (Общие источники данных) отображается новый источник данных. Обратите внимание на расширение имени файла - .rds.
  • Определяем набор данных

  • Теперь мы должны указать BIDS, какие данные нужно отобразить в отчете. Для этого нужно создать хотя бы один набор данных, иногда больше. Убедитесь, что вкладка Data (Данные) отображается в центре окна BIDS. Откройте раскрывающийся список Dataset (Набор данных) и выберите <New Dataset> (<Новый набор данных>).
  • После этого отобразится показанное на следующем рисунке диалоговое окно Dataset (Набор данных).
  • Введите в качестве имени для набора данных dsEmployeeSales (этот набор данных будет конечным пунктом сбора данных о продажах сотрудников).
  • Убедитесь, что этот общий источник данных выбран в раскрывающемся списке Data Source (Источник данных), а в поле Command Type (Тип команды) указано "текст". Обратите внимание на то, что альтернативой использованию текстовой команды является использование хранимой процедуры.
  • Чтобы помочь себе в создании выражения для набора данных, можно использовать более сложный конструктор запросов. Затем введите этот простой запрос в поле Query Sting (Строка запроса).
    SELECT SalesPersonID, FirstName, MiddleName, LastName, JobTitle,
    SalesYTD FROM Sales.vSalesPerson
  • Нажмите кнопку ОК, чтобы подтвердить запрос. Запрос набора данных отображается на вкладке Data (Данные), как показано на следующем рисунке (см. рис. вверху следующей страницы).
  • Можно протестировать и проверить результаты запроса, нажав кнопку Execute (Выполнить) (кнопку с красным восклицательным знаком).
  • Не удивляйтесь аскетизму открывшегося перед вами окна. Это Generic Query Designer (Обычный конструктор запросов). Его можно включать и отключать нажатием на кнопку Generic Query Designer (Обычныйконструктор запросов) на панели инструментов, как показано на рисунке.

    Отжимая и нажимая эту кнопку, вы сможете работать с полнофункциональным конструктором запросов, который показан на рисунке, или с более простым исходным вариантом.

    Примечание. Возможно, вас удивит, что для того, чтобы добраться до обычного конструктора запросов, требуется выполнить так много действий. Главная причина заключается в том, что службы Reporting Services могут использовать много различных типов запросов, например, хранимые процедуры или выражения VB.NET, а многие из них не очень хорошо приспособлены для типичного, ориентированного на реляционные таблицы, конструктора запросов. Поэтому классический конструктор запросов не является выбором по умолчанию.
  • Обратите внимание на символ звездочки ( * ), который отображается рядом с именем отчета на вкладке BasicReport v1.rdl (Проект). Эта звездочка означает, что файл содержит несохраненные изменения. Сохраните отчет, нажав кнопку Save (Сохранить) на панели инструментов. После того, как изменения будут сохранены, звездочка исчезнет.
  • Разработка макета, тестирование и уточнение отчета

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

    Создание макета отчета

  • При открытом проекте отчета перейдите на вкладку Layout (Макет). Вы увидите узкий прямоугольник с сеткой, обозначенной точками.
  • Скройте панель Solution Explorer (Обозреватель решений), отжав кнопку Автоматически скрывать, чтобы обеспечить себе дополнительное место для работы с областью конструктора отчетов.

    Предупреждение. Обратите внимание на линейку сверху и сбоку от начальной области конструктора. Возможно, вам интересно, почему эта область не соответствует размеру предпочитаемого вами формата бумаги (Letter, A4 и т. д.). Служба Reporting Services не предназначена для создания отчетов на бумаге, поэтому инструменты создания макета автоматически не привязаны к размерам бумаги.

  • В меню View выберите Toolbox (Панель элементов).
  • Перетащите элемент управления Предупреждение. Если вы слишком далеко переместите правую границу текстового поля, то заметите, что область конструктора также расширилась, чтобы вместить элемент управления. Будьте внимательны и не превышайте нужный размер страницы, поскольку службы Reporting Services не ограничивают вас в размерах. Это может привести к тому, что отчет займет более одной страницы по ширине. Чтобы исправить ситуацию, можно уменьшить ширину элементов управления, снять выделение, а затем перетащить мышью правую границу сетки обратно до ее исходного положения.
  • Теперь создайте место для хранения данных отчета. Перетащите мышью с панели элементов элемент управления Table (Таблица) и отпустите его в области конструктора, как показано на следующем рисунке. Не беспокойтесь о том, где отпустить элемент управления, поскольку он все равно займет всю ширину области конструктора. В таблице будет отображаться три строки и девять ячеек. Обратите внимание на верхнюю и левую границы таблицы (серого цвета). Они исчезают при выделении элемента управления и появляются снова, когда выделение снимается. Области серого цвета помогут при выполнении специфических операций вроде выделения целого столбца, целой строки или всей таблицы.Совет. Выделить всю таблицу может быть непросто. Щелкнув на элементе управления, вы выделите только одну ячейку; если щелкнуть за пределами элемента управления, то выделение, как и ожидалось, будет снято. Как же выделить всю таблицу? Можно воспользоваться традиционным методом выбора ячейки, для чего следует добиться отображения серых границ, а затем щелкнуть на границе поля в левом верхнем углу, или, если в центре нет элемента управления, щелкнув за пределами таблицы в области конструктора и перетащив область выделения, в которую попадут только элементы управления таблицы.
  • Выведите на экран панель Datasets (Наборы данных), выбрав из меню View (Вид) соответствующую команду. Затем разверните дерево узла dsEmployeeSales.
  • Перетащите мышью поле SalesPersonID и отпустите его в самой левой ячейке таблицы средней строки (строки Detail ). Обратите внимание на появившееся в этой ячейке выражение. Мы вернемся к нему в следующем действии.
  • Повторите операцию перетаскивания мышью в отношении полей LastName и JobTitle, заполнив, соответственно, центральную и правую ячейки области Detail (Подробности). Не беспокойтесь о столбцах FirstName и MiddleName ; их мы будем использовать позднее при построении выражения, возвращающего полное имя сотрудника.
  • Нам понадобится дополнительный столбец и дополнительное пространство для размещения поля SalesYTD. Для этого уменьшите ширину столбца SalesPersonID, щелкнув и перетащив линию между заголовками столбцов SalesPersonID и LastName. Обратите внимание на двунаправленную стрелку, в которую превращается курсор, когда он оказывается над этой линией. Также обратите внимание на то, что соответственно уменьшается и ширина таблицы.
  • Щелкните правой кнопкой мыши заголовок столбца JobTitle и выберите из контекстного меню команду Insert Column To The Right (Вставить столбец справа), чтобы добавить столбец справа от столбца JobTitle. Перетащите мышью поле SalesYTD в только что созданную ячейку строки Detail (Подробности).
  • Теперь область конструктора будет сжата с правой стороны. Если вы хотите распечатать отчет на бумаге, необходимо держать ширину области под контролем. Измените размер столбца SalesYTD в сторону уменьшения и перетащите границу области конструктора, чтобы отрегулировать ширину. Какая ширина будет правильной? Ознакомьтесь с материалом врезки "Как правильно определить ширину области конструктора".
  • Сохраните вашу работу, нажав кнопку Save (Сохранить).
  • Как правильно определить ширину области конструктора

    Ненужные пустые страницы – это один из неприятных побочных эффектов, с которым могут столкнуться разработчики отчетов при распечатке или экспорте в форматы для печати. Почему появляются эти пустые страницы? Часто этому находится простое математическое объяснение.

    В Reporting Services для определения места разрывов страницы используются три элемента: ширина страницы, ширина правого и левого поля страницы и ширина области конструктора. Обратите внимание, что я упомянул ширину области конструктора, а не используемую ширину области конструктора. Верхняя линейка – это ваш гид для определения ширины области конструктора.

    С информацией о макете страницы можно ознакомиться, выбрав из меню Report (Отчет) команду Report Properties (Свойства отчета). В диалоговом окне Report Properties (Свойства отчета) перейдите на вкладку Layout (Макет). Здесь вы найдете размеры полей страницы.

    С помощью этих значений можно рассчитать максимальную ширину области конструктора, при которой отчет при распечатке поместится по ширине страницы.

    Максимальная ширина области = Ширина страницы—Левое поле – Правое поле.

    Если для печати отчета вместо книжного формата страницы вы хотите использовать классическую альбомную ориентацию, просто поменяйте местами значения ширины(Page Width) и высоты (Page Height) страницы на вкладке Layout (Макет). Конечно, для ширины области конструктора следует использовать это новое значение ширины страницы.

    Предварительный просмотр отчета

  • Создав основу макета отчета, давайте посмотрим, как он будет выглядеть при печати. Перейдите на вкладку Preview (Просмотр) в представлении конструктора. На короткое время появится сообщение о том, что выполняется формирование отчета, после чего на экран будут выведены результаты обработки.Предупреждение. Не нажимайте кнопку Start Debugging (Начать отладку) (кнопка с зеленой стрелкой) на панели инструментов или клавишу F5. Любое из этих двух действий запустит операцию Build and Deploy (Построить и развернуть). Сейчас нам нужно только ознакомиться с предварительным просмотром отчета.

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

  • Чтобы просмотреть отчет в печатном виде, можно нажать кнопку Print Layout (Предварительный просмотр печати) на панели инструментов. Кнопка Print Layout (Предварительный просмотр печати) – это переключатель, следовательно, она остается нажатой при переходе между вкладками, пока вы ее снова не отожмете.Предупреждение. Вкладка предварительного просмотра в Reporting Services формируется модулем подготовки просмотра, который отличается от других модулей подготовки, например, модуля подготовки HTML или модуля подготовки PDF. Если посмотреть на поведение страницы, разница окажется существенной. Если нужно доставить отчет в любом определенном формате, проверьте разрывы страниц именно в этом формате, не обращайте внимания на разрывы страниц, которые вы увидите на вкладке Preview (Предварительный просмотр). Не стоит придавать значения этим разрывам, поскольку модуль подготовки предварительного просмотра не использует заданные вами параметры разрыва страниц.
  • Вернитесь на вкладку Layout (Макет), чтобы продолжить редактирование отчета.
  • Редактируем текст в ячейках таблицы

  • Нам нужно, чтобы для каждого сотрудника отображалась не фамилия, а полное имя. Этого можно добиться, отредактировав выражение при помощи перечисленных ниже действий. Давайте отредактируем название столбца. Дважды щелкните на ячейке, которая содержит текст "LastName", чтобы перейти в режим редактирования. Удалите слово "Last", чтобы осталось только слово "Name".
  • Попытка повторить эту операцию со столбцом "SalesPersonID" может вызвать затруднения, поскольку из-за того, что для него выделено слишком мало места, большая часть текста остается скрытой. Тем не менее, текст можно редактировать точно таким же способом. Измените текст, чтобы в названии столбца осталось только "ID". Можно изменить значение столбца по-другому, при помощи разных методов:
  • Щелкнув правой кнопкой мыши на ячейке и выбрав из контекстного меню команду Properties (Свойства), выведите на экран диалоговое окно свойств, показанное на следующем рисунке. В нем можно отредактировать раскрывающийся список Value (Значение).
  • Щелкнув правой кнопкой мыши на ячейке и выбрав из контекстного меню команду Expression (Выражение), выведите на экран диалоговое окно Edit Expression (Изменить выражение), как показано ниже. В этом окне можно отредактировать выражение.
  • Нажав клавишу F4 или кнопку Properties Window (Окно свойств) на панели инструментов, выведите на экран окно Properties Window (Окно свойств); можно щелкнуть и в самом окне Окне свойств, если оно уже отображается на экране. В окне Properties (Свойства) можно отредактировать раскрывающийся список Value (Значение).
  • Сохраните отчет.Предупреждение. Свойства элементов отчета можно редактировать и через диалоговое окно Properties (Свойства), и через Properties window (Окно свойств). Некоторые свойства проще изменить в одном из этих двух окон, чем в другом. Обычно лучше выбирать диалоговое окно Properties (Свойства), потому что оно предлагает больше помощи в правильной настройке свойств. Некоторые элементы, такие, как Groups (Группы), Body (Тело) или сам Report (Отчет) имеют свойства, которые показаны только в Окне свойств; у них нет своего диалогового окна Properties (Свойства).
  • Форматируем элементы

  • Щелкните ячейку, которая содержит значение поля SalesYTD (самая правая ячейка в средней строке).
  • Измените форматирование выражения, чтобы сделать его более удобным для чтения. В нашем примере, лучше выбрать диалоговое окно Properties (Свойства), а не Окно свойств, ведь в диалоговом окне гораздо больше вспомогательных возможностей, поэтому щелкнем правой кнопкой мыши на ячейке и выберем команду Properties (Свойства).
  • Перейдите на вкладку Format (Формат), которая показана на следующем рисунке. Обратите внимание на текстовое поле Format Code (Код формата) и расположенные рядом с ним кнопки.
  • Нажмите кнопку с многоточием (…), чтобы перейти в диалоговое окно Choose Format (Выбор формата). Если нажать кнопку Function (Функция), то откроется диалоговое окно Edit Expression (Изменить выражение). Этот же результат мы получим, если будем редактировать свойство Format (Формат) в Property Window (Окне свойств). Можно задать формат и через Окно свойств, но тогда нужно точно знать, какие значения указывать.
  • Выберите Currency (Валюта) и нажмите кнопку ОК. Обратите внимание на то, что значение в текстовом поле Format Code (Код формата) изменилось на "С". Коды формата, которые используются в Reporting Services - это типы форматирования .NET Framework.Дополнительная информация Дополнительную информацию о типах форматирования инфраструктуры .NET Framework можно найти в документации по .NET или в интернете по адресу http://msdn2.microsoft.com/en-us/library/fbxft59x.aspx.
  • Нажмите кнопку ОК, чтобы подтвердить изменение свойств текстового поля и просмотрите отчет, чтобы оценить изменения, которые мы сделали до сих пор.
  • Сохраните отчет.Предупреждение. Обратите внимание на том, что если вы попытаетесь сохранить отчет, находясь на вкладке Preview (Просмотр), то Конструктор отчета попросит подтвердить сохранение результатов, а не макета отчета. Чтобы сохранить макет отчета, следует покинуть вкладку Preview (Просмотр) и отобразить вкладку Layout (Макет) или Data (Данные).
  • Редактируем выражение

  • Выделите значение поля LastName (вторая ячейка слева в средней строке). Мы изменим выражение в этой ячейке, чтобы она отображала полные имена сотрудников вместо их фамилий.
  • Щелкните правой кнопкой мыши ячейку и выберите команду Expression (Выражение). Откроется диалоговое окно Edit Expression (Изменить выражение). Выражения в Reporting Services должны быть написаны с использованием синтаксиса Visual Basic .NET. Иначе выражение можно отредактировать непосредственно в ячейке, вообще не выводя никаких диалоговых окон. Последний способ прекрасно подходит для незначительных изменений, например, если нужно добавить один пробел или выполнить аналогичные действия; однако, чем более сложное редактирование требуется, тем более практичным становится использование диалогового окна Edit Expression (Изменить выражение).
  • Текущее значение выражения таково:
    =Fields!LastName.Value

    Следует обратить внимание на следующие элементы этого выражения:

  • Знак равенства (=).Знак равенства показывает, что следующий за этим знаком текст - это выражение, не являющееся простым текстом (или строкой, в терминах программирования).
  • Fields!Компонент выражения Fields! показывает, что LastName – это элемент в коллекции Fields. Дополнительную информацию о коллекциях в RDL можно найти на врезке "Коллекции Reporting Services".
  • Свойство Value (Значение).Каждый объект RDL имеет набор свойств, к которым можно получить доступ, редактируя выражение. В процессе изменения выражения в окне Edit Expression (Изменить выражение) функция Intellisence (Умный ввод) предоставит вам список свойств для каждого типа элементов.
  • Поскольку нам нужно отобразить некоторые дополнительные поля, изменим выражение следующим образом:
    =Fields!FirstName.Value  " "  Fields!MiddleName.Value  ". "  Fields!LastName.Value
  • Сохраните выражение, нажав кнопку ОК, и просмотрите отчет, чтобы ознакомиться с результатами выражения. Вы увидите, что отредактированное выражение работает в большинстве случаев, но все же не во всех. Посмотрите, например, на сотрудников с идентификаторами 277 и 279. У первого из них нет второго имени; следовательно, точка после сокращения и разделительный пробел должны опускаться. Второе имя второго сотрудника должно писаться полностью; следовательно, точка после сокращения также должна быть опущена, но разделительный пробел должен сохраниться.
  • Придется изменить это выражение, усложнив его для точности. Измените наше выражение, как показано ниже, и нажмите кнопку ОК.
    =Fields!FirstName.Value  " " 
    IIf(Len(Fields!MiddleName.Value) = 1, Fields!MiddleName.Value  ". ", "")
       IIf(Len(Fields!MiddleName.Value) > 1, Fields!MiddleName.Value  " ", "")
           Fields!LastName.Value
  • Это выражение можно ввести двумя способами: просто набрав его в поле редактирования текста или выбирая элементы из вспомогательного списка в нижней части диалогового окна. На следующем рисунке обратите внимание на функцию IIf. Поэкспериментируйте с параметрами, чтобы изучить поведение функции. Обратите внимание на то, что функция умного ввода и подсветка синтаксиса помогает правильно построить выражение.
  • Просмотрите отчет и обратите внимание на то, что проблема со вторыми именами теперь решена.
  • Сохраните отчет.
  • Добавляем итоговый столбец

  • Нам нужно добавить итоговую сумму, показывающую общий итог продаж (SalesYTD) всех продавцов. Сначала выведем на экран панель Datasets (Наборы данных), чтобы видеть поля. Разверните узел dsEmployeeSales.
  • Перетащите мышью узел SalesYTD и отпустите его в самой правой ячейке нижней строки таблицы, как раз под ячейкой SalesYTD в строке Подробностей.
  • Обратите внимание на то, что результирующее выражение выглядит следующим образом:
    =Sum(Fields!SalesYTD.Value)

    Программа конструктора отчетов определила, что вы хотите добавить итоговую сумму, так как операция drop (отпустить) была выполнена в строке Table Footer (Нижний колонтитул), а не в строке Detail (Подробности).

  • Поскольку элемент совершенно новый, свойство Format (Формат) не заполнено. Это значит, что сводка будет отображать числовой формат, отличающийся от столбца, расположенного выше. Чтобы исправить это несоответствие, откройте Properties window (Окно свойств) и просто введите для свойства формата значение "С".
  • Сохраните отчет.
  • Добавляем визуальной привлекательности

    Добавление некоторого визуального форматирования предназначено для того, чтобы сделать отчет более удобным для чтения и попрактиковаться в форматировании в Report Designer (Конструкторе отчетов),

  • Выделите все названия столбцов, щелкнув ячейку ID и перетащив рамку выделения через всю верхнюю строку.
  • Выведите на экран Properties window (Окно свойств) и найдите группу свойств Font (Шрифт).
  • Обратите внимание на символ "плюс" (+) на серой границе слева. Он обозначает, что мы имеем дело с группой свойств. Щелкните его, чтобы развернуть имеющиеся свойства Font (Шрифт).
  • Выберите для свойства FontWeight значение Bold. Это можно сделать, введя слово Bold в поле или выбрав Bold из раскрывающегося списка.

    Обратите внимание на текст итогового значения группы свойств Font: "Normal; Arial; 10pt; Bold". Значения свойств можно изменить, не раскрывая узлы, а просто набирая значения справа в этой строке.

  • Найдите группу свойств BorderStyle и разверните ее.
  • Задайте для свойства Bottom значение Solid.
  • В области конструктора выделите всю строку Details (Подробности), щелкнув на серой кнопке заголовка строки Details (Подробности), которая находится с левой стороны таблицы.
  • В Окне свойств задайте для группы свойств
  • Выделите всю строку Table Footer (Нижний колонтитул) и задайте для свойства BorderStyle.Top значение Solid.
  • Выделите ячейку GrandTotal и задайте значение свойства FontWeight Bold.
  • Просмотрите отчет для оценки изменений.
  • Перейдите на вкладку Layout (Макет) и сохраните отчет.
  • Условное задание значений свойств

    RDL в предоставлении мощного набора функций очень зависит от выражений. Почти в любом окне для настройки свойств, можно задавать значения свойств через выражение, вместо того, чтобы явно указывать его значение. Можно использовать эту функцию, чтобы выделить торговых представителей, не достигших своей цели.

  • Выделите ячейку SalesYTD в строке Details (Подробности).
  • Найдите в Properties Window (Окне свойств) свойство Color.
  • Просмотрите доступные значения свойства, щелкнув стрелку раскрывающегося списка. Обратите внимание на значение <Expression> (<Выражение>) в этом раскрывающемся списке. Щелкните его, чтобы вывести на экран диалоговое окно Edit Expression (Изменить выражение), показанное на рисунке.
  • Обратите внимание на свойства цвета, доступные как константы. Измените выражение следующим образом:
    =IIf(Fields!SalesYTD.Value<3500000, "Red", "OliveDrab")

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

  • Подтвердите изменение выражения, нажав кнопку ОК. Ознакомьтесь с результатами на вкладке Preview (Просмотр).
  • Объедините две функции IIF, чтобы обеспечить дополнительную гибкость, например:
    =IIf(Fields!SalesYTD.Value<3500000, "Red", IIf(Fields!SalesYTD.Value>5000000, "OliveDrab", "Black"))
  • Просмотрите результаты, а затем перейдите на вкладку Layout (Макет) и сохраните отчет.
  • Сортируем результаты

    Отчет, который мы построили к настоящему моменту, отображает записи беспорядочно. Поскольку информация о продажах значима для данного отчета, то соответствующая сортировка данных – это естественный вариант.

  • Щелкните мышью в любом месте таблицы, чтобы появились серые границы таблицы.
  • Щелкните правой кнопкой мыши левый верхний угол границы таблицы и выберите из контекстного меню команду Properties (Свойства).
  • В диалоговом окне Table Properties (Свойства таблицы) перейдите на вкладку Sorting (Сортировка).
  • В сетке Sort On (Сортировать по) выберите из раскрывающегося списка поле Fields!SalesYTD в столбце Expression (Выражение). Обратите внимание на знак равенства (=), появившийся перед выражением.Предупреждение. Имейте в виду, что в диалоговых окнах много полей ввода, в которых нужно вводить выражение, а не имя объекта или свойства. Если в этих случаях вы зададите имя объекта или свойства, то не получите ожидаемых результатов.
  • Выберите из раскрывающегося списка в столбце Direction (Направление) значение Descending (По убыванию).
  • Подтвердите изменения, нажав кнопку ОК. Сохраните отчет и просмотрите результаты на вкладке Preview (Просмотр). Затем снова перейдите на вкладку Layout (Макет).
  • Разрешаем сортировку результатов пользователям

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

  • Щелкните правой кнопкой мыши текстовую ячейку SalesYTD в строке Header (Заголовок) и выберите из контекстного меню команду Properties (Свойства).
  • Перейдите на вкладку Interactive Sort (Интерактивная сортировка).
  • Установите флажок Add An Interactive Sort Action To This Textbox (Добавить действие интерактивной сортировки к этому полю). Задайте остальные значения в соответствии со следующим рисунком. (см. рис. вверху следующей страницы).
  • Подтвердите изменения, нажав кнопку ОК. Сохраните отчет и просмотрите результаты на вкладке Preview (Просмотр).
  • Обратите внимание на двунаправленную стрелку рядом с названием SalesYTD. Если щелкнуть эту стрелку, то содержимое таблицы будет соответствующим образом отсортировано.
  • Повторите действия с 1 по 5 для заголовков остальных столбцов, чтобы разрешить интерактивную сортировку любого из этих столбцов. Обратите внимание на то, что, когда эти действия выполняются в отношении столбца выражений Name, само выражение недоступно. Если вы хотите выполнять сортировку по выражению, нужно скопировать выражение, то есть продублировать его. Чтобы справиться с проблемой, нужно изучить в следующем разделе, как добавить программный код, который может быть общим в пределах отчета.
  • Сохраните отчет и просмотрите изменения на вкладке Preview (Просмотр), затем, когда закончите просмотр, перейдите на вкладку Layout (Макет).
  • Фильтрация данных

    Для большинства отчетов требуется, чтобы пользователь указал определенный тип фильтра для применения к данным. Следовательно, нужно дать пользователю способ указать, какой фильтр данных следует применить. Инструмент для выполнения данной задачи – это параметр отчета. В этом разделе мы создадим параметр для фильтрации списка сотрудников по закрепленным за ними территориям.

  • Перейдите на вкладку Data (Данные).
  • Измените запрос, добавив предложение
  • В меню Report (Отчет) выберите команду Report Parameters (Параметры отчета).
  • Вы увидите, что Конструктор отчетов добавил параметр, выполнив синтаксический анализ запроса к набору данных.
  • Позже мы отредактируем этот параметр, чтобы сделать его более дружественным к пользователю, но сейчас давайте оставим все, как есть. Нажмите кнопку ОК, чтобы закрыть диалоговое окно Report Parameters (Параметры отчета), и просмотрите отчет.
  • Введите в текстовое поле

    Безусловно, не лучшее решение - просить пользователей запомнить и безошибочно ввести все имена территорий. Следует предложить им некоторую помощь, предоставив возможность выбрать нужное название из списка доступных территорий. Для решения задачи нужно создать новый набор данных и заполнить значения параметра при помощи его вывода.

  • Перейдите на вкладку Data (Данные) и сохраните отчет.
  • Откройте раскрывающийся список Dataset (Набор данных) и выберите <New Dataset> (<Новый набор данных>).
  • Измените поля Name (Имя) и Query String (Строка запроса), чтобы они соответствовали значениям, показанным на рисунке, после чего нажмите кнопку ОК (см. рис. вверху следующей страницы).
  • Чтобы использовать этот запрос (или набор данных) в качестве значений параметра, нужно изменить свойства параметра. В меню Report (Отчет) выберите команду Report Parameters (Параметры отчета).
  • Измените свойства параметра таким образом, чтобы они соответствовали следующим значениям (обратите внимание, что нужно отредактировать также Prompt (Приглашение) и Default Values (Значения по умолчанию)):
  • Подтвердите изменения, нажав кнопку ОК.
  • Сохраните отчет и просмотрите его. Обратите внимание, что отчет обрабатывается, не ожидая, пока пользователь выберет значение из раскрывающегося списка. Причина заключается в том, что в свойствах параметра объявлено значение по умолчанию. Оставьте значение по умолчанию пустым, чтобы изменить это поведение.
  • Выберите из раскрывающегося списка Territory To Show (Отображаемые территории) и нажмите кнопку View Report (Просмотреть отчет), чтобы выполнить обработку отчета с новым значением фильтра.
  • Добавление программного кода к отчету

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

    Для решения этой проблемы следует вставить код централизованно, либо из самого отчета, либо из внешней сборки, ссылающейся на этот отчет. В этой лекции мы рассмотрим только первый случай.

    Дополнительная информация Чтобы больше узнать об использовании внешних сборок в отчетах, ознакомьтесь с темой "Использование пользовательских сборок в отчетах" в Электронной документации по SQL Server 2005.

    Мы разработаем функцию отчета для централизации вычислений полных имен сотрудников. Следовательно, мы используем выражение, которое ввели в предыдущем разделе, в ячейке под названием столбца 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

    Некоторые интересные свойства устанавливаются автоматически Конструктором отчета, пока мы разрабатываем макет. Вам нужно знать об этих свойствах и их значении, чтобы полностью разобраться в редактировании отчета.

  • Все элементы отчета идентифицируются по имени. Свойство , , table2... Хотя такие имена вполне традиционны и их можно использовать, все же они не очень хорошо подходят для понятного программирования. В мире программирования рекомендуется давать каждому элементу без исключения дружественное к пользователю имя, которое помогает идентифицировать этот элемент при написании кода. Однако в Конструкторе отчетов многие объекты существуют без нашего ведома, пока они по какой-либо причине нам не понадобятся. Следовательно, хотя мы не можем рекомендовать изменять имя каждого элемента, в целом это неплохая практика. В любом случае, вам следует изменять хотя бы имена элементов, используемых в выражениях. Чтобы просмотреть, какие именованные объекты существуют в отчете, можно развернуть раскрывающийся список в верхней части Окна свойств. Есть и другой способ - можно просмотреть непосредственно файл RDL XML и выполнить поиск атрибута Name (Имя) в элементах.
  • Очень важным является также свойство Dataset binding. Некоторые объекты отчета, например, те, которые являются контейнерами или областями данных, "волшебным" образом знают, откуда они должны извлекать данные. Если вы посмотрите значение свойства Dataset на вкладке объекта отчета Table (Таблица), который содержит несколько полей, вы заметите, что в качестве значения этого свойства установлено имя набора данных. В нашем примере это значение - dsEmployeeSales. Эта привязка определяет источник данных для всех объектов, зависимых от данных, внутри этого объекта контейнера. Если вы проверите значение этого свойства в только что созданной таблице, то обнаружите, что оно остается незаполненным до тех пор, пока вы не перетащите в него поле при помощи мыши или не зададите привязку вручную.
  • Коллекции Reporting Services

    Кроме коллекции , , ReportItems и User. Каждая из этих коллекций объединяет различные типы объектов.

  • Fields. Ссылается на поля, содержащиеся в определенном наборе данных. При использовании коллекции Fields в области данных, например, в таблице, предполагается набор данных, к которому она принадлежит вследствие привязки области данных (привязка области данных устанавливается через свойство Dataset области данных). При использовании вне области данных, коллекция Fields требует определения области действия (путем явного назначения имени набора данных).
  • Globals. Содержит такие объекты, как PageNumber, TotalPages, ReportFolder и ReportName. Элементы из этой коллекции вам придется использовать достаточно часто.
  • Parameters. Содержит все параметры, объявленные в отчете. Если отчет объявляет какие-либо параметры, то их свойства доступны через эту коллекцию.
  • ReportItems. Включает все текстовые поля отчета. Не забывайте, что ячейки таблицы - это тоже текстовые поля. Следовательно, можно обратиться к нужному набору объектов через эту коллекцию.
  • User. Содержит два объекта: User и Language ; однако, к этим объектам можно обратиться только через коллекцию User.
  • Дополнительная информация Дополнительную информацию об этом можно найти в Электронной документации по SQL Server 2005, тема "Использование глобальных коллекций в выражениях(Reporting Services)".

    Заключение

    Из этой лекции вы узнали, что такое система отчетов предприятия, и получили некоторые сведения по планированию отчетов. Кроме того, в лекции рассматривалась архитектура служб Reporting Services, ее основные компоненты и задачи, выполняемые каждым из них.

    Вы поэкспериментировали с процедурами разработки основного отчета: это создание отчета, настройка источника данных и запроса к данным, создание и редактирование макета отчета, добавление программного кода для выполнения общих операций, а также придание отчету некоторой интерактивности.

    В Электронной документации по SQL Server 2005 есть дополнительная информация по каждой из этих тем. Рекомендуется изучить области данных list (список) и matrix (матрица), группирование, область действия выражения, каскадирование параметров, работа с функциями видимости, диаграммы, вложенные отчеты, культура использования языка и отчеты служб Analysis Services.

    Краткий справочник по 8 лекции

    Чтобы Выполните следующие действия
    Создать отчет В BIDS выберите из меню File (Файл) команды New, Project (Создать, Проект). Выделите шаблон Report Server Project (Проект сервера отчетов) и нажмите кнопку ОК. Щелкните правой кнопкой мыши папку Reports (Отчеты)в Solution Explorer (Обозревателе решений) и выберите Add, New Item (Добавить, Создать элемент).
    Запустить мастер отчетов В BIDS выберите из меню File (Файл) команды New, Project (Создать, Проект). Выделите шаблон Report Server Project Wizard (Мастер проекта сервера отчетов) и нажмите кнопку ОК.
    Создать общий источник данных Щелкните правой кнопкой мыши папку Shared Data Sources (Общие источники данных) в Solution Explorer (Обозревателе решений) и выберите из контекстного меню команду Add New Data Source (Добавить новый источник данных).
    Определить набор данных На вкладке Data (Данные) в окне BIDS выберите из раскрывающегося списка Dataset (Набор данных) команду <New Dataset>.
    Добавить в отчет Перетащите элемент управления Table (Таблица) из панели элементов в область конструктора.
    Связать данные в таблице с отчетом Перетащите мышью поле из панели Dataset (Набор данных) и отпустите его в ячейке таблицы.
    Выполнить предварительный просмотр отчета В окне BIDS перейдите на вкладку Preview (Просмотр).
    Форматировать элемент управления отчетом Щелкните правой кнопкой мыши элемент управления и выберите Properties (Свойства), чтобы вывести на экран диалоговое окно Properties (Свойства); или выберите объект, выведите на экран Properties window (Окно свойств) и отредактируйте свойства в этом окне.
    Сохранить отчет Нажмите кнопку Save (Сохранить) на панели инструментов.
    Добавить итог в таблицу отчета Перетащите мышью поле, для которого нужно вычислить итог, из панели Dataset (Набор данных) и отпустите его в поле нижнего колонтитула таблицы.
    Условно задать свойство в отчете Выберите пункт <Expression> в раскрывающемся списке свойств. В диалоговом окне Edit Expression (Изменить выражение) введите инструкцию IIf.
    Выполнить сортировку содержимого основе значений в столбце В диалоговом окне Properties (Свойства) задайте поля сортировки на вкладке Sorting (Сортировка).
    Разрешить пользователям интерактивную сортировку данных В диалоговом окне Properties (Свойства) ячейки флажок Add An Interactive Sort Action To This Textbox (Добавить действие интерактивной сортировки к этому полю).
    Настроить фильтр для данных отчета Измените запрос, на котором строится отчет, добавив в него предложение WHERE, которое использует параметр. В меню Report (Отчет) выберите команду Report Parameters (Параметры отчета).
    Страницы:

    Главная задача пользовательского приложения базы данных - это управление реальными данными через добавление, изменение данных, удаление устаревших данных и т. д. Следовательно, вполне логично, что разработчики концентрируются главным образом на этих функциях. Однако у приложений есть еще одно важное свойство - обеспечить пользователей информацией, которая им нужна для длительного пользования. Эти долгосрочные задачи включают возможность перенести данные на бумагу и проанализировать сводные или архивные данные.

    Разработчики приложений для обеспечения этих функций могут использовать традиционные методы, например, запросы, бизнес-объекты и сетки данных. Однако для сводной информации необходимы сложные макеты с версткой, промежуточными итогами и условным форматированием. Эти макеты не так просто разрабатывать и обслуживать с помощью классических инструментов разработки.

    Кроме того, некоторые потребители данных, предоставляемых приложением, никогда не имеют дела с самим приложением. В такой ситуации часто оказываются менеджеры или сотрудники, работающие удаленно. Эта группа пользователей предпочитает получать данные приложения по электронной почте или на мобильные устройства по заранее составленному расписанию.

    Поскольку эти требования встречаются довольно часто, некоторые издатели программного обеспечения предоставляют встроенные решения по созданию отчетов, в том числе, для предприятий. В этой лекции рассказывается о том, как отвечают этим требованиям службы Reporting Services в Microsoft SQL Server 2005.

    Требования к решению создания отчетов

    Вот некоторые из требований, которым должно отвечать решение для создания отчетов:

  • Обеспечение пользователей информацией длительного потребления
  • Возможность создания копии информации на бумаге
  • Возможность получения сводных, аналитических и архивных данных
  • Предоставление простого пользовательского интерфейса для создания сложных макетов отчета, включающих вложенные отчеты, промежуточные итоги и условное форматирование.
  • Обеспечение функции распределения отчетов по электронной почте, на мобильные устройства и другие электронные носители
  • Обеспечение планирования создания отчетов
  • Обеспечение средств администрирования системы создания отчетов
  • Возможность установки расширений встроенных функций
  • В следующих разделах подробно рассматриваются все эти функции служб Reporting Services.

    Создание отчетов

    Точно так же, как Excel или Word нуждаются в формате файла ( .xls или .doc ), который включает данные и информацию, относящиеся к работе этих приложений, решениям для создания отчетов нужен файл описания отчета. Службы Microsoft Reporting Services используют для этого файлы Report Definition Language (Языка описания отчетов) RDL. RDL-файлы - это XML-файлы, которые соответствуют открытой схеме.

    Следовательно, все, что нам нужно для создания отчетов, совместимых с Reporting Services - это инструмент, позволяющий создавать XML (RDL)-файлы. При определенной настойчивости файл описания отчета можно создать даже в Блокноте. К счастью, этот способ обычно не используется для создания отчетов. Microsoft SQL Server 2005 позволяет создавать проекты отчетов в Microsoft SQL Server Business Intelligence Development Studio (BIDS) при помощи классического интерфейса макетирования.

    Размещение отчетов

    После создания описания отчета его следует разместить в таком месте, где он будет доступен для поиска и обработки приложением и/или пользователями. Службы Reporting Services включают инфраструктуру, необходимую для хранения отчетов в централизованном защищенном репозитории.

    Размещение производится тремя различными методами: через интерфейс BIDS, посредством загрузки RDL-файлов из Report Manager (Диспетчера отчетов) или через создание сценария выполнения операции загрузки RDL-файла и использование утилиты rs.exe для выполнения этого сценария.

    Доступ к отчетам

    После размещения отчета определенный механизм должен обеспечить пользователю и/или приложениям возможность найти нужный отчет и запросить его обработку. Службы Reporting Services включают адаптированное к нуждам администраторов и интерактивных пользователей веб-приложение Report Manager (Диспетчер отчета). Для автоматического доступа через приложения службы Reporting Services имеют несколько интерфейсов прикладного программирования (API).

    Доставка отчетов

    По умолчанию, для вывода обработки отчета используется формат HTML 4.0. Для пользователей и/или приложений, которым нужен вывод в другом формате, предоставлена функция экспорта. Службы Reporting Services включают не требующую настройки поддержку для самых популярных форматов, таких, как Acrobat (PDF), Microsoft Excel и HTML. Кроме того, службы Reporting Services по умолчанию предоставляют возможность доставки готовых отчетов в файловые хранилища или отправки их по электронной почте.

    Дополнительные возможности служб Reporting Services

    Возможно, вы заметили, что в описании предыдущих функций присутствовали выражения "не требующие настройки" и "по умолчанию". Службы Reporting Services – это расширяемая платформа, которая допускает добавление пользовательского программного кода по нескольким направлениям: безопасность, доступ к источникам данных и доставка. Блоки пользовательского кода по сути представляют собой сборки .NET, которые должны быть зарегистрированы в службах Reporting Services.

    Администрирование служб Reporting Services

    Как уже отмечалось выше, одной из задач системы отчетов на предприятии является предоставление отчетов любому пользователю предприятия в предпочитаемом им формате и месте. Безусловно, не все пользователи должны иметь доступ ко всем отчетам компании, и не всем он будет предоставлен. Следовательно, службы Reporting Services предоставляют среду создания отчетов для целей администрирования.

    Важным преимуществом корпоративной системы отчетности является возможность запланировать обработку отчетов. Эта функция позволяет администраторам решить, когда и с какой периодичностью проводить обработку отчетов. Например, администратор может запланировать создание определенных отчетов по завершении определенных процессов или не допустить обработки пользователями больших отчетов в рабочее время. Используя эту функцию Reporting Services, администратор может отрегулировать рабочую нагрузку системы отчетности в соответствии с требованиями бизнеса данного предприятия и реальными возможностями системы.

    Упрощенные механизмы системы отчетности

    К этому моменту вы уже должны понимать, что корпоративная система отчетности - это полнофункциональное, достаточно сложное бизнес-решение, которое предназначено для обеспечения решений в среде создания отчетов по требованию. Но что делать, если потребности в создании отчетов не такие масштабные, или приложение вообще не использует веб-сервер?

    В Microsoft Visual Studio 2005 есть два элемента управления просмотром и обработкой отчетов, которые позволяют использовать ранее упомянутую инфраструктуру сервера и могут применяться для локального хранения, обработки и доставки отчетов. Обратите внимание на то, что эти элементы управления входят в состав Visual Studio 2005, а не в Microsoft SQL Server 2005.

    Что следует учитывать при проектировании отчета

    В этой книге надлежащее планирование проектирования отчетов не рассматривается, однако стоит отметить, что план должен быть составлен до начала создания отчета. План создания отчета используется для идентификации и анализа общих требований к отчету по нескольким направлениям, в том числе:

  • Содержание отчета.Просмотр каталога образцов отчетов даст вам достаточно глубокое представление обо всех необходимых функциях системы отчетов. Этот обзор поможет найти возможности оптимизации, например, объединение двух аналогичных отчетов в один отчет.
  • Форматирование.Подбор заголовков, колонтитулов, информации об управлении версиями, авторе, дате создания, и аналогичных элементов, которые следует включать во все отчеты.
  • Контроль исходного кода.Файлы определения отчета должны учитывать исходный код, поэтому рекомендуется использовать стратегию контроля исходного кода. Кроме того, поскольку отчет может воспроизводить в печатной или электронной форме документы, имеющие свой жизненный цикл, рекомендуется помещать версию отчета для создания документов на видном месте в каждом отчете, чтобы можно было легко определить, какая версия отчета была использована для получения результатов. Версии могут иметь большие или меньшие номера.
  • Источники данных и безопасность.Пользователи могут требовать, чтобы отчет отображал различные результаты, на основании которых актуально запрашивается обработка отчета. В процессе планирования следует собрать информацию о том, какой тип обеспечения безопасности должен применяться, и о деталях авторизации пользователя для просмотра, обработки и редактирования каждого отчета или пакета отчетов.
  • Жизненный цикл отчета.Следует знать определенные аспекты жизненного цикла каждого отчета, например, периодичность его обработки, количество пользователей, которым нужна результирующая информация и время, необходимое для обработки отчета. С помощью этой информации можно принимать обоснованные решения о проектах отчетов.
  • Каналы и форматы доставки отчетов.Проекты отчетов и упомянутые ранее характеристики будут зависеть от целевого формата доставки (text, RTF, PDF, Excel) и канала доставки (папка с файлами, протокол SMTP, просмотр через интернет, просмотр на карманном компьютере (PDA)). Если вы соберете эту информацию и учтете ее на этапе планирования, то получите определенные преимущества.
  • Архитектура служб Reporting Services

    Службы Reporting Services состоят из нескольких функциональных блоков. Каждый блок выполняет одну или несколько задач, или имеет разные обязанности по отношению к целостному решению. Функции системы отчетов охватывают различные области, поэтому архитектура служб Reporting Services должна обладать достаточной гибкостью. Таким образом, компоненты распределены по различным областям сервера (или серверов) решения, как показано на рис. 8.1.

    (рис 8.1) Архитектура служб Reporting Services в Microsoft SQL Server 2005

    Компоненты сервера

    Службы Reporting Services - это серверный продукт, следовательно, большая часть компонентов этой службы размещается на сервере.

  • Базы данных служб Reporting Services.Базы данных служб Reporting Services хранят метаданные решений, сохраненные отчеты, информацию, имеющую отношению к сеансам и все, что необходимо для обслуживания состояния сервера. Службы Reporting Services управляют двумя базами данных: ReportServer, которая включает всю постоянную информацию, и ReportServerTempDB, которая содержит всю временную информацию. Эти базы данных можно найти в каталоге баз данных SQL Server, как любые обычные базы данных.
  • Служба Windows сервера отчетов.Служба Windows сервера отчетов отвечает за инициализацию и обслуживание серверов, а также за вывод процессов планирования и доставки, с помощью доступных расширений доставки.
  • Веб-служба сервера отчетов.Службы Reporting Services взаимодействуют с внешним миром, главным образом, через интерфейс веб-службы. Действительно, именно этот интерфейс использует Диспетчер отчетов для выполнения своих обязанностей. Доступны две веб-службы: ReportingServices2005 (для управления) и ReportExecutionService (для выполнения отчетов).
  • Эти два блока зависят от некоторых функциональных модулей, в том числе, от различных обработчиков и расширений.

  • Обработчик сервера отчетов.Этот модуль делает всю основную работу по синтаксическому анализу определения отчета, запросу данных от расширения обработки данных, выполнения вычислений и отправке вывода на расширение интерпретации для форматирования вывода при необходимости.
  • Обработчик планирования и доставки.Отвечает за запуск и обслуживание всех запланированных и завершившихся процессов, а также за передачу вывода соответствующему расширению доставки. Модуль взаимодействует с обработчиком сервера отчетов и службой Агент SQL Server.
  • Расширение проверки подлинности.Этот модуль отвечает за проверку подлинности и авторизацию пользователей, обращающихся к службам Reporting Services. Для использования пользовательских или неподдерживаемых механизмов проверки подлинности необходимо создать и зарегистрировать пользовательские сборки.
  • Расширение обработки данных.Данный модуль отвечает за обработку взаимодействия с источниками данных. Источники данных, которые не требуют дополнительной настройки - это SQL Server, службы Analysis Services, Oracle, OLE DB, ODBC, поставщики данных ADO.NET и XML. Для доступа к неподдерживаемым базам данных необходимо создать и зарегистрировать пользовательские сборки.
  • Расширение интерпретации.Службы Reporting Services используют это расширение для формирования окончательной интерпретации отчета в выбранном формате. В Reporting Services имеется несколько расширений подготовки. HTML, PDF, Excel, текст с разделителями "запятая" (CSV), XML, и Image. Чтобы перевести отчеты в дополнительные форматы, следует создать и зарегистрировать пользовательские сборки.
  • Служба Агент SQL Server.Службы Reporting Services используют Агент SQL Server для обработки всех задач, связанных с планированием. Службы Reporting Services создают и удаляют задания Агента SQL Server в определенной им последовательности. Имена заданий, которые генерируются службами Reporting Services, начинаются с GUID, и могут быть использованы в списке заданий Агента SQL Server.

    Эти задания выполняют очень простую работу: они вставляют в базу данных службы Reporting Services строку "schedule fired". Вставка этой строки инициирует на Сервере отчетов действия, связанные с расписанием.

  • Конфигурационные файлы.Хотя в большинстве случаев эту работу выполняют службы Reporting Services и инструменты настройки конфигурации SQL Server, вам следует знать о существовании нескольких файлов конфигурации (.NET-файлов *.config) а также о том, что изменить некоторые параметры можно только прямым редактированием таких конфигурационных файлов.
  • Дополнительные компоненты.Некоторые задачи, связанные с созданием отчетов, например, проверка подлинности или доставка, при выполнении своих обязанностей зависят от приложений сторонних разработчиков или серверов. Например, доставка по электронной почте потребует участия SMTP-сервера, а проверка подлинности - доступности определенных видов полномочий проверки подлинности. Следовательно, установка системы отчетов может быть нарушена, если нарушена связь с этими элементами,
  • Клиентские компоненты

    Службы Reporting Services предоставляют интерфейсы для того, чтобы внешние приложения могли осуществлять обмен данными с сервером. Среди доступных интерфейсов - прямой доступ через URL и API веб-служб. Не существует ограничения на количество возможных клиентских компонентов. В установке SQL Server и служб Reporting Services без дополнительной настройки доступны следующие клиентские инструменты.

  • Диспетчер отчетов.Хотя этот модуль в действительности выполняется на сервере, потому что является приложением ASP.NET, он включен в этот раздел, потому что действует в качестве клиента. Диспетчер отчетов позволяет конечным пользователям обращаться к отчетам и управлять ими в соответствии с набором полномочий, которыми они обладают. Диспетчер отчетов управляет веб-приложением для администраторов служб Reporting Services.
  • Диспетчер конфигурации служб Reporting Services.Как уже говорилось, конфигурация представляет собой критически важный аспект работы служб Reporting Services. Помимо непосредственного редактирования конфигурационных файлов, для централизованного редактирования большей части параметров конфигурации можно использовать Reporting Services Configuration Manager (Диспетчер конфигурации служб Reporting Services).
  • Диспетчер конфигурации SQL Server.С помощью этого инструмента вы сможете запустить и остановить службу Windows Reporting Service и осуществить доступ к Диспетчеру конфигурации служб Reporting Service.
  • SQL Server Management Studio.SQL Server Management Studio позволяет работать с некоторыми аспектами служб Reporting Services, например, хранением информации о пользователях, которым разрешен доступ к службам Reporting Services, ролях, совместно используемых расписаниях, папках и объектах служб Reporting Services, а также генерацией моделей отчетов SMDL (Semantic Model Definition Language, языка определения семантических моделей). SQL Server Management Studio следует рассматривать как альтернативу Диспетчеру отчетов для администраторов.Дополнительная информация Дополнительную информацию о каждом из этих компонентов можно найти в теме "Обзор компонентов Reporting Services" Электронной документации по SQL Server 2005.
  • Масштабируемость

    Хотя подробное описание того, как масштабировать установку Reporting Services с одного сервера до полномасштабной установки, в данной книге не приводится, стоит рассказать здесь о возможностях масштабирования.

    Службы Reporting Services встроены в такие стандартные технологии Microsoft, как базы данных SQL Server, ASP.NET и Internet Information Server (IIS), об этом мы рассказывали в предыдущих разделах. Таким образом, службы Reporting Services могут использовать возможности масштабирования, предоставляемые этими технологиями.

    Не вдаваясь в детали, можно считать, что службы Reporting Services можно расширить до веб-фермы, так же, как любую установку IIS, или оставить кластер SQL Server, как и в любой корпоративной установке.

    Дополнительная информация Дополнительную информацию о масштабировании служб Reporting Services можно найти в темах "Планирование развертывания службы Reporting Services", "Как установить локальную и удаленную базы данных сервера отчетов" и "Серверы отчетов: конфигурации с масштабируемым развертыванием" в Электронной документации по SQL Server 2005.

    Создание основного отчета

    Теперь, когда мы разобрались в бизнес - и архитектурных концепциях, лежащих в основе корпоративной системы отчетов в целом и службы Reporting Services в частности, давайте приступим к созданию отчетов.

    Настройка отчета

    Для создания отчета требуется выполнить несколько действий, диктуемых здравым смыслом: сначала мы создаем проект SQL Server Business Intelligence Development Studio (BIDS), который будет содержать связанные файлы, затем инструктируем BIDS о том, какие данные необходимо показать в отчете. После этого, мы определим, какие данные действительно нужны для отчета и, напоследок, хотя это имеет не последнее значение, создадим макет, протестируем и выполним развертывание нашего отчета.

    Дополнительная информация Развертывание отчетов можно выполнить через Диспетчер отчетов. Дополнительную информацию об этом можно найти в Электронной документации по SQL Server 2005, тема "Развертывание отчетов с помощью Диспетчера отчетов".

    Создаем проект отчета

  • В меню Start (Пуск) выберите All Programs,. Microsoft SQL Server 2005, SQL Server Business Intelligence Development Studio (Все программы, Microsoft SQL Server 2005, Среда разработки SQL Server Business Intelligence Development Studio). В меню File (Файл) выберите команду New (Создать), затем Project (Проект).
  • Откроется диалоговое окно New Project (Создание проекта). В панели Project Types (Типы проектов) выберите Business Intelligence Projects (Проекты бизнес-аналитики). В панели Templates выделите Report Server Project (Проект сервера отчетов). Выберите имя для этого проекта и папку назначения. Для данного проекта мы выбрали, соответственно, имена BasicReport и папку SQL2005StepByStep_Reports. Диалоговое окно должно выглядеть следующим образом:Предупреждение. В этой процедуре мы не будем использовать другой тип проектов отчета: Report Server Project Wizard (Мастер проекта сервера отчетов). Этот тип проекта выбирать не следует. Если вы все же выберете его, то после нажатия на кнопку ОК откроется окно Report Wizard (Мастера отчетов). В таком случае отмените процесс и начните снова. Мастер отчетов сокращает процесс создания отчетов и частично скрывает от вас подробности создания. Это замечательно для простых отчетов, но в нашем примере мы показываем способ, который обычно используют на практике профессионалы. Вот почему мастер отчетов здесь не рассматривается.
  • Нажмите кнопку ОК, чтобы создать проект.
  • Поскольку проект отчета не слишком сложен, в панели Solution Explorer (Обозреватель решения) почти ничего не отображается. Не беспокойтесь, именно так и должно быть. Увидеть Solution Explorer (Обозреватель решений) можно после выбора из меню View (Вид) команды Solution Explorer (Обозреватель решений).
  • Теперь мы добавим наш первый новый отчет, щелкнув правой кнопкой мыши на папке Reports (Отчеты) в Solution Explorer (Обозревателе решений) и выбрав из контекстного меню команды Add, New (Добавить, Создать элемент).Примечание. Можно также начать создание отчета с команды меню Add New Report (Добавить отчет), однако при этом вместо добавления к проекту нового отчета запустится Мастер отчетов.
  • Откроется показанное на следующем рисунке диалоговое окно Add New Item (Добавление нового элемента). Здесь нужно выбрать в панели Templates (Шаблоны) Report (Отчет) и ввести в качестве имени этого отчета BasicReport v1 (см. рис. вверху следующей страницы).
  • Нажмите кнопку Add (Добавить) для подтверждения решения.. BIDS отобразит чистый, только что созданный отчет в окне Report Designer (Конструктора отчетов), как показано на следующем рисунке:
  • Создаем общий источник данных

  • Чтобы создать проект отчета, нам нужно указать BIDS, какой источник данных следует использовать. Щелкните правой кнопкой мыши на папке Shared Data Sources (Общие источники данных) в Solution Explorer (Обозревателе решений) и выберите из контекстного меню команду Add New Data Source (Добавить новый источник данных). Откроется диалоговое окно Shared Data Source (Общий источник данных).Примечание. Можно создать отчет без использования общего источника данных, определив источник данных, связанный с набором данных отчета. В этом случае источник данных является не общим, а частным для данного отчета. Хотя эта возможность допустима в некоторых случаях, следует при любой возможности использовать общие источники данных для облегчения управления решением системы отчетов и в краткосрочном, и в долгосрочном режиме.
  • Введите в качестве имени источника данных dsAdventureWorks.Примечание. Если предполагается обращение к источнику данных не только через Microsoft SQL Server, можно выбрать поддерживаемые источники данных из раскрывающегося списка Type (Тип).
  • Строку соединения можно ввести непосредственно, но после нажатия на кнопку Edit (Изменить) вы окажетесь в знакомом диалоговом окне Connection Properties (Свойства подключения), которое показано на следующем рисунке. Заполните поля в соответствии с данными вашей системы. Для данного примера введите строку соединения с базой данных
  • Нажимая соответствующие кнопки, настройте расширенные параметры, если вы полагаете, что они необходимы в вашей системе. Кроме того, протестируйте соединение. После нажатия на кнопку OK можно проверить строку соединения, сгенерированную в диалоговом окне Shared Data Source (Общие источники данных), как показано на рисунке:
  • Обратите внимание на то, что информация проверки подлинности не отображается в строке соединения. Перейдите на вкладку Credentials (Учетные данные), чтобы просмотреть доступные варианты.
  • Нажмите кнопку ОК, чтобы создать источник данных. В папке Shared Data Sources (Общие источники данных) отображается новый источник данных. Обратите внимание на расширение имени файла - .rds.
  • Определяем набор данных

  • Теперь мы должны указать BIDS, какие данные нужно отобразить в отчете. Для этого нужно создать хотя бы один набор данных, иногда больше. Убедитесь, что вкладка Data (Данные) отображается в центре окна BIDS. Откройте раскрывающийся список Dataset (Набор данных) и выберите <New Dataset> (<Новый набор данных>).
  • После этого отобразится показанное на следующем рисунке диалоговое окно Dataset (Набор данных).
  • Введите в качестве имени для набора данных dsEmployeeSales (этот набор данных будет конечным пунктом сбора данных о продажах сотрудников).
  • Убедитесь, что этот общий источник данных выбран в раскрывающемся списке Data Source (Источник данных), а в поле Command Type (Тип команды) указано "текст". Обратите внимание на то, что альтернативой использованию текстовой команды является использование хранимой процедуры.
  • Чтобы помочь себе в создании выражения для набора данных, можно использовать более сложный конструктор запросов. Затем введите этот простой запрос в поле Query Sting (Строка запроса).
    SELECT SalesPersonID, FirstName, MiddleName, LastName, JobTitle,
    SalesYTD FROM Sales.vSalesPerson
  • Нажмите кнопку ОК, чтобы подтвердить запрос. Запрос набора данных отображается на вкладке Data (Данные), как показано на следующем рисунке (см. рис. вверху следующей страницы).
  • Можно протестировать и проверить результаты запроса, нажав кнопку Execute (Выполнить) (кнопку с красным восклицательным знаком).
  • Не удивляйтесь аскетизму открывшегося перед вами окна. Это Generic Query Designer (Обычный конструктор запросов). Его можно включать и отключать нажатием на кнопку Generic Query Designer (Обычныйконструктор запросов) на панели инструментов, как показано на рисунке.

    Отжимая и нажимая эту кнопку, вы сможете работать с полнофункциональным конструктором запросов, который показан на рисунке, или с более простым исходным вариантом.

    Примечание. Возможно, вас удивит, что для того, чтобы добраться до обычного конструктора запросов, требуется выполнить так много действий. Главная причина заключается в том, что службы Reporting Services могут использовать много различных типов запросов, например, хранимые процедуры или выражения VB.NET, а многие из них не очень хорошо приспособлены для типичного, ориентированного на реляционные таблицы, конструктора запросов. Поэтому классический конструктор запросов не является выбором по умолчанию.
  • Обратите внимание на символ звездочки ( * ), который отображается рядом с именем отчета на вкладке BasicReport v1.rdl (Проект). Эта звездочка означает, что файл содержит несохраненные изменения. Сохраните отчет, нажав кнопку Save (Сохранить) на панели инструментов. После того, как изменения будут сохранены, звездочка исчезнет.
  • Разработка макета, тестирование и уточнение отчета

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

    Создание макета отчета

  • При открытом проекте отчета перейдите на вкладку Layout (Макет). Вы увидите узкий прямоугольник с сеткой, обозначенной точками.
  • Скройте панель Solution Explorer (Обозреватель решений), отжав кнопку Автоматически скрывать, чтобы обеспечить себе дополнительное место для работы с областью конструктора отчетов.

    Предупреждение. Обратите внимание на линейку сверху и сбоку от начальной области конструктора. Возможно, вам интересно, почему эта область не соответствует размеру предпочитаемого вами формата бумаги (Letter, A4 и т. д.). Служба Reporting Services не предназначена для создания отчетов на бумаге, поэтому инструменты создания макета автоматически не привязаны к размерам бумаги.

  • В меню View выберите Toolbox (Панель элементов).
  • Перетащите элемент управления Предупреждение. Если вы слишком далеко переместите правую границу текстового поля, то заметите, что область конструктора также расширилась, чтобы вместить элемент управления. Будьте внимательны и не превышайте нужный размер страницы, поскольку службы Reporting Services не ограничивают вас в размерах. Это может привести к тому, что отчет займет более одной страницы по ширине. Чтобы исправить ситуацию, можно уменьшить ширину элементов управления, снять выделение, а затем перетащить мышью правую границу сетки обратно до ее исходного положения.
  • Теперь создайте место для хранения данных отчета. Перетащите мышью с панели элементов элемент управления Table (Таблица) и отпустите его в области конструктора, как показано на следующем рисунке. Не беспокойтесь о том, где отпустить элемент управления, поскольку он все равно займет всю ширину области конструктора. В таблице будет отображаться три строки и девять ячеек. Обратите внимание на верхнюю и левую границы таблицы (серого цвета). Они исчезают при выделении элемента управления и появляются снова, когда выделение снимается. Области серого цвета помогут при выполнении специфических операций вроде выделения целого столбца, целой строки или всей таблицы.Совет. Выделить всю таблицу может быть непросто. Щелкнув на элементе управления, вы выделите только одну ячейку; если щелкнуть за пределами элемента управления, то выделение, как и ожидалось, будет снято. Как же выделить всю таблицу? Можно воспользоваться традиционным методом выбора ячейки, для чего следует добиться отображения серых границ, а затем щелкнуть на границе поля в левом верхнем углу, или, если в центре нет элемента управления, щелкнув за пределами таблицы в области конструктора и перетащив область выделения, в которую попадут только элементы управления таблицы.
  • Выведите на экран панель Datasets (Наборы данных), выбрав из меню View (Вид) соответствующую команду. Затем разверните дерево узла dsEmployeeSales.
  • Перетащите мышью поле SalesPersonID и отпустите его в самой левой ячейке таблицы средней строки (строки Detail ). Обратите внимание на появившееся в этой ячейке выражение. Мы вернемся к нему в следующем действии.
  • Повторите операцию перетаскивания мышью в отношении полей LastName и JobTitle, заполнив, соответственно, центральную и правую ячейки области Detail (Подробности). Не беспокойтесь о столбцах FirstName и MiddleName ; их мы будем использовать позднее при построении выражения, возвращающего полное имя сотрудника.
  • Нам понадобится дополнительный столбец и дополнительное пространство для размещения поля SalesYTD. Для этого уменьшите ширину столбца SalesPersonID, щелкнув и перетащив линию между заголовками столбцов SalesPersonID и LastName. Обратите внимание на двунаправленную стрелку, в которую превращается курсор, когда он оказывается над этой линией. Также обратите внимание на то, что соответственно уменьшается и ширина таблицы.
  • Щелкните правой кнопкой мыши заголовок столбца JobTitle и выберите из контекстного меню команду Insert Column To The Right (Вставить столбец справа), чтобы добавить столбец справа от столбца JobTitle. Перетащите мышью поле SalesYTD в только что созданную ячейку строки Detail (Подробности).
  • Теперь область конструктора будет сжата с правой стороны. Если вы хотите распечатать отчет на бумаге, необходимо держать ширину области под контролем. Измените размер столбца SalesYTD в сторону уменьшения и перетащите границу области конструктора, чтобы отрегулировать ширину. Какая ширина будет правильной? Ознакомьтесь с материалом врезки "Как правильно определить ширину области конструктора".
  • Сохраните вашу работу, нажав кнопку Save (Сохранить).
  • Как правильно определить ширину области конструктора

    Ненужные пустые страницы – это один из неприятных побочных эффектов, с которым могут столкнуться разработчики отчетов при распечатке или экспорте в форматы для печати. Почему появляются эти пустые страницы? Часто этому находится простое математическое объяснение.

    В Reporting Services для определения места разрывов страницы используются три элемента: ширина страницы, ширина правого и левого поля страницы и ширина области конструктора. Обратите внимание, что я упомянул ширину области конструктора, а не используемую ширину области конструктора. Верхняя линейка – это ваш гид для определения ширины области конструктора.

    С информацией о макете страницы можно ознакомиться, выбрав из меню Report (Отчет) команду Report Properties (Свойства отчета). В диалоговом окне Report Properties (Свойства отчета) перейдите на вкладку Layout (Макет). Здесь вы найдете размеры полей страницы.

    С помощью этих значений можно рассчитать максимальную ширину области конструктора, при которой отчет при распечатке поместится по ширине страницы.

    Максимальная ширина области = Ширина страницы—Левое поле – Правое поле.

    Если для печати отчета вместо книжного формата страницы вы хотите использовать классическую альбомную ориентацию, просто поменяйте местами значения ширины(Page Width) и высоты (Page Height) страницы на вкладке Layout (Макет). Конечно, для ширины области конструктора следует использовать это новое значение ширины страницы.

    Предварительный просмотр отчета

  • Создав основу макета отчета, давайте посмотрим, как он будет выглядеть при печати. Перейдите на вкладку Preview (Просмотр) в представлении конструктора. На короткое время появится сообщение о том, что выполняется формирование отчета, после чего на экран будут выведены результаты обработки.Предупреждение. Не нажимайте кнопку Start Debugging (Начать отладку) (кнопка с зеленой стрелкой) на панели инструментов или клавишу F5. Любое из этих двух действий запустит операцию Build and Deploy (Построить и развернуть). Сейчас нам нужно только ознакомиться с предварительным просмотром отчета.

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

  • Чтобы просмотреть отчет в печатном виде, можно нажать кнопку Print Layout (Предварительный просмотр печати) на панели инструментов. Кнопка Print Layout (Предварительный просмотр печати) – это переключатель, следовательно, она остается нажатой при переходе между вкладками, пока вы ее снова не отожмете.Предупреждение. Вкладка предварительного просмотра в Reporting Services формируется модулем подготовки просмотра, который отличается от других модулей подготовки, например, модуля подготовки HTML или модуля подготовки PDF. Если посмотреть на поведение страницы, разница окажется существенной. Если нужно доставить отчет в любом определенном формате, проверьте разрывы страниц именно в этом формате, не обращайте внимания на разрывы страниц, которые вы увидите на вкладке Preview (Предварительный просмотр). Не стоит придавать значения этим разрывам, поскольку модуль подготовки предварительного просмотра не использует заданные вами параметры разрыва страниц.
  • Вернитесь на вкладку Layout (Макет), чтобы продолжить редактирование отчета.
  • Редактируем текст в ячейках таблицы

  • Нам нужно, чтобы для каждого сотрудника отображалась не фамилия, а полное имя. Этого можно добиться, отредактировав выражение при помощи перечисленных ниже действий. Давайте отредактируем название столбца. Дважды щелкните на ячейке, которая содержит текст "LastName", чтобы перейти в режим редактирования. Удалите слово "Last", чтобы осталось только слово "Name".
  • Попытка повторить эту операцию со столбцом "SalesPersonID" может вызвать затруднения, поскольку из-за того, что для него выделено слишком мало места, большая часть текста остается скрытой. Тем не менее, текст можно редактировать точно таким же способом. Измените текст, чтобы в названии столбца осталось только "ID". Можно изменить значение столбца по-другому, при помощи разных методов:
  • Щелкнув правой кнопкой мыши на ячейке и выбрав из контекстного меню команду Properties (Свойства), выведите на экран диалоговое окно свойств, показанное на следующем рисунке. В нем можно отредактировать раскрывающийся список Value (Значение).
  • Щелкнув правой кнопкой мыши на ячейке и выбрав из контекстного меню команду Expression (Выражение), выведите на экран диалоговое окно Edit Expression (Изменить выражение), как показано ниже. В этом окне можно отредактировать выражение.
  • Нажав клавишу F4 или кнопку Properties Window (Окно свойств) на панели инструментов, выведите на экран окно Properties Window (Окно свойств); можно щелкнуть и в самом окне Окне свойств, если оно уже отображается на экране. В окне Properties (Свойства) можно отредактировать раскрывающийся список Value (Значение).
  • Сохраните отчет.Предупреждение. Свойства элементов отчета можно редактировать и через диалоговое окно Properties (Свойства), и через Properties window (Окно свойств). Некоторые свойства проще изменить в одном из этих двух окон, чем в другом. Обычно лучше выбирать диалоговое окно Properties (Свойства), потому что оно предлагает больше помощи в правильной настройке свойств. Некоторые элементы, такие, как Groups (Группы), Body (Тело) или сам Report (Отчет) имеют свойства, которые показаны только в Окне свойств; у них нет своего диалогового окна Properties (Свойства).
  • Форматируем элементы

  • Щелкните ячейку, которая содержит значение поля SalesYTD (самая правая ячейка в средней строке).
  • Измените форматирование выражения, чтобы сделать его более удобным для чтения. В нашем примере, лучше выбрать диалоговое окно Properties (Свойства), а не Окно свойств, ведь в диалоговом окне гораздо больше вспомогательных возможностей, поэтому щелкнем правой кнопкой мыши на ячейке и выберем команду Properties (Свойства).
  • Перейдите на вкладку Format (Формат), которая показана на следующем рисунке. Обратите внимание на текстовое поле Format Code (Код формата) и расположенные рядом с ним кнопки.
  • Нажмите кнопку с многоточием (…), чтобы перейти в диалоговое окно Choose Format (Выбор формата). Если нажать кнопку Function (Функция), то откроется диалоговое окно Edit Expression (Изменить выражение). Этот же результат мы получим, если будем редактировать свойство Format (Формат) в Property Window (Окне свойств). Можно задать формат и через Окно свойств, но тогда нужно точно знать, какие значения указывать.
  • Выберите Currency (Валюта) и нажмите кнопку ОК. Обратите внимание на то, что значение в текстовом поле Format Code (Код формата) изменилось на "С". Коды формата, которые используются в Reporting Services - это типы форматирования .NET Framework.Дополнительная информация Дополнительную информацию о типах форматирования инфраструктуры .NET Framework можно найти в документации по .NET или в интернете по адресу http://msdn2.microsoft.com/en-us/library/fbxft59x.aspx.
  • Нажмите кнопку ОК, чтобы подтвердить изменение свойств текстового поля и просмотрите отчет, чтобы оценить изменения, которые мы сделали до сих пор.
  • Сохраните отчет.Предупреждение. Обратите внимание на том, что если вы попытаетесь сохранить отчет, находясь на вкладке Preview (Просмотр), то Конструктор отчета попросит подтвердить сохранение результатов, а не макета отчета. Чтобы сохранить макет отчета, следует покинуть вкладку Preview (Просмотр) и отобразить вкладку Layout (Макет) или Data (Данные).
  • Редактируем выражение

  • Выделите значение поля LastName (вторая ячейка слева в средней строке). Мы изменим выражение в этой ячейке, чтобы она отображала полные имена сотрудников вместо их фамилий.
  • Щелкните правой кнопкой мыши ячейку и выберите команду Expression (Выражение). Откроется диалоговое окно Edit Expression (Изменить выражение). Выражения в Reporting Services должны быть написаны с использованием синтаксиса Visual Basic .NET. Иначе выражение можно отредактировать непосредственно в ячейке, вообще не выводя никаких диалоговых окон. Последний способ прекрасно подходит для незначительных изменений, например, если нужно добавить один пробел или выполнить аналогичные действия; однако, чем более сложное редактирование требуется, тем более практичным становится использование диалогового окна Edit Expression (Изменить выражение).
  • Текущее значение выражения таково:
    =Fields!LastName.Value

    Следует обратить внимание на следующие элементы этого выражения:

  • Знак равенства (=).Знак равенства показывает, что следующий за этим знаком текст - это выражение, не являющееся простым текстом (или строкой, в терминах программирования).
  • Fields!Компонент выражения Fields! показывает, что LastName – это элемент в коллекции Fields. Дополнительную информацию о коллекциях в RDL можно найти на врезке "Коллекции Reporting Services".
  • Свойство Value (Значение).Каждый объект RDL имеет набор свойств, к которым можно получить доступ, редактируя выражение. В процессе изменения выражения в окне Edit Expression (Изменить выражение) функция Intellisence (Умный ввод) предоставит вам список свойств для каждого типа элементов.
  • Поскольку нам нужно отобразить некоторые дополнительные поля, изменим выражение следующим образом:
    =Fields!FirstName.Value  " "  Fields!MiddleName.Value  ". "  Fields!LastName.Value
  • Сохраните выражение, нажав кнопку ОК, и просмотрите отчет, чтобы ознакомиться с результатами выражения. Вы увидите, что отредактированное выражение работает в большинстве случаев, но все же не во всех. Посмотрите, например, на сотрудников с идентификаторами 277 и 279. У первого из них нет второго имени; следовательно, точка после сокращения и разделительный пробел должны опускаться. Второе имя второго сотрудника должно писаться полностью; следовательно, точка после сокращения также должна быть опущена, но разделительный пробел должен сохраниться.
  • Придется изменить это выражение, усложнив его для точности. Измените наше выражение, как показано ниже, и нажмите кнопку ОК.
    =Fields!FirstName.Value  " " 
    IIf(Len(Fields!MiddleName.Value) = 1, Fields!MiddleName.Value  ". ", "")
       IIf(Len(Fields!MiddleName.Value) > 1, Fields!MiddleName.Value  " ", "")
           Fields!LastName.Value
  • Это выражение можно ввести двумя способами: просто набрав его в поле редактирования текста или выбирая элементы из вспомогательного списка в нижней части диалогового окна. На следующем рисунке обратите внимание на функцию IIf. Поэкспериментируйте с параметрами, чтобы изучить поведение функции. Обратите внимание на то, что функция умного ввода и подсветка синтаксиса помогает правильно построить выражение.
  • Просмотрите отчет и обратите внимание на то, что проблема со вторыми именами теперь решена.
  • Сохраните отчет.
  • Добавляем итоговый столбец

  • Нам нужно добавить итоговую сумму, показывающую общий итог продаж (SalesYTD) всех продавцов. Сначала выведем на экран панель Datasets (Наборы данных), чтобы видеть поля. Разверните узел dsEmployeeSales.
  • Перетащите мышью узел SalesYTD и отпустите его в самой правой ячейке нижней строки таблицы, как раз под ячейкой SalesYTD в строке Подробностей.
  • Обратите внимание на то, что результирующее выражение выглядит следующим образом:
    =Sum(Fields!SalesYTD.Value)

    Программа конструктора отчетов определила, что вы хотите добавить итоговую сумму, так как операция drop (отпустить) была выполнена в строке Table Footer (Нижний колонтитул), а не в строке Detail (Подробности).

  • Поскольку элемент совершенно новый, свойство Format (Формат) не заполнено. Это значит, что сводка будет отображать числовой формат, отличающийся от столбца, расположенного выше. Чтобы исправить это несоответствие, откройте Properties window (Окно свойств) и просто введите для свойства формата значение "С".
  • Сохраните отчет.
  • Добавляем визуальной привлекательности

    Добавление некоторого визуального форматирования предназначено для того, чтобы сделать отчет более удобным для чтения и попрактиковаться в форматировании в Report Designer (Конструкторе отчетов),

  • Выделите все названия столбцов, щелкнув ячейку ID и перетащив рамку выделения через всю верхнюю строку.
  • Выведите на экран Properties window (Окно свойств) и найдите группу свойств Font (Шрифт).
  • Обратите внимание на символ "плюс" (+) на серой границе слева. Он обозначает, что мы имеем дело с группой свойств. Щелкните его, чтобы развернуть имеющиеся свойства Font (Шрифт).
  • Выберите для свойства FontWeight значение Bold. Это можно сделать, введя слово Bold в поле или выбрав Bold из раскрывающегося списка.

    Обратите внимание на текст итогового значения группы свойств Font: "Normal; Arial; 10pt; Bold". Значения свойств можно изменить, не раскрывая узлы, а просто набирая значения справа в этой строке.

  • Найдите группу свойств BorderStyle и разверните ее.
  • Задайте для свойства Bottom значение Solid.
  • В области конструктора выделите всю строку Details (Подробности), щелкнув на серой кнопке заголовка строки Details (Подробности), которая находится с левой стороны таблицы.
  • В Окне свойств задайте для группы свойств
  • Выделите всю строку Table Footer (Нижний колонтитул) и задайте для свойства BorderStyle.Top значение Solid.
  • Выделите ячейку GrandTotal и задайте значение свойства FontWeight Bold.
  • Просмотрите отчет для оценки изменений.
  • Перейдите на вкладку Layout (Макет) и сохраните отчет.
  • Условное задание значений свойств

    RDL в предоставлении мощного набора функций очень зависит от выражений. Почти в любом окне для настройки свойств, можно задавать значения свойств через выражение, вместо того, чтобы явно указывать его значение. Можно использовать эту функцию, чтобы выделить торговых представителей, не достигших своей цели.

  • Выделите ячейку SalesYTD в строке Details (Подробности).
  • Найдите в Properties Window (Окне свойств) свойство Color.
  • Просмотрите доступные значения свойства, щелкнув стрелку раскрывающегося списка. Обратите внимание на значение <Expression> (<Выражение>) в этом раскрывающемся списке. Щелкните его, чтобы вывести на экран диалоговое окно Edit Expression (Изменить выражение), показанное на рисунке.
  • Обратите внимание на свойства цвета, доступные как константы. Измените выражение следующим образом:
    =IIf(Fields!SalesYTD.Value<3500000, "Red", "OliveDrab")

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

  • Подтвердите изменение выражения, нажав кнопку ОК. Ознакомьтесь с результатами на вкладке Preview (Просмотр).
  • Объедините две функции IIF, чтобы обеспечить дополнительную гибкость, например:
    =IIf(Fields!SalesYTD.Value<3500000, "Red", IIf(Fields!SalesYTD.Value>5000000, "OliveDrab", "Black"))
  • Просмотрите результаты, а затем перейдите на вкладку Layout (Макет) и сохраните отчет.
  • Сортируем результаты

    Отчет, который мы построили к настоящему моменту, отображает записи беспорядочно. Поскольку информация о продажах значима для данного отчета, то соответствующая сортировка данных – это естественный вариант.

  • Щелкните мышью в любом месте таблицы, чтобы появились серые границы таблицы.
  • Щелкните правой кнопкой мыши левый верхний угол границы таблицы и выберите из контекстного меню команду Properties (Свойства).
  • В диалоговом окне Table Properties (Свойства таблицы) перейдите на вкладку Sorting (Сортировка).
  • В сетке Sort On (Сортировать по) выберите из раскрывающегося списка поле Fields!SalesYTD в столбце Expression (Выражение). Обратите внимание на знак равенства (=), появившийся перед выражением.Предупреждение. Имейте в виду, что в диалоговых окнах много полей ввода, в которых нужно вводить выражение, а не имя объекта или свойства. Если в этих случаях вы зададите имя объекта или свойства, то не получите ожидаемых результатов.
  • Выберите из раскрывающегося списка в столбце Direction (Направление) значение Descending (По убыванию).
  • Подтвердите изменения, нажав кнопку ОК. Сохраните отчет и просмотрите результаты на вкладке Preview (Просмотр). Затем снова перейдите на вкладку Layout (Макет).
  • Разрешаем сортировку результатов пользователям

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

  • Щелкните правой кнопкой мыши текстовую ячейку SalesYTD в строке Header (Заголовок) и выберите из контекстного меню команду Properties (Свойства).
  • Перейдите на вкладку Interactive Sort (Интерактивная сортировка).
  • Установите флажок Add An Interactive Sort Action To This Textbox (Добавить действие интерактивной сортировки к этому полю). Задайте остальные значения в соответствии со следующим рисунком. (см. рис. вверху следующей страницы).
  • Подтвердите изменения, нажав кнопку ОК. Сохраните отчет и просмотрите результаты на вкладке Preview (Просмотр).
  • Обратите внимание на двунаправленную стрелку рядом с названием SalesYTD. Если щелкнуть эту стрелку, то содержимое таблицы будет соответствующим образом отсортировано.
  • Повторите действия с 1 по 5 для заголовков остальных столбцов, чтобы разрешить интерактивную сортировку любого из этих столбцов. Обратите внимание на то, что, когда эти действия выполняются в отношении столбца выражений Name, само выражение недоступно. Если вы хотите выполнять сортировку по выражению, нужно скопировать выражение, то есть продублировать его. Чтобы справиться с проблемой, нужно изучить в следующем разделе, как добавить программный код, который может быть общим в пределах отчета.
  • Сохраните отчет и просмотрите изменения на вкладке Preview (Просмотр), затем, когда закончите просмотр, перейдите на вкладку Layout (Макет).
  • Фильтрация данных

    Для большинства отчетов требуется, чтобы пользователь указал определенный тип фильтра для применения к данным. Следовательно, нужно дать пользователю способ указать, какой фильтр данных следует применить. Инструмент для выполнения данной задачи – это параметр отчета. В этом разделе мы создадим параметр для фильтрации списка сотрудников по закрепленным за ними территориям.

  • Перейдите на вкладку Data (Данные).
  • Измените запрос, добавив предложение
  • В меню Report (Отчет) выберите команду Report Parameters (Параметры отчета).
  • Вы увидите, что Конструктор отчетов добавил параметр, выполнив синтаксический анализ запроса к набору данных.
  • Позже мы отредактируем этот параметр, чтобы сделать его более дружественным к пользователю, но сейчас давайте оставим все, как есть. Нажмите кнопку ОК, чтобы закрыть диалоговое окно Report Parameters (Параметры отчета), и просмотрите отчет.
  • Введите в текстовое поле

    Безусловно, не лучшее решение - просить пользователей запомнить и безошибочно ввести все имена территорий. Следует предложить им некоторую помощь, предоставив возможность выбрать нужное название из списка доступных территорий. Для решения задачи нужно создать новый набор данных и заполнить значения параметра при помощи его вывода.

  • Перейдите на вкладку Data (Данные) и сохраните отчет.
  • Откройте раскрывающийся список Dataset (Набор данных) и выберите <New Dataset> (<Новый набор данных>).
  • Измените поля Name (Имя) и Query String (Строка запроса), чтобы они соответствовали значениям, показанным на рисунке, после чего нажмите кнопку ОК (см. рис. вверху следующей страницы).
  • Чтобы использовать этот запрос (или набор данных) в качестве значений параметра, нужно изменить свойства параметра. В меню Report (Отчет) выберите команду Report Parameters (Параметры отчета).
  • Измените свойства параметра таким образом, чтобы они соответствовали следующим значениям (обратите внимание, что нужно отредактировать также Prompt (Приглашение) и Default Values (Значения по умолчанию)):
  • Подтвердите изменения, нажав кнопку ОК.
  • Сохраните отчет и просмотрите его. Обратите внимание, что отчет обрабатывается, не ожидая, пока пользователь выберет значение из раскрывающегося списка. Причина заключается в том, что в свойствах параметра объявлено значение по умолчанию. Оставьте значение по умолчанию пустым, чтобы изменить это поведение.
  • Выберите из раскрывающегося списка Territory To Show (Отображаемые территории) и нажмите кнопку View Report (Просмотреть отчет), чтобы выполнить обработку отчета с новым значением фильтра.
  • Добавление программного кода к отчету

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

    Для решения этой проблемы следует вставить код централизованно, либо из самого отчета, либо из внешней сборки, ссылающейся на этот отчет. В этой лекции мы рассмотрим только первый случай.

    Дополнительная информация Чтобы больше узнать об использовании внешних сборок в отчетах, ознакомьтесь с темой "Использование пользовательских сборок в отчетах" в Электронной документации по SQL Server 2005.

    Мы разработаем функцию отчета для централизации вычислений полных имен сотрудников. Следовательно, мы используем выражение, которое ввели в предыдущем разделе, в ячейке под названием столбца 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

    Некоторые интересные свойства устанавливаются автоматически Конструктором отчета, пока мы разрабатываем макет. Вам нужно знать об этих свойствах и их значении, чтобы полностью разобраться в редактировании отчета.

  • Все элементы отчета идентифицируются по имени. Свойство , , table2... Хотя такие имена вполне традиционны и их можно использовать, все же они не очень хорошо подходят для понятного программирования. В мире программирования рекомендуется давать каждому элементу без исключения дружественное к пользователю имя, которое помогает идентифицировать этот элемент при написании кода. Однако в Конструкторе отчетов многие объекты существуют без нашего ведома, пока они по какой-либо причине нам не понадобятся. Следовательно, хотя мы не можем рекомендовать изменять имя каждого элемента, в целом это неплохая практика. В любом случае, вам следует изменять хотя бы имена элементов, используемых в выражениях. Чтобы просмотреть, какие именованные объекты существуют в отчете, можно развернуть раскрывающийся список в верхней части Окна свойств. Есть и другой способ - можно просмотреть непосредственно файл RDL XML и выполнить поиск атрибута Name (Имя) в элементах.
  • Очень важным является также свойство Dataset binding. Некоторые объекты отчета, например, те, которые являются контейнерами или областями данных, "волшебным" образом знают, откуда они должны извлекать данные. Если вы посмотрите значение свойства Dataset на вкладке объекта отчета Table (Таблица), который содержит несколько полей, вы заметите, что в качестве значения этого свойства установлено имя набора данных. В нашем примере это значение - dsEmployeeSales. Эта привязка определяет источник данных для всех объектов, зависимых от данных, внутри этого объекта контейнера. Если вы проверите значение этого свойства в только что созданной таблице, то обнаружите, что оно остается незаполненным до тех пор, пока вы не перетащите в него поле при помощи мыши или не зададите привязку вручную.
  • Коллекции Reporting Services

    Кроме коллекции , , ReportItems и User. Каждая из этих коллекций объединяет различные типы объектов.

  • Fields. Ссылается на поля, содержащиеся в определенном наборе данных. При использовании коллекции Fields в области данных, например, в таблице, предполагается набор данных, к которому она принадлежит вследствие привязки области данных (привязка области данных устанавливается через свойство Dataset области данных). При использовании вне области данных, коллекция Fields требует определения области действия (путем явного назначения имени набора данных).
  • Globals. Содержит такие объекты, как PageNumber, TotalPages, ReportFolder и ReportName. Элементы из этой коллекции вам придется использовать достаточно часто.
  • Parameters. Содержит все параметры, объявленные в отчете. Если отчет объявляет какие-либо параметры, то их свойства доступны через эту коллекцию.
  • ReportItems. Включает все текстовые поля отчета. Не забывайте, что ячейки таблицы - это тоже текстовые поля. Следовательно, можно обратиться к нужному набору объектов через эту коллекцию.
  • User. Содержит два объекта: User и Language ; однако, к этим объектам можно обратиться только через коллекцию User.
  • Дополнительная информация Дополнительную информацию об этом можно найти в Электронной документации по SQL Server 2005, тема "Использование глобальных коллекций в выражениях(Reporting Services)".

    Заключение

    Из этой лекции вы узнали, что такое система отчетов предприятия, и получили некоторые сведения по планированию отчетов. Кроме того, в лекции рассматривалась архитектура служб Reporting Services, ее основные компоненты и задачи, выполняемые каждым из них.

    Вы поэкспериментировали с процедурами разработки основного отчета: это создание отчета, настройка источника данных и запроса к данным, создание и редактирование макета отчета, добавление программного кода для выполнения общих операций, а также придание отчету некоторой интерактивности.

    В Электронной документации по SQL Server 2005 есть дополнительная информация по каждой из этих тем. Рекомендуется изучить области данных list (список) и matrix (матрица), группирование, область действия выражения, каскадирование параметров, работа с функциями видимости, диаграммы, вложенные отчеты, культура использования языка и отчеты служб Analysis Services.

    Краткий справочник по 8 лекции

    Чтобы Выполните следующие действия
    Создать отчет В BIDS выберите из меню File (Файл) команды New, Project (Создать, Проект). Выделите шаблон Report Server Project (Проект сервера отчетов) и нажмите кнопку ОК. Щелкните правой кнопкой мыши папку Reports (Отчеты)в Solution Explorer (Обозревателе решений) и выберите Add, New Item (Добавить, Создать элемент).
    Запустить мастер отчетов В BIDS выберите из меню File (Файл) команды New, Project (Создать, Проект). Выделите шаблон Report Server Project Wizard (Мастер проекта сервера отчетов) и нажмите кнопку ОК.
    Создать общий источник данных Щелкните правой кнопкой мыши папку Shared Data Sources (Общие источники данных) в Solution Explorer (Обозревателе решений) и выберите из контекстного меню команду Add New Data Source (Добавить новый источник данных).
    Определить набор данных На вкладке Data (Данные) в окне BIDS выберите из раскрывающегося списка Dataset (Набор данных) команду <New Dataset>.
    Добавить в отчет Перетащите элемент управления Table (Таблица) из панели элементов в область конструктора.
    Связать данные в таблице с отчетом Перетащите мышью поле из панели Dataset (Набор данных) и отпустите его в ячейке таблицы.
    Выполнить предварительный просмотр отчета В окне BIDS перейдите на вкладку Preview (Просмотр).
    Форматировать элемент управления отчетом Щелкните правой кнопкой мыши элемент управления и выберите Properties (Свойства), чтобы вывести на экран диалоговое окно Properties (Свойства); или выберите объект, выведите на экран Properties window (Окно свойств) и отредактируйте свойства в этом окне.
    Сохранить отчет Нажмите кнопку Save (Сохранить) на панели инструментов.
    Добавить итог в таблицу отчета Перетащите мышью поле, для которого нужно вычислить итог, из панели Dataset (Набор данных) и отпустите его в поле нижнего колонтитула таблицы.
    Условно задать свойство в отчете Выберите пункт <Expression> в раскрывающемся списке свойств. В диалоговом окне Edit Expression (Изменить выражение) введите инструкцию IIf.
    Выполнить сортировку содержимого основе значений в столбце В диалоговом окне Properties (Свойства) задайте поля сортировки на вкладке Sorting (Сортировка).
    Разрешить пользователям интерактивную сортировку данных В диалоговом окне Properties (Свойства) ячейки флажок Add An Interactive Sort Action To This Textbox (Добавить действие интерактивной сортировки к этому полю).
    Настроить фильтр для данных отчета Измените запрос, на котором строится отчет, добавив в него предложение WHERE, которое использует параметр. В меню Report (Отчет) выберите команду Report Parameters (Параметры отчета).
    Вернуться к учебному плану