AFSearch.Aggregate Method
- Last UpdatedNov 18, 2025
- 4 minute read
- PI System
- AF SDK 2024 R2
- Developer
Performs all requested aggregates on the objects that match the search criteria.
Namespace: OSIsoft.AF.Search
Assembly: OSIsoft.AFSDK (in OSIsoft.AFSDK.dll) Version: 3.1.1.1182
Syntax
public AFAggregateResultCollection Aggregate( IEnumerable<AFAggregateRequest> aggregateRequests )
Public Function Aggregate ( aggregateRequests As IEnumerable(Of AFAggregateRequest) ) As AFAggregateResultCollection Dim instance As AFSearch Dim aggregateRequests As IEnumerable(Of AFAggregateRequest) Dim returnValue As AFAggregateResultCollection returnValue = instance.Aggregate(aggregateRequests)
public: AFAggregateResultCollection^ Aggregate( IEnumerable<AFAggregateRequest^>^ aggregateRequests )
member Aggregate : aggregateRequests : IEnumerable<AFAggregateRequest> -> AFAggregateResultCollection
Parameters
- aggregateRequests
- Type: System.Collections.GenericIEnumerableAFAggregateRequest
All aggregates that should be performed on the search results.
Return Value
Type: AFAggregateResultCollectionAn AFAggregateResultCollection containing the results of the requested aggregates or errors if the aggregates could not be performed.
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 = eventSearch.Aggregate(new AFAggregateRequest[] { binByMonth, groupByElement, overallSummaries }); 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]); } }
' Get the Database Dim myPISystems As New PISystems() Dim myPISystem As PISystem = myPISystems.DefaultPISystem If myPISystem Is Nothing Then Throw New InvalidOperationException("Default PISystem was not found.") End If Dim myDB As AFDatabase = myPISystem.Databases(dbName) If myDB Is Nothing Then Throw New InvalidOperationException("Database was not found.") End If ' Create a search to find all the event frames created from the 'Event' ' template in the last year. Using eventSearch As New AFEventFrameSearch(myDB, "EventFrameSearch", "Template:'Event' Start:>'t-1y'") eventSearch.CacheTimeout = TimeSpan.FromMinutes(10) ' Get several aggregates in one call Dim averageAndCount As AFSummaryRequest = New AFSummaryRequest("Duration", AFSummaryTypes.Average Or AFSummaryTypes.Count) Dim binByMonth As AFBinningRequest(Of AFTime) = averageAndCount.BinBy("StartTime", New AFTimeSpan(months:=1).GetIntervalTimes(New AFTimeRange("1-1y", "1+1mo"))) Dim groupByElement As AFGroupingRequest(Of Object) = averageAndCount.GroupBy("Element") Dim overallSummaries As AFSummaryRequest = New AFSummaryRequest("Duration", AFSummaryTypes.Minimum Or AFSummaryTypes.Average Or AFSummaryTypes.Maximum) Dim aggregateResults As AFAggregateResultCollection = eventSearch.Aggregate(New AFAggregateRequest() {binByMonth, groupByElement, overallSummaries}) Dim overallSummaryResult As AFSummaryResult = aggregateResults.GetResult(overallSummaries) Console.WriteLine("Minimum: {0}, Average: {1}, Maximum: {2}", overallSummaryResult.SummaryResults(AFSummaryTypes.Minimum), overallSummaryResult.SummaryResults(AFSummaryTypes.Average), overallSummaryResult.SummaryResults(AFSummaryTypes.Maximum)) Dim binByMonthResult As AFBinnedResult(Of AFTime) = aggregateResults.GetResult(binByMonth) For Each bin As KeyValuePair(Of AFRange(Of AFTime), IReadOnlyDictionary(Of AFSummaryTypes, AFValue)) In binByMonthResult.BinnedResults Console.WriteLine("Month: {0}, Average: {1}, Count: {2}", bin.Key, bin.Value(AFSummaryTypes.Average), bin.Value(AFSummaryTypes.Count)) Next Dim groupByElementResult As AFGroupedResult(Of Object) = aggregateResults.GetResult(groupByElement) For Each group As KeyValuePair(Of Object, IReadOnlyDictionary(Of AFSummaryTypes, AFValue)) In groupByElementResult.GroupedResults Console.WriteLine("Element: {0}, Average: {1}, Count: {2}", group.Key, group.Value(AFSummaryTypes.Average), group.Value(AFSummaryTypes.Count)) Next End Using
No code example is currently available or this language may not be supported.
No code example is currently available or this language may not be supported.