Обзор процесса создания приложений. Моделирование данных отчета, страница 8

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

SELECT Продукт, Белки, Жиры, Углев, ((Белки+Углев)*4.1+Жиры*9.3)

FROM Продукты

ORDER BY 5;

Во-вторых, если нужно, чтобы отчет не зависел от ORACLE, то большую часть усовершенствованных средств SQL, предоставляемых ORACLE в качестве расширения стандарта ANSI, использовать нельзя. При обработке же вычислений функциями PL/SQL даже в самых сложных отчетах появляется возможность применения ODBC для работы с базами данных, отличными от ORACLE.

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

Столбец Калорийность (см. отчет "Калорийность продуктов") можно сделать формульным столбцом в Data Model Editor. Для этого нужно дважды щелкнуть мышью на Q_1 и придать запросу следующий вид:

SELECT Продукт, Белки, Жиры, Углев

FROM Продукты;

Изменение запроса удаляет столбец базы данных Калорийность и делает недействительными все текущие итоговые поля, в основе которых лежит этот столбец. Добавить формулу для Калорийность можно, щелкнув мышью на кнопке Formula Column в Data Model Editor, а затем на блоке группы под столбцом Углев. После этого для вывода на экран палитры свойств Formula Column нужно дважды щелкнуть мышью на появившемся столбце CF_1.

Для отображения на экране редактора Program Unit с функцией PL/SQL, которая будет вычислять нужное значение, следует изменить имя столбца в группе General на Калорийность, а затем щелкнуть мышью на свойстве PL/SQL Formula. Для создания готовой функции необходимо добавить оператор:

return (:Белки+:Углев)*4.1+:Жиры*9.3;

Двоеточия означают ссылки на элементы отчета. Щелкнув мышью на Compile, нужно исправить все ошибки, а затем щелкнуть на Close.

Если щелкнуть мышью на ОК в таблице свойств, то в группе G_Продукт появится новый столбец Калорийность. Редактор выводит этот столбец курсивом, выделяя его как формульный столбец.

После этого следует перейти к Object Navigator и найти новый столбец в группе G_ПРОДУКТ подраздела Groups раздела Data Model. Формульный столбец имеет два значка, один из которых представляет сам столбец, а второй - программный текст PL/SQL. При щелчке мышью на значке формульного столбца отобразится палитра свойств этого столбца, а на значке PL/SQL - текст формулы PL/SOL.

Итоговые столбцы

Формульные столбцы позволяют вычислять и отображать в любой области отчета значение, основой которого является некая запись. Однако иногда бывает нужно усложнить вычисления и обрабатывать значения группы записей отчета. Итоговый столбец (summary column) - это объект данных, в котором вычисляется агрегированное значение.

 Столбец разбиения (break column) - это столбец, который переносится из группы записей на уровень выше, в группу разбиения. Для каждого значения этого столбца Developer/2000 создает так называемое разбиение (break), или экземпляр группы, т.е. после того, как отчет считал запись, ее значение проверяется в столбце разбиения. Если это значение отличается от значения предыдущей записи, отчет прерывается и выполняется специальная операция. В компоновке отчета это соответствует объекту повторяющейся рамки. Столбец разбиения и повторяющаяся рамка позволяют выполнять конкретную операцию для каждого разбиения. Важным свойством столбца разбиения является свойство Set Break Order, для которого нужно установить значение Yes. После установки этого свойства открывается еще одно - Break Order, которое можно установить либо как Ascending (возрастание), либо как Descending (убывание), в зависимости от того, в каком порядке следует отображать сортируемые данные.