СТАТЬЯ
18.01.01

Анализ с применением матричных отчетов

Cтатья также опубликована на сайте www.olap.ru

Генераторы отчетов баз данных и электронные таблицы обычно рассматриваются как два полностью независимых программных продукта. Генераторы отчетов баз данных очень хорошо сортируют и выбирают данные, в то время как электронная таблица превосходна для анализа, подытоживания, и отслеживания тенденций, обеспечивая представление численных данных в компактном матричном формате. Crystal Reports предоставляет инструмент, в некотором смысле объединяющий эти две особенности: объект cross-tab. Cross-Tab - матричный объект, который выглядит как электронная таблица. Этот объект суммирует данные с использованием, по крайней мере, трех полей базы данных: строки, столбца, и итогового поля. Для каждого пересечения строк и столбцов, итоговое поле подвергается операции группирования (суммируется, подсчитывается, или обрабатывается иным образом).

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

Но не все так плохо! Вы можете создать отчет, подобный изображенному на рис. 1 (первоначально сгруппированный по регионам, а в пределах региона сгруппированный по типу продукта), который предоставит информацию, соответствующую пожеланиям аналитика. Однако и здесь есть проблема – если аналитику требуется сравнить общее количество горных велосипедов, проданных в стране с общим количеством детских велосипедов, проданных там же, то подобный отчет сделает этот процесс весьма трудоемким. Дело в том, что тип продукта – это вложенная группа, так что нет никакой возможности подсчета по этому показателю общего количества продукта. Также было бы весьма трудным занятием сравнение общих количеств одного региона с общими количествами другого, потому что эти регионы будут разделены в отчете несколькими страницами.

Этот сценарий - прекрасный пример того, где может использоваться объект Cross-Tab . Матричный отчет (Cross-Tab)– это компактный отчёт, который даёт возможность сравнивать промежуточные суммы и итоги по двум или более различным полям базы данных. Всякий раз, когда требуется показать данные по одной и другой позициям, матричный отчет является наилучшим вариантом для достижения этой цели. Оцените смысл выражения “по этой и по той позиции”. Рисунок 2, возможно, прояснит описываемую ситуацию.

Создание объекта Cross-Tab

Когда вы смотрите на матричный отчет, хочется думать, что он сам по себе представляет полный отчёт, подобно полностью независимой электронной таблице Excel. На самом деле, матричный отчет – это только объект, который находится в существующей секции отчёта. Даже когда вы выбираете Cross-Tab Expert из Report Gallery, Crystal Reports только создает объект Cross-Tab и помещает его в заголовок отчёта. При желании, в одном отчёте можно создать несколько матричных отчетов. Фактически вы можете даже скопировать какой-нибудь существующий матричный отчет и поместить его в несколько различных секций одного и того же отчёта. Это - только объект, подобно текстовому объекту, карте или полю базы данных.

Матричный отчет может существовать в отчёте сам по себе (о чём свидетельствует Cross-Tab Expert) или может быть помещен в отчёт, который уже содержит поля в разделе элементов, а также одну или более групп. Можно составить отчёт, полностью функциональный во всех отношениях, а потом добавить матричный отчет — этот объект только накладывается поверх отчёта.

На первом этапе создания матричного отчета нужно убедиться, что таблицы, которые вы выбрали и связали для вашего отчёта, содержат достаточно данных для его заполнения. Если, например, вы хотите просмотреть итоги заказов за 1995,1996,1997 и 1998 годы по штату, убедитесь, что вы выбрали таблицы, которые включают количество заказов, год размещения заказа и штат клиента, разместившего заказы. Хотя это может показаться вполне очевидным, но если вы заранее всё тщательно не продумали, у вас может оказаться недостаточно данных для заполнения вашего матричного отчета.

При желании, вы можете либо использовать, либо не использовать поля текущего отчёта в качестве полей матричного отчета. Если поля уже существуют в отчёте, то вы можете добавить их к объекту Cross-Tab. Или, если вы уже завершили добавление различных полей к отчёту, не огорчайтесь, еще не все потеряно. У вас все еще сохраняется возможность использования других полей, на базе которых создается этот матричный отчет.

Вы можете использовать Cross-Tab Expert из Report Gallery или добавить матричный отчет к уже существующему отчёту. Чтобы использовать Cross-Tab Expert, просто выберите его из Report Gallery при создании нового отчёта. Как только вы выбрали и связали таблицы, которые будут использоваться в матричном отчёте, щёлкните кнопкой мыши по закладке Cross-Tab. При этом в Cross-Tab Expert появятся три закладки, полностью аналогичные закладкам, составляющим диалоговое окно Format Cross-Tab (обсуждаемое более подробно далее в этой статье).

Если вы уже создали другой отчет, используя какой-либо другой эксперт (отличный от Cross-Tab Expert) или опцию Blank Report, то можете вставить объект Cross-Tab в любой момент, когда захотите. Чтобы создать объект Cross-Tab, лучше всего сначала выбрать закладку Design. Хотя поместить матричный отчет в отчёт можно и с помощью закладки Preview, вы не сможете точно указать место его размещения. При использовании закладки Design таких проблем не возникает. Нажмите кнопку Insert Cross-Tab на панели инструментов Supplementary или выберите Insert I Cross-Tab из раскрывающегося меню. Появится диалоговое окно Format Cross-Tab, как показано на рисунке 3.

Диалоговое окно Format Cross-Tab содержит три закладки: Cross-Tab, Style и Customize Style (закладки Style и Customize Style – это новые функции Crystal Reports 8). Закладка Cross-Tab используется для определения полей базы данных или формул, составляющих матричный отчет. Закладка Style позволяет вам выбрать заранее заданный стиль форматирования для матричного отчета. И, наконец, закладка Customize Style отображает ряд задаваемых пользователем опций форматирования, позволяющих точно управлять внешним видом матричного отчета.

Первый этап при создании матричного отчета – это определение полей, которые составят строку, столбец и суммируемые поля матричного отчета. Это делается с помощью закладки Cross-Tab. Просмотрите окошко Available Fields, чтобы найти поля, которые вы планируете использовать в качестве полей строк и столбцов матричного отчета. Просто перетащите выбранное вами поле из окошка Available Fields в окошко Rows or Columns. Вы можете также выделить поле в окошке Available Fields и нажать на кнопку Add Row или Add Column.

Затем выберите поле, которое вы хотите просуммировать по каждой ячейке (пересечение каждой строки и столбца). Обычно это бывает поле с числовыми или денежными единицами, типа Quantity Sold (Количество продаж) или Order Amount (Число заказов), но, в принципе, совсем не обязательно. Если вы выбираете числовое поле, Crystal Reports будет вычислять промежуточную сумму поля для каждой ячейки. Если вы выбираете поле с другим типом данных, будет показано количество появлений поля для каждой комбинации строка/столбец. Перетащите поле, которое требуется просуммировать, из окошка Available Fields в окошко Summarized Field, или выделите поле и щёлкните по кнопке Add Summarized Field.

Если вы хотите использовать какую-нибудь уже существующую формулу для строки, столбца или суммируемого поля, нужно только выбрать эту формулу в окошке Available Fields. Если вы хотите создать новую формулу или отредактировать существующую формулу прежде, чем применить её в матричном отчете, нажмите кнопку New Formula или кнопку Edit Formula, любая из которых запускает редактор формул (Formula Editor), в котором вы можете создавать или редактировать формулу. Эта формула затем появится в окошке Available Fields, из которого её можно перетащить в окошки Rows, Columns или Summarized Fields.

Если на начальном этапе вам не требуется выполнить какое-либо пользовательское форматирование объекта Cross-Tab, это значит, что он уже может быть помещен в отчёт (опции форматирования в двух других закладках диалогового окна Format Cross-Tab обсуждаются ниже). При нажатии ОК в диалоговом окне Format Cross-Tab вы возвращаетесь в отчёт с прикреплённым к курсору мыши небольшим объектом. Вы можете поместить объект Cross-Tab в заголовок или нижний колонтитул отчёта или группы. Матричные отчеты не могут быть помещены в секцию details, либо в заголовок или нижний колонтитул страницы – форма вашего курсора будет указывать на невозможность такого действия при попытке поместить матричный отчет в эти секции.

Перетащите матричный отчет ниже всех объектов секции, таких как итоги, названия групп или текстовых объектов. Имейте в виду, что хотя в закладке Design матричный отчет занимает относительно немного места, но когда вы будете производить предварительный просмотр или печать отчёта, матричный отчет расширится по горизонтали и по вертикали для того, чтобы разместить все ее строки и столбцы. Поэтому, если ниже или правее матричных отчетов есть другие объекты, он будет напечатан прямо поверх их. Когда вы перетаскиваете матричный отчет, небольшой объект на курсоре мыши разворачивается в объект Cross-Tab большего размера, показывающий расположение строки, столбца, суммируемого поля, а также итогов по строке и столбцу.

При предварительном просмотре отчёта, Crystal Reports несколько раз пройдет по базе данных, чтобы вычислить итоги для всех комбинаций строк и столбцов (за один проход производятся вычисления лишь по одной комбинации строки и столбца) – нетрудно заметить, что это потребует значительных временных затрат. И только после этого матричный отчет появится в той секции, куда вы его поместили.

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

На рис. 4 изображен матричный отчет, использующий образец базы данных XTREME.MDB, включённый в Crystal Reports. Наименования продуктов приведены в этом матричном отчете в виде строк, а названия городов – в виде столбцов. Обратите внимание, что все города во всех штатах представлены в этом матричном отчете. Сравните эту таблицу с рис. 5, который представляет точно такой же объект Cross-Tab, но перенесённый уже в нижний колонтитул группы штатов. Теперь в отчёте представлен матричный отчет по каждой группе штатов, но, при этом, каждый матричный отчет будет включать данные только для этой отдельной группы. По вашему выбору, можно скопировать объект Cross-Tab из заголовка или нижнего колонтитула группы в заголовок или нижний колонтитул отчёта и фактически увидеть матричные отчеты для отдельных групп, а также общий матричный отчет для всего отчёта в целом.

Редактирование существующих матричных отчетов

После того, как вы создали матричный отчет и перетащили его в ваш отчёт, в него легко можно внести необходимые изменения. Для этого следует сначала выделить объект Cross-Tab целиком, а не только один из объектов, входящих в его состав, для чего нужно щёлкнуть мышью либо по небольшой незаполненной области в левом верхнем углу матричного отчета (над первой строкой и слева от первого столбца), либо по линиям сетки между ячейками. Сообщение в строке текущего состояния Cross-Tab следующего содержания: “You can select || the cross-tab in either the Design tab or the Preview tab ” (Вы можете выбрать || матричный отчет с помощью закладки Design или закладки Preview), говорит о том, что желаемый результат достигнут, то есть вам удалось выделить матричный отчет целиком.

После этого, выберите Format | Cross-Tab из раскрывающегося меню или щёлкните правой кнопкой мыши и выберите Format Cross-Tab из всплывающего меню. Таким образом, можно без особых проблем снова вызвать диалоговое окно Format Cross-Tab, позволяющее выбрать строку, столбец или суммируемые поля в закладке Cross-Tab или отформатировать матричный отчет с помощью закладок Style или Customize Style.

Можно также повернуть матричный отчет, то есть переставить строки и столбцы так, чтобы строка стала столбцом и наоборот. Для этой цели выберите Format I Pivot Cross-Tab из раскрывающегося меню или щёлкните правой кнопкой мыши по выделенному объекту Cross-Tab и выберите Pivot Cross-Tab.

Творческое использование группирования и формул

Как обсуждалось ранее, при создании матричных отчетов Crystal Reports выбирает заданное по умолчанию вычисление для суммируемого поля. При выборе поля для чисел или денежных единиц для какого-либо суммируемого поля Crystal Report будет использовать функцию Sum для вычисления промежуточных сумм чисел в каждой ячейке. Обычно это именно то, что вам может быть интересно для поля данного типа (например, общее число продаж зеленых велосипедов в США). Если вы хотите использовать поле другого типа (строковое, дату, логическое (булево) и т.п.), Crystal Reports будет автоматически использовать функцию Count для подсчета количества появлений конкретного суммируемого поля для каждой комбинации строка/столбец.

Однако при желании вы можете выбрать функцию, отличную от функции по умолчанию. Если вы хотите видеть среднюю величину продаж в каждой ячейке, а не итоговые цифры, это вполне легко сделать. В закладках Design или Preview щёлкните кнопкой мыши по объекту в ячейке (на пересечении строки и столбца). Строка состояния покажет, что вы уже выбрали Sum “суммируемого поля”. Изменение итогового действия от суммирования к нахождению средней величины (или любое другое доступное итоговое действие) осуществляется выбором Edit | Summary Field в раскрывающемся меню или посредством щелчка по правой кнопке мыши и выбора Edit Summary Operation из всплывающего меню. Это приводит к появлению показанного здесь диалогового окна Change Summary Operation:

Если вы использовали нечисловое поле для суммируемого поля матричного отчета, можете изменить итоговое действие с Count на Minimum, Maximum, Distinct Count или любую другую итоговую функцию, которая может использоваться в нечисловых полях. Это подобно изменению результирующего вычисления итогов и промежуточных сумм существующих групп. По сути, матричный отчет группирует записи базы данных для каждой комбинации строка/столбец, создавая поле итогов или промежуточных сумм для каждой “группы” Cross-Tab.

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

Изменение группирования матричных отчетов

Так как программа Crystal Reports использует процедуру для создания матричных отчетов, аналогичную процедуре создания групп этой же программы, вы с такой же легкостью можете изменять способ организации матричных отчетов. Можно изменить “группу” матричных отчетов во время начального создания или форматирования уже существующего матричного отчета. В закладке Cross-Tab выделите поле строки или столбца, которое хотите изменить, и щёлкните по кнопке Group Options. После этого появится диалоговое окно Cross-Tab Group Options.

Для поля, отличного от поля даты, существуют три доступные опции:

Если поле строки или столбца является полем даты, времени или даты/времени, диалоговое окно Cross-Tab Group Options предлагает дополнительные опции, которые обеспечивают дополнительную гибкость, подобно возможностям при создании групп отчёта с полями такого типа.

Раскрывающийся список A Column Will Be Printed предоставляет вам возможность выбрать, насколько часто в матричном отчете должна появляться новая строка или столбец. Можно выбрать каждый день, каждую неделю, две недели, каждый час, каждую минуту и т.д.

Следующий раскрывающийся список - The Value Printed for the Column Will Be предоставляет две возможности выбора: начальная дата периода и конечная дата периода. Если вы выберете опцию начальной даты, скажем, для квартальных периодов 1997 года, матричный отчет покажет 1/97,4/97, 7/97 и 10/97. Если вы выберете опцию конечной даты, матричный отчет покажет те же самые данные в ячейках, но даты будут 3/97, 6/97, 9/97 и 12/97.

Хотя опция Customize Group Name Field появляется в диалоговом окне Cross-Tab Group Options, она, вопреки ожиданию, не работает с матричными отчетами. При попытке ее использования, вы либо не получите никакого эффекта, либо получите непредвиденный результат, или, возможно, даже аварийное прекращение работы программы Crystal Reports. Используйте эту опцию только при работе с группами отчёта, но не с матричным отчетом!

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

 

Использование формул в матричных отчетах

Даже при наличии мощных опций группирования и возможности изменить итоговую функцию, используемую для вычисления величин в ячейке, не всегда удаётся отобразить материал в матричном отчете именно так, как того хочется, используя только поля базы данных в окошке Available Fields. Помните, что вы не ограничены в использовании формул в матричных отчетах для строки, столбца или суммируемого поля. Вы можете создать формулы заранее с помощью Formula Editor или щёлкнуть правой кнопкой мыши по опции New Formula в диалоговом окне Format Cross-Tab, чтобы вызвать Formula Editor. После того, как вы создали формулу, она появится в окошке Available Fields в закладке Report Fields. Просто перетащите её в окошко Rows, Columns или Summarized Field.

Внимание

Так как вычисления в матричном отчете производятся во время вторичного прохождения отчёта (при распечатке записей), вы не можете использовать формулы вторичного прохождения в матричных отчетах. Можно использовать только те формулы, которые применяются при первичном вычислении. Однако вы можете сделать диаграмму или карту на основе матричных отчетов, так как матричные отчеты обрабатываются перед построением диаграмм и карт во время вторичного прохождения.

Множественные строки, столбцы и суммируемые поля

Окошки Rows, Columns и Summarized Field в диалоговом окне Format Cross-Tab очевидно, имеют более одного поля с опцией “Yes”, что означает, что вы можете добавить более одного поля базы данных или формулы к любой секции этих матричных отчетов. Важно, однако, понять, как это повлияет на поведение и вид самого матричного отчета.

Вероятно, проще всего начать с множественных суммируемых полей. Если добавить более одного поля к окошку Summarized Field, матричный отчет будет просто вычислять дополнительный итог или промежуточную сумму по каждой ячейке. Можно, к примеру, использовать наименование продуктов в качестве строки, регион – как столбец, а количество и цену – как суммируемые поля. Матричный отчет просто включит два числа в каждую ячейку – общее количество и общую цену для каждого продукта и региона.

Можно даже добавить одно и то же поле в окошко Summarized Field более одного раза и выбрать различные итоговые функции для каждого появления поля. Вы можете, например, опять добавить поля общего количества и общей цены в окошко Summarized Field. Однако для второго появления поля вы могли бы уже выбрать итоговую функцию Average вместо Sum. В этом случае матричный отчет отображает четыре числа в каждой ячейке:

общее количество, общую цену, среднее количество и среднюю цену.

Необходимо понять, что добавление нескольких полей к окошкам Rows или Columns вызывает несколько другой эффект. В то время как множественные суммируемые поля просто производят вычисления и печать в одной и той же ячейке, множественные поля строки и столбца не просто печатаются одно за другим. При добавлении множественных полей к этим окошкам вы создаёте групповые связи между полями. Рассмотрим матричный отчет, к которому добавлены поле Product Type (тип продукта) в качестве первого поля строки и поле Product Name (наименование продукта) – как второе поле строки. Crystal Reports создаст иерархию групп по типу продуктов и внутри группы – по наименованию продуктов. Итоговый матричный отчет будет выглядеть так, как показано на рис.8.

Обратите внимание, что строки создаются и для “внутренних”, и для “внешних” групп – каждое наименование продукта имеет свою собственную строку “внутри” своего типа продуктов, а каждый тип продуктов имеет свою строку промежуточной суммы. А также в конце матричного отчета есть общая (grand total) итоговая строка. Вы можете установить такую иерархию групп множественных полей либо для строки, либо для столбца. Также вы можете включить сколько угодно полей в окошки Rows или Columns (хотя может и не иметь особого смысла превышать два или максимум три уровня).

Посмотрите, как выглядит часть результирующего матричного отчета:

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

Если вы планируете использовать множественные поля строки или столбца, то выбор полей, которые имеют логично выстроенные групповые взаимоотношения друг с другом, принимает решающее значение. Можно представить эти взаимоотношения как "от одного ко многим". Взаимоотношения Тип Продукта/Наименование Продукта – хороший тому пример – каждому типу продукта соответствует несколько наименований продуктов. Страна/Регион – ещё один удачный пример – для каждой страны имеется несколько регионов.

Размещение двух полей в окошках Rows или Columns, не имеющих таких взаимоотношений, приводит к появлению матричных отчетов необычного вида. Например, если добавить поля Customer Name (Имя заказчика) и Address (Адрес) к одному и тому же окошку строки или столбца, вы увидите просто строку или столбец с именами заказчиков, сразу за которым/ой следует единичная строка или столбец с адресом. Итог по каждому (ой) из них будет одинаковым, так как не существует логичной взаимосвязи “от одного ко многим” между полями (исключением может быть случай, когда единичный заказчик имеет офис в нескольких местах – тогда это будет пример настоящего матричного отчета с множественными полями).

Вам может потребоваться матричный отчет, который допускает несколько полей строки или столбца, которые не взаимодействуют как группы. Вам может понадобиться, например, отобразить Наличный Товар($), Смету($), Дисперсию($) и Дисперсию(%) в виде отдельных полей столбцов, которые только вычисляются и печатаются рядом. К сожалению, когда бы вы ни добавляли множественные поля к окошкам Rows или Columns, Crystal Reports показывает эти поля в групповой иерархии от верхнего к нижнему.

Переупорядочение полей в окошках Rows, Columns или Summarized Field

Множественные поля, которые вы добавляете к окошкам Rows или Columns должны иметь не только логическую взаимосвязь, но также должны появляться в окошке в правильном порядке. Используем предыдущий пример - Страны/Регионы. Первым полем в окошке должна быть Страна, а затем – Регион. Если их добавили в обратном порядке, то каждый регион будет появляться первым, а за ним – одна строка или столбец, содержащие числовые данные по стране, в которой находится этот регион.

Если вы случайно добавили поля к окошкам Rows , Columns или Summarized Field в неправильном порядке, можно решить эту проблему двумя способами: длинным или коротким путем. Длинный путь: удалите поля из окошек, и затем добавьте их снова в правильном порядке. Короткий путь: просто возьмите и перетащите поля в правильном порядке непосредственно внутри окошка. Вы можете щёлкнуть мышью на поле в любом из окошек и, не отпуская кнопку мыши, перетащить его в другое место в этом же окошке.

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

Настройка вида матричного отчета

До сих пор эта статья была посвящена основным шагам, необходимым для создания матричных отчетов, опциям группирования и некоторым особенностям множественных строк, столбцов и суммируемых полей. Во всех этих примерах итоговый объект Cross-Tab выглядит достаточно простым. Поскольку в Crystal Reports можно создавать отчёты презентационного качества, вам предоставляются многочисленные опции, которые помогут вам улучшить вид матричных отчётов. В версии 8 эти возможности значительно расширены.

Основной тип опций форматирования для матричных отчетов располагается в самих индивидуальных объектах Cross-Tab. Матричный отчет фактически состоит из серии индивидуальных объектов. Убедиться в этом проще всего, просмотрев матричный отчет в закладке Design. Обратите внимание на поля названий строки и столбца, которые подобны полям названий групп в обычном отчёте – они отображают поля базы данных, которые образуют заголовки строки и столбца. Текстовые объекты Total показывают промежуточные суммы и итоги строк и столбцов. Это – стандартные текстовые объекты, их содержание можно, при желании, изменить, дважды щёлкнув по ним мышью. А в текущих ячейках обратите внимание на функции промежуточных сумм или итогов, которые вычисляют итоги матричных отчетов.

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

Рассмотрим следующий матричный отчет:

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

Для того, чтобы установить определённую ширину столбца, вы можете просмотреть одну из закладок в диалоговом окне Format Cross-Tab для определенного типа установок ширины столбца, но проще будет выделить индивидуальный объект, который образует столбец, и изменить его размеры. Это можно осуществить с помощью курсора, изменяющего размеры в двух направлениях. А затем просто установите необходимую ширину объекта.

Можно форматировать отдельные части матричного отчета подобно любому другому текстовому объекту или числовому полю, используя либо панель инструментов Formatting, либо Format Editor. Можно изменить цвет объекта, форму и размер шрифта, горизонтальное выравнивание и любую другую стандартную функцию форматирования. Если вы в ходе работы используете один из объектов итоговой или промежуточной суммы, то вы можете выбрать один из стилей форматирования по умолчанию, либо выбрать настраиваемый стиль. Это позволит вам задать число десятичных разрядов, определить необходимость включения разделителя тысяч или символа валюты, или любую другую опцию форматирования, подходящую для полей числового или денежного типа. Если вы основываете строку или столбец на поле даты или времени, можно выбрать способ представления данных – месяц/год, месяц/день/год, час/минута, час/минута/секунда или любой другой вариант, предоставляемый Format Editor.

Можно выделить несколько объектов в матричном отчете, используя CTRL-click. А затем отформатировать их все одновременно, используя инструментальную панель Formatting или Format Editor .

Закладка Style

Когда вы выделяете объект Cross-Tab и форматируете его с помощью Format | Cross-Tab или, нажимая правую кнопку мыши и выбирая Format Cross-Tab из всплывающего меню, появляется диалоговое окно Format Cross-Tab. В версии 8 добавлены две новых закладки к диалоговому окну – Style и Customize Style. Закладка Style позволяет сделать выбор из нескольких первоначально заданных стилей форматирования для объекта Cross-Tab.

Опция Original просто отображает объект Cross-Tab без специального форматирования, это – опция исходного форматирования, действующая при первом создании матричных отчетов. У вас есть возможность выбора любого заранее заданного стиля в списке. Когда вы щёлкнете кнопкой мыши по стилю, в правой части закладки Style появляются образцы стиля. После этого просто щёлкните OK. Матричный отчет будет отформатирован в соответствии с выбранным вами встроенным стилем.

Начальная версия Crystal Reports 8 ведёт себя несколько необычно при использовании закладки Style диалогового окна Format Cross-Tab. Даже если вы ещё не выбрали никаких пользовательских установок, вы все равно получите предупреждение, что можете потерять их, если выберете один из встроенных стилей. И если вы вернётесь к закладке Style после выбора одного из встроенных стилей, то будут выбраны Custom setting, а не встроенный стиль, выбранный вами ранее.

Закладка Customize Style

Для специфического форматирования объекта Cross-Tab необходимо использовать закладку Customize Style диалогового окна Format Cross-Tab. Эта закладка содержит дополнительные опции для матричного отчета, которые более точно регулируют его поведение. Закладка Customize Style изображена на рис.9.

Если вы уже выбрали один из встроенных стилей в закладке Style, то увидите его установки при выборе закладки Customize Style. Например, вы увидите цвета фона для каждого элемента строки или столбца, для которых выбран встроенный стиль. Если встроенный стиль отображает итоги перед строками и столбцами, а не после них, вы увидите, что выбраны именно эти опции. Если вы ещё не выбрали ни один из встроенных стилей, или хотите изменить некоторые настройки, определённые встроенным стилем, то можете выбрать различные опции в закладке Custom Style. В таблице 1 даются пояснения для различных опций.

Таблица 1 Опции Customize Style tab

 

Опция

Описание

 

Rows list (Список строк)

Выберите строку, которую вы хотите отформатировать. Если множественные поля строки уже были вами добавлены, то увидите перечень каждого поля строки. Можно также выбрать опции форматирования отдельно для общего итога (grand total) строки.

 

Columns list(Список столбцов)

Выберите столбец, который вы хотите отформатировать. Если множественные поля столбца уже были вами добавлены, то увидите перечень каждого поля столбца. Можно также выбрать опции форматирования отдельно для общего итога (grand total) столбца.

Опции Group

   
 

Suppress Subtotal

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

Эта опция доступна только для полей высокого уровня, когда вы уже выбрали множественные поля строки или столбца – опция не доступна, если вы выбрали поле строки или столбца низшего уровня (или если добавили только одно поле).

Опции Grid

   
 

Suppress Label

Если вы выбираете опцию Suppress Subtotal, эта опция становится доступной. Установка этой опции полностью удалит поле, которое вы выбираете из строки или столбца. Иерархия группирования останется, но группа более высокого уровня совсем не появится в матричном отчете.

 

Alias for Formulas

Используется для ссылки на целую строку или столбец при выполнении условного форматирования в матричном отчете.

 

Background Color

Устанавливает фоновый цвет для целой строки или столбца, выбранных из списка строк или столбцов. Этот цвет не зависит от цвета любой индивидуальной ячейки, который можно выбрать, выделяя объект в матричном отчете и используя Format Editor.

 

Show Cell Margins

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

Отключение этой опции будет размещать ячейки прямо друг за другом.

 

Indent Row Labels .

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

 

Format Grid Lines

Показывает диалоговое окно Format Grid Lines с кнопками (описано далее), которое предназначено для задания того, где и как должны появляться линии сетки в матричном отчете.

 

Repeat Row Labels

При выборе Keep Columns Together, эта опция будет повторять метки строки, если ширина матричных отчетов превышает страницу и таблица должна быть распечатана на двух или более страницах.

 

Keep Columns

Защищает столбцы от разрезания пополам, когда распечатываемая таблица превосходит по ширине страницу.

 

Row Totals on Top

Отображает итог по строке вверху, а не внизу текущих строк, содержащих обрабатываемые данные.

 

Column Totals

Отображает итог по столбцу слева, а не справа от левого текущего столбца, содержащего обрабатываемые данные.

 

Suppress Empty Rows

Строки, не содержащие данных, не появятся в строках матричного отчета.

 

Suppress Empty Columns

Столбцы, не содержащие данных, не появятся в столбцах матричного отчета.

 

Suppress Row

Предотвращает появление общего итога строки из общего итога (Grand Totals) матричного отчета.

 

Suppress Column

Предотвращает появление общего итога столбца из общего итога (Grand Totals) матричного отчета.

Некоторые из опций закладки Customize Style, в частности, опции Repeat Row Labels и Keep Columns Together определяют, как будет выглядеть матричный отчет при распечатке его на бумаге. Это важно, так как Crystal Reports изображает матричные отчеты в закладке Preview иначе, чем они будут выглядеть в распечатанном виде. Даже если ширина матричного отчета превышает ширину страницы, закладка Preview покажет полный матричный отчет. Вы можете сильно прокрутить изображение вправо, чтобы увидеть остальную часть матричного отчета, не поместившуюся на экран.

Однако при распечатке матричного отчета на бумаге из Crystal Reports, если его ширина больше, чем ширина печатной страницы, необходимо обозначить разрывы страниц. Можно управлять форматированием матричного отчета Crystal Reports на нескольких страницах с помощью опций закладки Customize Style. Когда вы отображаете матричный отчетв закладке Preview, то можете увидеть, где Crystal Reports вставляет разрывы страниц для распечатки на бумаге матричных отчетов. В следующем примере обратите внимание что разрывы страниц вставлены между столбцами (они не разбивают числа в столбце) и что разметки строк повторяются после каждого разрыва страницы. Это результат активации обеих опций – Keep Columns Together и Repeat Row Labels.

Форматирование линий координатной сетки

В предыдущих версиях Crystal Reports вы просто могли по желанию включить или отключить опцию линий сетки. В версии 8 добавлена возможность настройки характера линий, определяющая, какие именно линии появятся, и как они будут выглядеть. Настроить линии сетки можно, нажав кнопку Format Grid Lines в секции Grid Options закладки Customize Style. Появится диалоговое окно Format Grid Line, как показано на рис.10.

Как и в предыдущих версиях, вы можете совсем не отображать линии сетки, отключив Show Grid Lines. Чтобы отрегулировать отдельные линии сетки, можно либо выделить в списке линий сетки ту линию, которую вы хотите настроить, либо просто щёлкнуть мышью по отдельной линии на диаграмме линий сетки в верхней части диалогового окна. Затем можно выбрать индивидуальные опции для линии сетки в секции Line Options диалогового окна Format Grid Lines.

Добавление подписей к матричным отчетам

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

В каждой ячейке существует несколько суммируемых полей. Однако пользователю не очевидно, что это за числа – они могут быть итогами, средними значениями или количеством появлений полей. Хотя программа Crystal Reports не имеет возможности делать подписи для матричных отчетов, вы можете создать свои собственные подписи, воспользовавшись текстовыми объектами и, при желании, используя отрисовку с помощью цветных прямоугольников. Здесь изображен многоитоговый матричный отчет с подписью:

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

Условное форматирование матричных отчетов

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

Выделите итоговый объект или объект с промежуточной суммой, который вы хотите условно отформатировать. Затем выберите Format | Highlighting Expert из раскрывающегося меню или щёлкните правой кнопкой мыши и выберите Highlighting Expert из всплывающего меню. Вы можете выбрать условия и форматы Highlighting Expert для того, чтобы выделить определённые ячейки.

Существует также возможность использовать условные формулы. После выделения в матричном отчете итогового объекта или объекта с промежуточной суммой отобразите Format Editor, выбирая опции из раскрывающегося меню или щёлкнув правой кнопкой мыши и выбрав опции из всплывающего меню. Вы можете нажать кнопку Conditional Formula в любом месте Format Editor, чтобы задать условия для этого свойства форматирования.

Что такое CurrentFieldValue?

Если вы решили воспользоваться условными формулами, а не Highlighting Expert, необходимо быть внимательными с тестами, использующимися для условного форматирования итогов матричного отчета. Так как итоги – это вычисления, основанные на полях базы данных, но при этом сами не являющиеся полями базы данных, вы не можете просто протестировать поле базы данных для условного форматирования матричного отчета. И, в отличие от того, что вы видите, если помещаете промежуточные суммы или итоги в нижний колонтитул группы, вы не увидите промежуточных сумм или итогов, которые заполняют ячейки в списке полей Formula Editor.

При условном форматировании матричных отчетов вы должны протестировать встроенную функцию Current Field Value. Current Field Value, как следует из его названия, возвращает всё, что содержит протестированное поле (т.е. показывает текущее значение поля). Следовательно, можно использовать условную формулу, например, чтобы окрашивать в серебристый цвет фон для промежуточных сумм матричного отчета, превышающих $ 10,000:

If CurrentFieldValue > 10000 Then Silver Else NoColor

На рис.11 показан матричный отчет с таким форматированием

Что такое GridRowColumnValue и Alias for Formulas?

Используя функцию Current Field Value, описанную в предыдущем разделе, вы можете только задать условия форматирования матричного отчета на основе значения текущей ячейки. Однако вам может понадобиться также условное форматирование на основе строки или столбца, содержащих эту ячейку, а не только на основе её значения. В версии Crystal Reports 8 добавлены две новых функции GridRowColumnValue и Alias for Formulas, позволяющие реализовать эту возможность.

При условном форматировании ячейки обратите внимание на новую функцию GridRowСolumnValue в окошке Functions редактора формата формул Format Formula Editor. Используя эту функцию вместе с формулой If-Then-Else (при установке свойства многовариантного форматирования) или с булевой (логической) формулой (при установке свойства форматирования включить/выключить), вы можете определить строку или столбец, в котором находится ячейка, и, соответственно, произвести форматирование. Рассмотрим следующую булеву (логическую) формулу, которая задаёт свойство Drop Shadow в закладке Format Editor Border:.

GridRowColumnValue("Customer.Region") = "CA"

Результат показан на рис.12. Обратите внимание, что затенены только ячейки, расположенные в столбце CA. Используя псевдоним как параметр функции GridRowColumnValue, можно определить, к какой строке или столбцу будет относиться формула. В этом сценарии Customer.Region употреблён в качестве псевдонима. Так тестируется функция GridRowColumnValue для столбца Region. Если значение столбца – CA, то будет использоваться затенение.

По умолчанию, псевдоним каждой строки или каждого столбца – это название поля или формулы строки или столбца (без фигурных скобок). Если вы хотите изменить псевдоним на более содержательное название (допустим, только название поля вместо полной комбинации названий таблицы/поля), то можете сделать это в закладке Customize Style диалогового окна Format Cross-Tab (см. рис.9). Выделите поле строки или столбца в списке Rows или Columns. Затем введите новое значение в текстовом поле псевдонима Alias for Formulas. Далее можно использовать новый текст, введенный вами, как параметр функции GridRowColumnValue для обращения к строке или столбцу.

Внимание

Вы не сможете анализировать объект Cross-Tab по иерархии настолько глубоко, насколько вам бы этого хотелось. Если вы включаете матричный отчет в другой итоговый отчёт, то вы можете иерархически анализировать группы итогового отчёта, но не матричный отчет.

Дополнительную информацию Вы можете получить в компании Interface Ltd.

Обсудить на форуме Seagate
Отправить ссылку на страницу по e-mail


Interface Ltd.

Ваши замечания и предложения отправляйте автору
По техническим вопросам обращайтесь к вебмастеру
Документ опубликован: 18.01.01