New to Telerik Reporting? Start a free 30-day trial

Provides custom (user-defined) implementation for aggregate function.

Implement this interface to provide custom logic when aggregating values over a set of rows from the data source. Apply the AggregateFunctionAttribute class to the aggregate implementation in order to set the name and description of the aggregate function. If no AggregateFunctionAttribute is defined, the name of the aggregate function is the name of the actual type that implements the IAggregateFunction interface. The word "Aggregate" is trimmed from the type name if it ends with it.

Definition

Namespace:Telerik.Reporting.Expressions

Assembly:Telerik.Reporting.dll

Syntax:

C#
public interface IAggregateFunction

Example:

This example shows how to implement user-defined aggregate.

cs
[AggregateFunction(Description = "Concatenation aggregate. Output: (value1, value2, ...)", Name = "Concatenate")]
class ConcatenateAggregate : IAggregateFunction
{
    string result;

    public void Accumulate(object[] values)
    {
        // The aggregate function expects one parameter
        object value = values[0];

        // null values are not aggregated
        if (null == value)
        {
            return;
        }

        // The actual accumulation
        if (this.result.Length > 0)
        {
            result += ", ";
        }
        this.result += value.ToString();
    }

    public object GetValue()
    {
        return string.Format("({0})", this.result);
    }

    public void Init()
    {
        // Add aggregate function initialization code here if needed
        this.result = string.Empty;
    }

    public void Merge(IAggregateFunction aggregateFunction)
    {
        ConcatenateAggregate aggregate = (ConcatenateAggregate)aggregateFunction;

        if (aggregate.result.Length > 0)
        {
            if (this.result.Length > 0)
            {
                result += ", ";
            }
            this.result += aggregate.result;
        }
    }
}
vb
  _ Class ConcatenateAggregate Implements IAggregateFunction Private result As String
Public Sub Accumulate(ByVal values As Object()) Implements IAggregateFunction.Accumulate

    ' The aggregate function expects one parameter

    Dim value As Object = values(0)


    ' null values are not aggregated

    If value Is Nothing Then
        Return
    End If


    ' The actual accumulation

    If Me.result.Length > 0 Then
        result += ", "
    End If
    Me.result += value.ToString()
End Sub
Public Function GetValue() As Object Implements IAggregateFunction.GetValue
    Return String.Format("({0})", Me.result)
End Function
Public Sub Init() Implements IAggregateFunction.Init

    ' Add aggregate function initialization code here if needed

    Me.result = String.Empty
End Sub
Public Sub Merge(ByVal aggregateFunction As IAggregateFunction) Implements IAggregateFunction.Merge
    Dim aggregate As ConcatenateAggregate = DirectCast(aggregateFunction, ConcatenateAggregate)

    If aggregate.result.Length > 0 Then
        If Me.result.Length > 0 Then
            result += ", "
        End If
        Me.result += aggregate.result
    End If
End Sub End Class

Methods

Accumulates the passed values in the aggregate.

C#
void Accumulate(object[] values)
Parameters:valuesobject[]

The values that will be accumulated on a single accumulation operation. The length of the values array equals to the number of parameters that the defined aggregate expects (most common one).

Gets the value that the aggregate instance keeps currently accumulated.

C#
object GetValue()
Returns:

object

Returns the currently accumulated value.

Initializes the aggregate function instance. Implement to set the aggregate in its initial state ready to accumulate and merge values.

C#
void Init()

Merges another instance of the same aggregate function into the current instance. Implement this method to allow the reporting engine to merge the two resulting aggregates coming from two subsets of the aggregated data source rows.

C#
void Merge(IAggregateFunction aggregateFunction)
Parameters:aggregateFunctionIAggregateFunction

Another instance of the same aggregate function that will be merged in the current instance.