Business View: Некоторые примеры применения формул

Наталья Пригодина

Темой данного примера послужила часто встречающаяся задача - подсчет итогов по группам. Но не обычных итогов, для которых было бы достаточно "Итогового поля" или "Поля Промежуточного результата", а итогов, которые вычисляются на уровне группы, но не имеют смысла на уровне строки. Например, процент отгруженных заявок за месяц или доля трудоустроенных сотрудников от общего числа обратившихся. Источником данных будет Business View TEST, которое мы построили в предыдущей статье (приведем здесь только основные скриншоты). А считать мы будем процент завершенных событий по группе "Тип события", предполагая, что аналитика такого рода поможет нам выявить события, на которые необходимо обратить внимание управляющему персоналу.

Рисунок 1. Соединение данных

Рисунок 2. Основание данных

Теперь добавим отличия от предыдущего примера. Каждое событие в нашей базе теперь получит признак - "Завершено / Не завершено". Добавим в таблицу Action поле IsClosed (bit), которое, конечно же, может принимать значения True или False. Таблица примет такой вид.

Таблица Action. Таблица фактов (событий), произошедших за определенное время

DateAction

Дата события

TypeActionId

Идентификатор типа события

EmployeeId

Идентификатор сотрудника

Description

Некое описание

IsClosed

Завершено ли событие (Да/Нет)

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

Добавим в наш источник данных новое поле. И формулу "Закрыто", которая возвращает 1, если в поле IsClosed стоит True и 0, если поле False.

Рисунок 3. Основание данных.

Включаем новую формулу в бизнес-элемент.

Рисунок 4. Бизнес-элемент.

И, наконец, включаем бизнес-элемент "Действия по сотрудникам и типам событий" в Business View.

Рисунок 5. Бизнес-вью.

Создадим отчет, воспользуемся стандартными способами и объектами Crystal Reports.

Источник данных:

Рисунок 6. Источник данных.

Расположим поля, установим группировку.

Рисунок 7. Отчет с установленной группировкой.

Подводим итоги. Обратите внимание, что на Рисунке 9 в вычисляемом итоге стоит "Сумма", а не "Количество" - так как это поле - формула, возвращающая 1 или 0.

Рисунок 8. Итог. Количество событий.

Рисунок 9. Итог. Количество завершенных событий.

Рисунок 10. Полученные итоги.

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

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

Рисунок 11. Расчет процента завершенных событий по группе Тип События.

Используя эту формулу, получаем:

Рисунок 12. Разместили формулу.

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

Рисунок 13. Формула во второй группе.

Опять формула! Повторю, для каждой группы необходимы будут расчеты, относящиеся только к этой группе и никакой другой. Несмотря на то, что они рассчитывают "одно и то же" - процент завершенных событий, они разные, и сами результаты между собой не соотносятся, нельзя вычислить их среднее, сумму и использовать прочие агрегирующие функции. А если таких значений не одно, как у нас в примере, количество событий? Допустим, их несколько - например, количество событий по признаку 1, по признаку 2 и так далее. И все они должны располагаться столбиками. Данный пример может иллюстрировать как базу данных, где эти значения действительно лежат в своих столбцах, так и форму отчета, которая утверждена каким-либо документом, и мы вынуждены выводить наши значения столбцами. В этом случае процент "Завершенных" (они могут быть и "начатыми", и "конфликтными", и еще многовариантно какими) должен будет рассчитываться по каждому столбцу, и количество формул возрастает во много раз.

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

Строим BusinessView. Часть 1

Строим BusinessView. Часть 2


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=26161