Click or drag to resize
OSIsoft, LLC

AFSearchAggregate Method

Performs all requested aggregates on the objects that match the search criteria.

Namespace:  OSIsoft.AF.Search
Assembly:  OSIsoft.AFSDK (in OSIsoft.AFSDK.dll) Version:
public AFAggregateResultCollection Aggregate(
	IEnumerable<AFAggregateRequest> aggregateRequests


Type: System.Collections.GenericIEnumerableAFAggregateRequest
All aggregates that should be performed on the search results.

Return Value

Type: AFAggregateResultCollection
An AFAggregateResultCollection containing the results of the requested aggregates or errors if the aggregates could not be performed.
// 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 = eventSearch.Aggregate(new AFAggregateRequest[] { binByMonth, groupByElement, overallSummaries });

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

    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


Supported in: 2.10.5, 2.10, 2.9.5, 2.9
See Also
Enabling Operational Intelligence