Data Aggregation

With our release launched on January, 18th 2024, we introduced Data Aggregations which are exposed via our OData interface and can be used in your Workforce Management (WFM) software system to calculate the usage of services and plan for future staffing.

The following aggregations have been added:

  • UserStatesAggregates
  • UserSessionsAggregates
  • ServiceSessionsAggregates

Aggregates in your historic data

☝️Please note: 

  • Data prior to the Nimbus Update in January was not aggregated retroactively.
  • The aggregation is done every 15 minutes
  • Both ServiceSession and UserSession both get Static Dimensions aggregations per timeslot (Modality=0) and additionally per modality (i.e. Audio=1, Instant Messaging=2, External Task=3, Email=4). This means that in extreme cases you have 5 records per service, per timeslot and can choose what you need.
 

In this scenario we expose the aggregated data via the OData Interface which can be loaded and transformed according to the requirements of your Workforce Management System:

How Nimbus interfaces with WFM (Workforce Management) systems

This article will heavily lean into Data tables described in the Nimbus Reporting Model page.

Furthermore, OData URLs are mentioned with a {{ODataAPI}} placeholder which you need to replace according to your data cluster:

INC Nimbus OData Connector URLs

Switzerland 01 https://api.ch-01.luware.cloud/v1/odata
Switzerland 02 https://api.ch-02.luware.cloud/v1/odata 
Germany 01 https://api.dewe-01.luware.cloud/v1/odata
Germany 02 https://api.dewe-02.luware.cloud/v1/odata
United Kingdom 01 https://api.ukso-01.luware.cloud/v1/odata
Nimbus Power BI data cluster OData connector URLs

✅ Make sure to configure your web proxies to allow access to these domains or whitelist the complete *.luware.cloud domain.


🔎 This page will showcase filtering examples. You can find a description how to filter OData on Odata.org

 

User States Aggregates

Returns a list of entries containing aggregated time values per state for a user within an interval of 15 minutes starting at a given date time.

Aggregated User States Example

On January 11th from 14:15 pm to 14:30 pm Agent Nicole Roberts worked with the Contact Center (SumWorkTime) the whole timespan of 15 minutes. She took a break for 4.3 minutes (SumPause) and was ready for taking calls for 10.7 minutes in total (SumReadyTime). She was also in a waiting state for the same amount of time (SumWait). We can conclude that she hasn't taken any call within that time span.

{
	"DateFrom": "2024-01-11",
	"TimeFrom": "14:15",
	"Id": "xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
	"Interval": 15,
	"UserId": "xxxxxxx-xxxx -xxxx-xxxx-xxxxxxxxxxxxxx",
	"UserUpn": "nroberts@yourtenant.com",
	"UserDisplayName": "Nicole Roberts",
	"UserOrganizationUnitId": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
	"TenantId": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
	"SumWorkTime": 15.0,
	"SumReadyTime": 10.7,
	"SumConnectedTime": 0.0,
	"SumAcwTime": 0.0,
	"SumPause": 4.3,
	"SumOffDuty": 0.0,
	"SumWait": 10.7
}

The User States Aggregates can be called via the following GET statement:

https://{{ODataAPI}}/v1/odata/UserStatesAggregates

The following parameters can for example be used to filter the data:

Parameter Description Example
DateFrom Select the Start Date 2024-01-15
TimeFrom Select the Start Time (UTC) 13:15
Interval Select the duration 15
UserId Select the Office 365 UserId xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx
UserUpn Select the Nimbus User UPN your.user@yourtenant.com

Example with filter:

https://{{ODataAPI}}/v1/odata/UserStatesAggregates?$filter=DateFrom gt 2024-01-28 AND DateFrom le 2024-01-29

🔎 You can find a description how to filter OData on Odata.org.

The User States Aggregates will return a list of entries containing the following data:

Field Description Formula
Id Generated ID of the Record  
DateFrom Date (UTC) of interval (start) in the format YYY-MM-dd  
TimeFrom Time (UTC) of the interval (start) in the format hh:mm  
Interval Interval duration in minutes  
UserId O365 User Id of the Nimbus User  
UserUpn UPN of the Nimbus User  
UserDisplayName Displayname of the Nimbus User  
UserOrganizationUnitId Organization Unit Id of the Nimbus User  
TenantId O365 Tenant Id of the Nimbus Tenant  
SumWorkTime Expected worktime of the user (not offline and not offDuty) in minutes SUM(UserStateTime WHERE UserStateType != 1 OR UserStateType != 2)
SumReadyTime Time user is either waiting for calls or handling tasks (selectable or ringing or connected or ACW) in minutes SUM(UserStateTime WHERE UserStateType = 3 OR UserStateType = 5 OR  UserStateType = 6 OR UserStateType = 7 OR UserStateType = 10)
SumConnectedTime Sum of time in which the user is handling a task in minutes SUM(UserStateTime WHERE UserStateType = 6)
SumAcwTime Sum of ACW/wrap up time in minutes SUM(UserStateTime WHERE UserStateType = 7)
SumPause Sum of time, the user is not working although it is in worktime (Not available / RONA) in minutes SUM(UserStateTime WHERE UserStateType = 4 OR UserStateType = 9)
SumOffDuty Sum of OffDuty time in minutes SUM(UserStateTime WHERE UserStateType = 2)
SumWait Sum of time in which the user has been selectable SUM(UserStateTime WHERE UserStateType = 3)

The UserStateType is defined as follows:

Id Name Description
1 Offline User is not signed in
2 OffDuty User has a OffDuty profile selected
3 Selectable The user is selectable for Nimbus
4 Not Selectable The user is not selectable for Nimbus
5 Ringing The call is signalled to the user
6 Connected The user is handling a task
7 After Call Work The user is in After Call Work (ACW) or wrap-up time
9 Rona The user has the state “RONA”
10 Dialing Out An outbound call is being established (Call on behalf/Outbound Call)

Please refer to the tables in Nimbus Reporting Model 

User Sessions Aggregates

Returns a list of entries containing aggregated time values for of all user service sessions within an interval of 15 minutes starting at a given date time.

Aggregated User Sessions Example

On January 11th from 14:15pm to 14:30 pm, Agent Nicole Robert worked with the Contact Center. During these 15 minutes, she accepted 9 calls (CntAccepted). She did not accept 7 calls (CntNotAccepted). She did not transfer (CntTransferred) or did not try to consult a colleague (CntConsulted). Her overall connection time has been 283 seconds (SumConnectedTime). The average connected time per call was 31,4 seconds (AvgConnectedTime). After Call Work time was not configured for Nicole Roberts.

{
	"DateFrom": "2024-01-11",
	"TimeFrom": "14:15",
	"Id": "xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
	"Interval": 15,
	"ServiceName": "Demo Service",
	"ServiceUpn": "demo.service@yourtenant.com",
	"ServiceId": "xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
	"TenantId": "xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
	"ServiceOrganizationUnitId": "xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
	"OrganizationUnitId": "xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
	"Modality": 1,
	"UserId": "xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
	"UserUpn": "nroberts@yourtenant.com", 
	"UserDisplayName": "Nicole Roberts",
	"UserOrganizationUnitId": "xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
	"CntAccepted": 9,
	"CntNotAccepted": 7,
	"CntTransferred": 0,
	"CntConsulted": 0,
	"AcceptanceRate": 0.562,
	"TransferredRate": 0.0,
	"ConsultedRate": 0.0,
	"SumConnectedTime": 283.0,
	"SumAcwTime": 0.0,
	"AvgConnectedTime": 31.4,
	"AvgAcwTime": 0.0
}          

The User Sessions Aggregation can be called via the following GET statement:

https://{{ODataAPI}}/v1/odata/UserSessionsAggregates

The following parameters can for example be used to filter the data:

Parameter Description Example
DateFrom Select the Start Date 2024-01-15
TimeFrom Select the Start Time (UTC) 13:15
Interval Select the duration 15
ServiceId Select the Nimbus Service Id xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx
ServiceUpn Selected Nimbus Service UPN your.service@yourtenant.com
UserId Select the Office 365 UserId xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx
UserUpn Select the Nimbus User UPN your.user@yourtenant.com
Modality Select the modality 1 (Audio), 0 (All modalities)

 Example with filter:

https://{{ODataAPI}}/v1/odata/UserSessionsAggregates?$filter=DateFrom gt 2024-01-20 AND DateFrom le 2024-01-29 AND UserUpn eq 'your.user@yourtenant.com' AND Modality eq 1

🔎 You can find a description how to filter OData on Odata.org.

The UserServicesAggregation returns a list with entries containing the following values:

Field Description Formula
Id Generated ID of the Record  
DateFrom Date (UTC) of interval (start) in the format YYY-MM-dd  
TimeFrom Time (UTC) of the interval (start) in the format hh:mm  
Interval Interval duration in minutes  
Service Name Displayname of the Nimbus Service  
Service UPN UPN of the Nimbus Service  
Service Id Internal ID of the Nimbus Service  
TenantId O365 Tenant Id of the Nimbus Tenant  
Service OrganizationUnitId Id of the Service Organization Unit  
OrganizationUnitId Id of the Parent Organization Unit of the Service  
Modality Id of the ModalityType; 0 = All Modalities combined  
User Id O365 User Id of the Nimbus  User  
User UPN UPN of the Nimbus User  
User Displayname Displayname of the Nimbus User  
User OrganizationUnitId Organization Unit Id of the Nimbus User  
CntAccepted

Count of all UserSessions which have been accepted by the user. The following user session outcomes apply:

  • Accepted
  • Outbound Accepted
  • Outbound Aborted
  • Outbound Destination Not Reached
  • Outbound Destination Declined
  • All consulted
  • All Transferred
Count(Accepted)
CntNotAccepted

Count of all UserSessions which have not been accepted by the user after being offered. This means the following user session outcome apply:

·  Declined

·  Ignored

·  Cancelled

·  Outbound Not Accepted (If the user accepted, but the customer/target didn’t count it as Accepted)

Count(NotAccepted)
CntTransferred

Count of UserSessions which have been accepted and then transferred by the user. This means the following user session outcomes apply:

·  Transferred Internally

·  Transferred Externally

Count(Transferred)
CntConsulted

Count of UserSessions which have been accepted and then needed consultation by the user. This means the following user session outcomes apply:

·  Consulted Transferred

·  Consulted Merged

Count(Consulted)
AcceptanceRate Rate of all accepted user session compared to all user sessions in % (1.0 = 100%) CntAccepted/TotalUserSessions
TransferredRate Rate of all transferred user session compared to all accepted user sessions in % (1.0 = 100%) CntTransferred/CntAccepted
ConsultedRate Rate of all consultated user session compared to all accepted user sessions in % (1.0 = 100%) CntConsulted/CntAccepted
ConnectedTime Sum of all connected times for all user sessions in the interval  in sec

SUM(ConnectedTime)

 

SumACWTime Sum of all acw times for all user sessions (incl. ExtendedACW if used) in the interval  in sec SUM(ACWTime)
AvgConnectedTime Average connected time for all user sessions in the interval being connected  in sec

SUM(ConnectedTime)/SUM(UserSessions WHERE ConnectedTime > 0)

 

AvgACWTime Average ACW / wrapup time for all user session (incl. ExtendedACW if used) in the interval in sec SUM(ACWTime)/SUM(UserSessions WHERE ACWTime > 0)

Service Sessions Aggregates

Returns a list of aggregated data entries about service SLA's Counts, Sums, Averages and Maximums for a given modality on all tasks within an interval of 15 minutes starting at a given date time.

Aggregated Service Session Example

This dataset returns metrics on all calls (Modality=1) that went through a service called Demo Service on January the 11th from 15:00 pm to 15:15 pm.

We see that calls were queued for 1782 seconds (SumQueueTime) and the sum of ACW time is 0 (SumAcwTime), maybe ACW is not enabled for this service. The longest call took 49 seconds to handle (MaxHandlingTime). 44 times an agent has been involved in call handling (CntUsersInvolved). 44 Sessions (CntSessionsQueued) have been queued. All accepted calls together have been queued for 889 seconds (SumQueueTimeAccepted).

{
	"DateFrom": "2024-01-11",
	"TimeFrom": "15:00",
	"Id": "70933980.01dcb441-8b28-4f8e-8a82-a62659c83d7f.1",
	"Interval": 15,
	"ServiceName": "Demo Service",
	"ServiceUpn": "demo.service@yourtenant.com",
	"ServiceId": "xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
	"TenantId": "xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
	"ServiceOrganizationUnitId": "xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
	"OrganizationUnitId": "xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",
	"Modality": 1,
	"AcceptanceSla": 1.0,
	"HangupSla": 1.0,
	"Reachability": 0.614,
	"AvgQueueTimeAccepted": 32.9,
	"AvgQueueTimeAbandoned": 26.5,
	"AvgQueueTime": 40.5,
	"AvgHandlingTime": 31.6,
	"AvgAcwTime": 0.0,
	"CntSessionsAbandoned": 2,
	"CntSessionHangupByCustomerBeforeSla": 2,
	"CntSessionHangupByCustomerShort": 0,
	"CntUsersInvolved": 44,
	"CntSessionsQueued": 44,
	"CntSessionsAccepted": 27,
	"CntSessionsAcceptedInSla": 27,
	"CntOverflowSessionsIn": 0,
	"CntOverflowSessionsOut": 0,
	"SumQueueTimeAccepted": 889.0,
	"SumQueueTimeAbandoned": 53.0,
	"SumQueueTime": 1782.0,
	"SumHandlingTime": 853.0,
	"SumAcwTime": 0.0,
	"MaxQueueTimeAccepted": 45.0,
	"MaxQueueTimeAbandoned": 36.0,
	"MaxHandlingTime": 49.0,
	"MaxAcwTime": 0.0
}

The Service Sessions Aggregates can be called via the following GET statement:

https://{{ODataAPI}}/v1/odata/ServiceSessionsAggregates

The following parameters can for example be used to filter the data:

Parameter Description Example
DateFrom Select the Start Date 2024-01-15
TimeFrom Select the Start Time (UTC) 13:15
Interval Select the duration 15
ServiceId Select the Nimbus Service Id xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx
ServiceUpn Selected Nimbus Service UPN your.service@yourtenant.com
UserId Select the Office 365 UserId xxxxxxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx
UserUpn Select the Nimbus User UPN your.user@yourtenant.com
Modality Select the modality  1 (Audio), 0 (All modalities)

Example with filters:

https://{{ODataAPI}}/v1/odata/ServiceSessionsAggregates?$filter=DateFrom gt 2024-01-20 AND DateFrom le 2024-01-29 AND ServiceUpn eq 'MyExample@nimbus-service.de' AND Modality eq 1

🔎 You can find a description how to filter OData on Odata.org.

The UserServicesAggregation returns a list with entries containing the following values:

Field Description Formula
Id Generated ID of the Record  
DateFrom Date (UTC) of interval (start) in the format YYY-MM-dd  
TimeFrom Time (UTC) of the interval (start) in the format hh:mm  
Interval Interval duration in minutes  
ServiceName Displayname of the Nimbus Service  
ServiceUpn UPN of the Nimbus Service  
ServiceId Internal ID of the Nimbus Service  
TenantId O365 Tenant Id of the Nimbus Tenant  
Service OrganizationUnitId Id of the Service Organization Unit  
OrganizationUnitId Id of the Parent Organization Unit of the Service  
Modality Id of the ModalityType; 0 = All Modalities combined  
AcceptanceSLA Service Level in %  (1.0 = 100%) for all Accepted (by user) Service Sessions in the interval CntSessionsAcceptedInSla/CntSessionsAccepted
HangupSLA Service Level in %  (1.0 = 100%) for all HangupByCustomerBeforeSla Services Sessions in the interval CntSessionsHangupByCustomerBeforeSla/CntSessionsHangupInQueue
Reachability Reachability in % (1.0 = 100%) CntSessionsAccepted/CntSessionsQueued
AvgQueueTimeAccepted Average QueueTime of Sessions having been accepted (see for definition of accepted under CntSessionsAccepted) in sec SumQueueTimeAccepted/CntSessionsAccepted
AvgQueueTimeAbandoned Average QueueTime of Sessions having been abandoned (see for definition of abandoned under CntSessionsAbandoned)  in sec SumQueueTimeAbandoned/CntSessionsAbandoned
AvgQueueTime Average QueueTime of Sessions  in sec SumQueueTime /CntSessionsQueued
AvgHandlingTime Average of HandlingTime (ConnectedTime of Session) of all sessions accepted by user  in sec SumHandlingTime/(CntSessionsConnectedTime > 0)
AvgAcwTime Average of ACWTime  in sec SumAcwTime/(CntSessionsACWTime > 0)
CntSessionsAbandoned

Abandoned Sessions are  sessions, 

where inbound call or IM outcome was:

·  WorkflowDisconnectedAfterQueue

·  CustomerHangupInQueue

·  CustomerHangupInIvrAfterQueue

·  Session was Queued AND WorkflowConversationRecorded

·  WorkflowInternalTransfer (Failed or Successful)

·  WorfklowExternalTransfer (Failed or Successful)

 

where outbound call (incl. CallOnBehalf) outcome was:

·  LostInQueue

 

where the external task outcome was:

·  ExternalSystemCancelledInQueue

·  ExternalSystemCancelledAfterQueue

·  WorkflowDisconnectAfterQueue

·  Session was Queued AND WorkflowInternalTransfer (Failed or Successful)

·  WorfklowExternalTransfer (Failed or Successful)

 

where the email session outcome was:

·  WorkflowDiscconectAfterQueue

·  Session was Queued AND

     WorkflowInternalTransfer (Failed or Successful)

·  WorfklowExternalTransfer (Failed or Successful)

see Description
CntSessionsHangupByCustomerBeforeSLA Sessions with outcome CustomerHangupInQueue within HangUpSla-Threshold COUNT(SessionOutcome = CustomerHangupInQueue AND QueueTime < SLA Hangup Time Threshold)
CntSessionsHangupByCustomerShort Sessions with outcome CustomerHangupInQueue within ShortAbandonds -Threshold COUNT(SessionOutcome = CustomerHangupInQueue AND QueueTime < IsShortAbandonThreshold)
CntUsersInvolved Count of all user sessions related to the service session in the interval COUNT(UserSessions)
CntSessionsQueued Every Session where the QueueTime is > 0 COUNT(QueueTime > 0)
CntSessionsAccepted

Accepted Session are sessions, where inbound call or IM outcome was:

·  UserAccepted

·  UserInternalTransfer (Failed or Successful)

·  UserExternalTransfer (Failed or Successful)

·  UserConferenced

Where outbound call (incl Call on Behalf) was:

·  UserAccepted

·  UserInternalTransfer (Failed or Successful)   

 

·  (Future) UserExternalTransfer (Failed or Successful)

·  (Future)   
UserConferenced 

·  (Future)   
DestinationAccepted   
DestinationDeclined   
DestiontionNotReache

Where External Task outcome was:

·  UserAccepted

·  UserInternalTransfer (Failed or Successful)

·  (Future)   
UserExternalTransfer (Failed or Successful)

·  (Future)

Where Email outcome was:

·  UserAccepted

·  UserMarkedAsHandled

·  UserInternalTransfer (Failed or Successful)

·  (Future)   
UserExternalTransfer (Failed or Successful)

 
CntSessionsAcceptedInSla Accepted Sessions which where accepted within the define SLA Acceptance Time

COUNT(SessionsAccepted AND QueueTime < SLA Acceptance Time)

 

CntOverflowSessionsIn Count of Sessions which came in as transfer on the service in question

COUNT(SessionsTransferredIn)

 

CntOverflowSessionsOut Count of Sessions which  have been transferred either by WF or by User, Target doesn't matter

COUNT(SessionTransferred)

 

SumQueueTimeAccepted Sum of QueueTime of all sessions in the interval which where considered accepted (see CntSessionAccepted for exact definition)  in sec

SUM(QueueTimeAccepted)

 

SumQueueTimeAbandoned Sum of QueueTime of all sessions in the interval which where considered abandoned (see CntSessionAbandoned for exact definition)  in sec

SUM(QueueTimeAbandoned)

 

SumQueueTime Sum of QueueTime of all sessions in the interval independent of outcome  in sec

SUM(QueueTime)

 

SumHandlingTime Sum of all HandlingTime (ConnectedTime of Session) of all sessions accepted by user  in sec

SUM(ConnectedTime > 0)

 

SumAcwTime Sum of all ACW Times of all sessions within the interval which had ACW in sec

SUM(AcwTime)

 

MaxQueueTimeAccepted Longest QueueTime of any session within the interval which was accepted by a User  in sec

MAX(QueueTimeAccepted)

 

MaxQueueTimeAbandoned Longest QueueTime of any session within the interval which was not accepted by a User  in sec

MAX(QueueTimeAbandoned)

 

MaxHandlingTime Longest HandlingTime of any session within the interval which was accepted by a User  in sec

MAX(HandlingTime)

 

MaxAcwTime Longest ACWTime of any session within the interval which was accepted by a User  in sec

MAX(AcwTime)

 

Table of Contents