Расчет итогов в отчете можно произвести указав выражение, к примеру, {Sum(DataBand1)}. При этом, данные итоги считаются во время построения отчета: каждый раз, когда осуществляется одна операция с бэндом Данные (DataBand), производится расчет одного значения. Затем, все рассчитанные значения суммируются и в результате получится итоговое значение, которое будет отображено. В этом случае, итоги связаны с бэндами. В Stimulsoft Reports расчет итогов можно произвести другим способом - моментально. Иначе говоря, рассчитать итог не связанный с бэндами. Для этого следует использовать специальный префикс Totals перед функцией с разделителем ".", например, {Totals.Sum(DataBand1)}. Расчет функций с префиксом Totals происходит в месте вызова функции, в отличие от итогов связанных с бэндами, расчет которых выполняется в ходе построения отчета.

 

Функции Totals

В таблице ниже представлен список функций Totals, их описание и пример.

 

Функция

Описание

Пример

{Avg()}

Предоставляет возможность высчитать среднее арифмитическое значение:

strel11 В аргументах указывается объет или два объекта
strel11 Возвращает значения различного типа (double, decimal, long, DateTime, TimeSpan), в зависимости от выбранной функции.

{Avg(DataSource.Column1)} - в этом случае, будет вычислено среднее арифмитическое по колонке Column1.
{AvgDate(DataSource.ColumnDate)} - в этом случае, будет вычислено среднее значение даты по колонке ColumnDate.
{AvgTime(DataSource.ColumnTime)} - в этом случае, будет вычислено среднее значение времени по колонке ColumnTime.

 
Во всех функциях может быть указано два аргумента. Например, в отчете используется несколько бэндов Данные. Необходимо рассчитать среднее арифмитическое по колонке для первого бэнда Данные. В этом случае, первым аргументом указывается бэнд, вторым объект для вычисления  - {Avg(DataBand1,DataSource.Column2)}. В результате будет расчитано среднее арифмитическое по Column2, но только для значений DataBand1.

{Count()}

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

{Count()} - в этом случае, результатом будет количество записей в источнике данных.

 
{Count(DataBand1, DataSource.Column1)} - в этом случае, результатом будет количество записей в колонке Column1 для DataBand1.

 
{CountDistinct(DataSource.Column1)} - в этом случае, результатом будет количество уникальных записей в DataSource.Column1.

 
{CountDistinct(DataBand2, DataSource.Column2)} - в этом случае, результатом будет количество уникальных записей в колонке Column2 для DataBand2.

{First()}

Предоставляет возможность отобразить первое значение из указанного объекта:

strel11 В аргументах указывается объет или два объекта
strel11 Возвращает значения различного типа object

{First(DataSource1.Column1)} - в этом случае, результатом будет первое значение Column1 из источника DataSource1.
 
{First(DataBand2, DataSource.Column2)} - в этом случае, результатом будет первое значение Column2 бэнда DataBand2.

{Last()}

Предоставляет возможность отобразить последнее значение из указанного объекта:

strel11 В аргументах указывается объет или два объекта
strel11 Возвращает значения различного типа object

{Last(DataSource1.Column1)} - в этом случае, результатом будет последнее значение Column1 из источника DataSource1.
 
{Last(DataBand2, DataSource.Column2)} - в этом случае, результатом будет последнее значение Column2 бэнда DataBand2.

{Max()}

Предоставляет возможность отобразить максимальное значение из указанного объекта:

strel11 В аргументах указывается объет или два объекта
strel11 Возвращает значения различного типа double, decimal, long, DateTime, TimeSpan, string, в зависимости от выбранной функции.

{Max(DataSource1.Column1)} - в этом случае, результатом будет максимальное значение из Column1 исчтоника DataSource1.
 
{MaxDate(DataSource1.ColumnDate)} - в этом случае, результатом будет максимальная дата из ColumnDate источника DataSource1.
 
{MaxTime(DataSource1.ColumnTime)}  - в этом случае, результатом будет максимальное время из ColumnTime источника DataSource1.

 

{MaxStr(DataSource1.Column1)} - в этом случае, все значения будут отсортированы в алфавитном порядке. Результатом будет последнее значение.

 

{Max(DataBand2, DataSource.Column2)} - в этом случае, результатом будет максимальной значение Column2 бэнда DataBand2.

{Median()}

Предоставляет возможность отобразить среднее (не арифмитческое) значение из списка:

strel11 В аргументах указывается объет или два объекта
strel11 Возвращает значения различного типа double, decimal, long, в зависимости от выбранной функции.

Допустим, Column1 содержит 5 значений: 2, 5, 6,1,7. Функция {Median(DataSource1.Column1)} отобразит среднее значения из этого списка, т.е. результатом будет значение 6.

 

{Median(DataBand2, DataSource.Column2)}  - в этом случае, результатом будет среднее значение Column2 бэнда DataBand2.

{Min()}

Предоставляет возможность отобразить максимальное значение из указанного объекта:

strel11 В аргументах указывается объет или два объекта
strel11 Возвращает значения различного типа double, decimal, long, DateTime, TimeSpan, string, в зависимости от выбранной функции.

{Min(DataSource1.Column1)} - в этом случае, результатом будет минимальное значение из Column1 исчтоника DataSource1.
 
{MinDate(DataSource1.ColumnDate)} - в этом случае, результатом будет минимальное дата из ColumnDate источника DataSource1.
 
{MinTime(DataSource1.ColumnTime)}  - в этом случае, результатом будет минимальное время из ColumnTime источника DataSource1.

 

{MinStr(DataSource1.Column1)} - в этом случае, все значения будут отсортированы в алфавитном порядке. Результатом будет первое значение.

 

{Min(DataBand2, DataSource.Column2)} - в этом случае, результатом будет минимальное значение Column2 бэнда DataBand2.

{Mode()}

Предоставляет возможность отобразить значение, которое наиболее часто встречается в списке значений:

strel11 В аргументах указывается объет или два объекта
strel11 Возвращает значения различного типа double, decimal, long, в зависимости от выбранной функции.

{Mode(DataSource1.Column1)}. Допустим Сolumn1 содержит список значений: 2, 2, 6, 7, 7, 8, 7, 6, 5, 9, 4. В этом случае, результаоом будет число 7, т.к. оно повторяется в списке значений наиболее часто.

 
{Mode(DataBand2, DataSource.Column2)}  - в этом случае, результатом будет значение из Column2 бэнда DataBand2, которое наиболее часто встречается.

{Rank(,)}

Предоставляется возможность отобразить ранг значения. Обязателен префикс Totals:
strel11 В аргументах указывается:

img_1 Объеты для обработки и присвоения ранга (тип object)

img_2 Значение (true or false) для присвоения плотного или не плотного ранка

img_3 Направление сортировки значений.
strel11 Возвращает значения различного типа long

{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, true, StiRankOrder.Desс)} - в этом случае, будет плотный ранг поскольку установлено значение true. При просвоении ранга, значения будут отсортированы по убыванию, т.к. StiRankOrder установлено в Desc. Для сортировки по возрастанию (используется по умолчанию), следует установить в значение Asc (StiRankOrder.Asc).

 

Пример неплотного ранга - {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. Иначе говоря при присвоении ранга числу, учитывается ранг предыдущего значения и количество значений с этим рангом.

{Sum()}

Предоставляет возможность отобразить результат суммы значений:

strel11 В аргументах указывается:

img_1 Объеты для обработки и присвоения ранга (тип object)

img_2 Условие

img_3 Выражение суммирования
strel11 Возвращает значения различного типа long, decimal, double, TimeSpan

{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 к имени функции, через разделитель ".".