IAggregateFunction
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:
public interface IAggregateFunction
Example:
This example shows how to implement user-defined aggregate.
[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;
}
}
}
_ 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.
void Accumulate(object[] values)
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.
object GetValue()
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.
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.
void Merge(IAggregateFunction aggregateFunction)
Another instance of the same aggregate function that will be merged in the current instance.