Расчет итогов в отчете можно произвести указав выражение, к примеру, {Sum(DataBand1)}. При этом, данные итоги считаются во время построения отчета: каждый раз, когда осуществляется одна операция с бэндом Данные (DataBand), производится расчет одного значения. Затем, все рассчитанные значения суммируются и в результате получится итоговое значение, которое будет отображено. В этом случае, итоги связаны с бэндами. В Stimulsoft Reports расчет итогов можно произвести другим способом - моментально. Иначе говоря, рассчитать итог не связанный с бэндами. Для этого следует использовать специальный префикс Totals перед функцией с разделителем ".", например, {Totals.Sum(DataBand1)}. Расчет функций с префиксом Totals происходит в месте вызова функции, в отличие от итогов связанных с бэндами, расчет которых выполняется в ходе построения отчета.
Функции Totals
В таблице ниже представлен список функций Totals, их описание и пример.
Функция |
Описание |
Пример |
{Avg()} |
Предоставляет возможность высчитать среднее арифмитическое значение: В аргументах указывается объет или два объекта |
{Avg(DataSource.Column1)} - в этом случае, будет вычислено среднее арифмитическое по колонке Column1. |
{Count()} |
Предоставляет возможность рассчитать количество значений или количество уникальных значений: |
{Count()} - в этом случае, результатом будет количество записей в источнике данных. |
{First()} |
Предоставляет возможность отобразить первое значение из указанного объекта: В аргументах указывается объет или два объекта |
{First(DataSource1.Column1)} - в этом случае, результатом будет первое значение Column1 из источника DataSource1. |
{Last()} |
Предоставляет возможность отобразить последнее значение из указанного объекта: В аргументах указывается объет или два объекта |
{Last(DataSource1.Column1)} - в этом случае, результатом будет последнее значение Column1 из источника DataSource1. |
{Max()} |
Предоставляет возможность отобразить максимальное значение из указанного объекта: В аргументах указывается объет или два объекта |
{Max(DataSource1.Column1)} - в этом случае, результатом будет максимальное значение из Column1 исчтоника DataSource1.
{MaxStr(DataSource1.Column1)} - в этом случае, все значения будут отсортированы в алфавитном порядке. Результатом будет последнее значение.
{Max(DataBand2, DataSource.Column2)} - в этом случае, результатом будет максимальной значение Column2 бэнда DataBand2. |
{Median()} |
Предоставляет возможность отобразить среднее (не арифмитческое) значение из списка: В аргументах указывается объет или два объекта |
Допустим, Column1 содержит 5 значений: 2, 5, 6,1,7. Функция {Median(DataSource1.Column1)} отобразит среднее значения из этого списка, т.е. результатом будет значение 6.
{Median(DataBand2, DataSource.Column2)} - в этом случае, результатом будет среднее значение Column2 бэнда DataBand2. |
{Min()} |
Предоставляет возможность отобразить максимальное значение из указанного объекта: В аргументах указывается объет или два объекта |
{Min(DataSource1.Column1)} - в этом случае, результатом будет минимальное значение из Column1 исчтоника DataSource1.
{MinStr(DataSource1.Column1)} - в этом случае, все значения будут отсортированы в алфавитном порядке. Результатом будет первое значение.
{Min(DataBand2, DataSource.Column2)} - в этом случае, результатом будет минимальное значение Column2 бэнда DataBand2. |
Предоставляет возможность отобразить значение, которое наиболее часто встречается в списке значений: В аргументах указывается объет или два объекта |
{Mode(DataSource1.Column1)}. Допустим Сolumn1 содержит список значений: 2, 2, 6, 7, 7, 8, 7, 6, 5, 9, 4. В этом случае, результаоом будет число 7, т.к. оно повторяется в списке значений наиболее часто. |
|
Предоставляется возможность отобразить ранг значения. Обязателен префикс Totals: Объеты для обработки и присвоения ранга (тип object) Значение (true or false) для присвоения плотного или не плотного ранка Направление сортировки значений. |
{Totals.Rank(DataBand1,DataSource.Column1)}. Допустим, колонка Column1 содержит список значений: 44, 9, 36, 55, 71. В этом случае, значения будут отсортированы по возрастанию, т.е. 9, 36, 44, 55, 71 и каждому из них будет присвоен ранг. Число 9 получит ранг 1, 36 - ранг 2, 44 - ранг 3, 55 - ранг 4, 71 - ранг 5. По умолчанию, рассчитывает плотный ранг и сортировка значений для присвоения ранга выполняется по возрастанию
Пример неплотного ранга - {Totals.Rank(DataBand1,DataSource.Column1, false, StiRankOrder.Asc)}. Допустим Column1 содержит список значений: 44, 9, 44, 9, 31, 64,68, 71. Значения присвоены по возрастанию, т.е. 9, 9, 31, 44, 44, 44, 68, 71. В этом случае, ранги будут следующими: 9 - ранг 1, 9 - ранг 1, 31 - ранг 3, 44 - ранг 4, 44 - ранг 4, 44 - ранг 4, 68 - ранг 7, 71 - ранг 8. Иначе говоря при присвоении ранга числу, учитывается ранг предыдущего значения и количество значений с этим рангом. |
|
Предоставляет возможность отобразить результат суммы значений: В аргументах указывается: Объеты для обработки и присвоения ранга (тип object) Условие Выражение суммирования |
{Sum(DataSource1.Column1)} - в этом случае, результатом будет сумма всех значений Column1 в источнике DataSource1.
{SumDistinct(DataSource1.Column1)} - в этом случае, результатом будет сумма всех уникальных значений Column1 в источнике DataSource1.
SumTime(DataSource1.Column1) - в этом случае, результатом будет сумма времени из колонки Column1 в источнике DataSource1.
{Sum(DataBand2,DataSource2.Column2)} - в этом случае, результатом будет сумма значений из Column2 бэнда DataBand2.
{SumDistinct(DataBand1,DataSource.Column1, DataSource.Column2)} - в этом случае, результатом будет сумма значений Column2, которые соотвествуют уникальным значениям из Column1 бэнда DataBand2. |
Пример отчета с функцией Totals
Допустим, есть Master-Detail отчет, который представляет собой список продуктов по категориям:
В этом отчете, итог может быть рассчитан по каждой категории, по всему отчету. Также можно рассчитать долю каждой категории из общей суммы. Для начала рассчитаем сумму продуктов категории. Для этого, в шаблон отчета следует добавить бэнд Итог данных, разместить на нем текстовый компонент с выражением расчета итога {Sum(DataBand2,Products.UnitPrice)}. Для суммирования значений применяется функция Sum, в её аргументах указывается объект по которому будут считаться итоги и колонка данных, значения которой будут суммироваться. Поскольку, необходимо рассчитать сумму продуктов по каждой категории, то объектом для рассчета итогов будет детальный бэнд Данные, т.е. DataBand2. Значения в колонке UnitPrice обозначают стоимость каждого продукта, поэтому сумма этих значений и будет итог для категории:
В этом случае, итог является связанным с бэндом Данные. Для расчета итога по отчету, в это мслучае, следует использовать функции не связанные с бэндами. Для этого, к функции необходимо добавить префикс Totals, через разделитель ".". В качестве объекта, следует указать источник данных. Выражение расчета итога по отчету, в этом случае, будет {Totals.Sum(Products,Products.UnitPrice)}. Результат отобразим на master бэнде:
Каждый раз, когда в отчете будет печататься master бэнд, будет выводиться итог по отчету. Используя результаты рассчетов, можно вычислить долю каждой категории из общего итога. Результат отобразим в процентах. Для рассчета доли, следует итог по категории разделить на итог по отчету - {(Sum(DataBand2,Products.UnitsInStock) / Totals.Sum(Products, Products.UnitsInStock))}. Для текстового компонента, в котором будет выводиться доля, следует установить процентный формат. Результат отобразим на master бэнде:
Таким образом, рассчитать можно любой итог в отчете. Для рассчета итога не связанного с бэндами следует использовать префикс Totals к имени функции, через разделитель ".".