14.07.2010

Расчет ресурсов для определенного значения измерения

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

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

Создадим отчет, в нем создадим схему компоновки данных.

В схеме компоновки данных добавим набор данных - запрос.

Введем текст запроса:

Копировать в буфер обмена
ВЫБРАТЬ
 ПродажиОбороты.Покупатель,
 ПродажиОбороты.Товар,
 ПродажиОбороты.СуммаОборот
ИЗ
 РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты

На закладке "Вычисляемые поля" создадим вычисляемое поле и введем его имя и выражение:

Копировать в буфер обмена
СуммаОборот * 100 / Вычислить("Сумма(Выбор Когда Товар = &ИсследуемыйТовар Тогда СуммаОборот Конец)", "", "ОбщийИтог")

Как видно, для вычисления процентного отношения мы использовали функцию Вычислить, которая позволяет вычислить выражение для общего итога по группировке. В данном случае для общего итога будет вычисляться выражение Сумма(Выбор Когда Товар = &ИсследуемыйТовар Тогда СуммаОборот Конец), результат которого будет содержать объем продаж исследуемого товара.

Для того, чтобы в результат выводилось ограниченное количество знаков после запятой, в оформлении поля укажем формат: ЧДЦ='2'

Создадим выражения ресурсов для полей набора данных. Это делается на закладке "Ресурсы".

Добавим в список ресурсов поля СуммаОборот и ПроцентОтИсследуемогоТовара. Выражение ресурса для поля СуммаОборот нас устраивает, а выражение для вычисления итога по полю ПроцентОтИсследуемогоТовара нас не устраивает (нам же не нужно получить сумму процентов от каждой детальной записи), поэтому заменим его на следующее:

Копировать в буфер обмена
Сумма(СуммаОборот) * 100 / Вычислить("Сумма(Выбор Когда Товар = &ИсследуемыйТовар Тогда СуммаОборот Конец)", "", "ОбщийИтог")

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

Поле готово. Теперь необходимо создать параметр ИсследуемыйТовар, для того чтобы было где указывать, с каким товаром нужно сравнивать объемы продаж.

Для этого на закладке "Параметры" добавим параметр, введем его имя "ИсследуемыйТовар" и укажем, какого типа значение параметра:

Отчет готов, осталось сделать его настройки.

Сделаем это на закладке "Настройки". Добавим в структуру отчета группировку по полю Товар, в выбранные поля добавим поля "СуммаОборот" и "ПроцентОтИсследуемогоТовара".

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

Теперь отчет готов.

Запустим его на исполнение, введем значение параметра "Исследуемый товар" и получим следующий результат:

Параметры данных: Исследуемый товар = Йогурт

Товар Сумма Оборот Процент от исследуемого товара
Bosch15 3 000,00 5,49
Veko345MO 70 000,00 128,21
Veko67NE 48 000,00 87,91
Veko876N 440 000,00 805,86
VekoNT02 1 410 000,00 2 582,42
Босоножки 222 500,00 407,51
Ботинки 11 500,00 21,06
Доставка 1,00 0,00
Йогурт 54 600,00 100,00
Колбаса 75 900,00 139,01
Кроссовки 85 000,00 155,68
Пинетки 90 000,00 164,84
Ряженка 10 450,00 19,14
Сапоги 23 650,00 43,32
Сметана 25 000,00 45,79
Тапочки 4 500,00 8,24
Торт 5 000,00 9,16
Туфли 4 500,00 8,24
Хлеб 5 600,00 10,26
Итого 2 589 201,00 4 742,13