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

{Rank()}

Предоставляет возможность определить ранг значения в наборе данных.

strel11 В аргументах указывается:
img_1 Объекты для обработки и назначения ранга (тип object);

img_2 Значение (true или 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.Desc)} - в этом случае будет использовано плотное ранжирование, так как указано значение true. При назначении ранга значения будут отсортированы по убыванию, так как задан параметр StiRankOrder.Desc. Для сортировки по возрастанию (используется по умолчанию) необходимо указать 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, 64, 68, 71. В этом случае ранги будут следующими:

9 - ранг 1, 9 - ранг 1, 31 - ранг 3, 44 - ранг 4, 44 - ранг 4, 44 - ранг 4, 64 - ранг 7, 68 - ранг 8, 71 - ранг 9.

 

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

{StDev()}

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

strel11 В аргументах указывается источник данных и выражение

strel11 Возвращает значение типа double

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

 

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

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