Please ensure Javascript is enabled for purposes of website accessibility
Powered by Zoomin Software. For more details please contactZoomin

AF SDK Reference

AFSearch.AggregateAsync Method

  • Last UpdatedJan 12, 2026
  • 3 minute read
AFSearch.AggregateAsync Method
Performs all requested aggregates on the objects that match the search criteria asynchronously.

Namespace:  OSIsoft.AF.Search
Assembly:  OSIsoft.AFSDK (in OSIsoft.AFSDK.dll) Version: 3.2.0.7

Syntax

public Task<AFAggregateResultCollection> AggregateAsync(
	IEnumerable<AFAggregateRequest> aggregateRequests,
	CancellationToken cancellationToken
)
Public Function AggregateAsync ( 
	aggregateRequests As IEnumerable(Of AFAggregateRequest),
	cancellationToken As CancellationToken
) As Task(Of AFAggregateResultCollection)

Dim instance As AFSearch
Dim aggregateRequests As IEnumerable(Of AFAggregateRequest)
Dim cancellationToken As CancellationToken
Dim returnValue As Task(Of AFAggregateResultCollection)

returnValue = instance.AggregateAsync(aggregateRequests, 
	cancellationToken)
public:
Task<AFAggregateResultCollection^>^ AggregateAsync(
	IEnumerable<AFAggregateRequest^>^ aggregateRequests, 
	CancellationToken cancellationToken
)
member AggregateAsync : 
        aggregateRequests : IEnumerable<AFAggregateRequest> * 
        cancellationToken : CancellationToken -> Task<AFAggregateResultCollection> 

Parameters

aggregateRequests
Type: System.Collections.GenericIEnumerableAFAggregateRequest
All aggregates that should be performed on the search results.
cancellationToken
Type: System.ThreadingCancellationToken
A token to control cancellation of the aggregation request.

Return Value

Type: TaskAFAggregateResultCollection
An AFAggregateResultCollection containing the results of the requested aggregates or errors if the aggregates could not be performed.

Remarks

Note Notes to Callers
This call might use a background task to complete some of its work. See the Threading Overview for some matters to consider when execution transitions to another thread.

Examples

// Get the Database
PISystems myPISystems = new PISystems();
PISystem myPISystem = myPISystems.DefaultPISystem;
if (myPISystem == null)
    throw new InvalidOperationException("Default PISystem was not found.");
AFDatabase myDB = myPISystem.Databases[dbName];
if (myDB == null)
    throw new InvalidOperationException("Database was not found.");

// Create a search to find all the event frames created from the 'Event'
// template in the last year.
using (AFEventFrameSearch eventSearch = new AFEventFrameSearch(myDB, "EventFrameSearch", @"Template:'Event' Start:>'t-1y'"))
{
    eventSearch.CacheTimeout = TimeSpan.FromMinutes(10);
    // Get several aggregates in one call
    var averageAndCount = new AFSummaryRequest("Duration", AFSummaryTypes.Average | AFSummaryTypes.Count);
    var binByMonth = averageAndCount.BinBy("StartTime",
        new AFTimeSpan(months: 1).GetIntervalTimes(new AFTimeRange("1-1y", "1+1mo")));
    var groupByElement = averageAndCount.GroupBy("Element");
    var overallSummaries = new AFSummaryRequest("Duration", AFSummaryTypes.Minimum | AFSummaryTypes.Average | AFSummaryTypes.Maximum);

    var aggregateResults = await eventSearch.AggregateAsync(new AFAggregateRequest[] { binByMonth, groupByElement, overallSummaries }, CancellationToken.None);

    var overallSummaryResult = aggregateResults.GetResult(overallSummaries);
    Console.WriteLine("Minimum: {0}, Average: {1}, Maximum: {2}",
        overallSummaryResult.SummaryResults[AFSummaryTypes.Minimum],
        overallSummaryResult.SummaryResults[AFSummaryTypes.Average],
        overallSummaryResult.SummaryResults[AFSummaryTypes.Maximum]);

    var binByMonthResult = aggregateResults.GetResult(binByMonth);
    foreach (var bin in binByMonthResult.BinnedResults)
    {
        Console.WriteLine("Month: {0}, Average: {1}, Count: {2}",
            bin.Key, bin.Value[AFSummaryTypes.Average], bin.Value[AFSummaryTypes.Count]);
    }

    var groupByElementResult = aggregateResults.GetResult(groupByElement);
    foreach (var group in groupByElementResult.GroupedResults)
    {
        Console.WriteLine("Element: {0}, Average: {1}, Count: {2}",
            group.Key, group.Value[AFSummaryTypes.Average], group.Value[AFSummaryTypes.Count]);
    }
}

Version Information

AFSDK

Supported in: 3.1.1, 3.1.0, 3.0.2, 3.0.1, 3.0.0, 2.10.11, 2.10.5, 2.10.0, 2.10, 2.9.5, 2.9

See Also

In This Topic
Related Links
TitleResults for “How to create a CRG?”Also Available in