Управление макетом

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

Свойства деления на страницы

Для управления делением на страницы доступны три новые свойства: Disabled, ResetPageNumber и PageName. Эти свойства отображаются в окне свойств при выборе табликса, прямоугольника или диаграммы в теле отчета или элемента группы в области «Группы строк» или «Группы столбцов». Наиболее частая причина задания значений этих свойств — необходимость изменения поведения деления на страницы в зависимости от формата отображения, поскольку теперь доступна новая глобальная переменная RenderFormat.

Предположим, создается табликс со сводными данными продаж за год, и данные группируются с внешней группой строк CalendarYear. Выбирая элемент CalendarYear в области «Группы строк», можно открыть несколько свойств в окне «Свойства», как показано на рис. 9-7. При этом данные свойства недоступны в диалоговом окне «Свойства группы».

Рисунок. 9-7.Свойства деления на страницы.

Предположим, требуется вставлять разрывы страниц между экземплярами CalendarYear только при экспорте в Excel. После установки значения Between для свойства BreakLocation можно задать для свойства Disabled значение False, если отчет преобразуется в формат Excel, используя следующее выражение:

=iif(Globals!RenderFormat.Name="EXCEL",False,True)

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

Независимо от того, решено ли отключить разрывы страниц, можно выбрать условия, применяемые для сброса номера страницы при разрыве страницы, занеся соответствующее выражение в свойство ResetPageNumber. Продолжая текущий пример, можно использовать в свойстве ResetPageNumber схожее условное выражение, чтобы номер страницы не сбрасывался, если отчет имеет формат HTML, но сбрасывался в прочих форматах. Соответственно, в формате HTML номер страницы отчета увеличивается на единицу при прокрутке, но в других форматах (кроме Excel) номер страницы сбрасывается при создании каждой страницы нового года.

Наконец, рассмотрим применение свойства PageName. Так, вместо номеров страниц в книге Excel можно назначить каждому листу книги уникальное имя. При этом можно, например, использовать групповое выражение, определяющее разрыв страницы, в качестве значения свойства PageName. Если отчет имеет формат книги Excel, службы Reporting Services используют определение разрыва страницы для разделения групп CalendarYear на разные листы книги и выражение PageName для назначения значения экземпляра группы соответствующему листу.

Еще один пример — можно занести выражение в свойство PageName прямоугольника, области данных, группы или карты. После этого значение свойства можно использовать в верхнем или нижнем колонтитуле страницы с помощью выражения Globals!PageName. Когда обработка отчета только начинается, значение Globals!PageName приравнивается к свойству отчета InitialPageName, после чего оно сбрасывается по мере обработки каждого элемента отчета, если у элемента отчета в свойстве PageName имеется выражение.

Синхронизация данных

Одна из интересных функций Reporting Services — возможность создавать группы групп путем вложения одного типа элементов отчета в другой тип элементов отчета. На рисунке 9-8 показан список с группировкой по категории и году, содержащий матрицу с группировкой по месяцам. Обратите внимание, что месяцы в каждой группе не выравниваются как следует, поскольку отсутствуют данные за первые шесть месяцев года в групее Accessories 2005. Каждая месячная группа отображается в отчете отдельно от других.

Рисунок 9-8. Несинхронизированные группы.

В SQL Server 2008 R2 Reporting Services имеется новое свойство DomainScope, позволяющие устранить проблему. Это свойство относится к группе и может использоваться в области данных табликса, как показано на рис. 9-9, или в диаграммах и других средствах визуализации данных для заполнения пробелов в данных между несколькими экземплярами аналогичных групп. Достаточно задать в качестве значения свойства имя области данных, содержащей группу. В этом примере у группы MonthName свойство DomainScope равно Tablixl — это имя списка. Каждый экземпляр группы в списке (включая категории и годы) отображает идентичный набор значений MonthName.

Рисунок 9-9. Cинхронизированные группы.

Ориентация текстовых полей

У всех текстовых полей есть свойство WritingMode, которое по умолчанию задает отображение текста по горизонтали. Также есть возможность отображать текст по вертикали, чтобы обеспечить поддержку языков, где это более привычный формат. Хотя вертикальное написание можно использовать и в других языках, результат вряд ли будет удовлетворительным, поскольку все символы отображаются сверху вниз, с поворотом. Так, в слове низ каждой буквы будет смотреть налево, а верх — направо. Вместо этого можно использовать новое значение свойства — Rotate270, которое также задает вертикальное отображение, но идет оно снизу вверх, как на рис. 9-10. Это полезно для заголовков строк в табликсах, если требуется уменьшить ширину табликса.

Рисунок 9-10. Ориентация текстовых полей.