Nimbus gathers KPI (Key Performance Indicators) based on Service Sessions and User Sessions. Their calculation is explained on this page.
- Service Session KPI are relevant for managers to determine which services are (in)efficient.
- User Session KPI are interesting for supervisors and service owners to determine how well their team performs.
- Transfer Session KPI are are relevant for branch managers and admins. They measure the amount and time taken for handovers between services.
🔎 Related Pages: The difference between different Sessions is explained on Nimbus Reporting. For a technical explanation on specific Odata fields related to each session, refer to the Nimbus Reporting Model.
Overview
This chapter describes DAX* measures available in the Nimbus Power BI model, as used in our Power BI Template.
Some of the KPI measures described below contain name parts put in brackets. They are added help to locate all measures which sum up to a full set (total) or are build using similar filtering criteria.
🤔How to read this page and the table below?
Here is an example with the "Handled by User" Outcome group:
- (OG) = Outcome Group, or (Outcome) for short
- There are 4 measures. Each of them are calculated as subset of TotalSessions ended with a certain outcome group.
ΣHandledByUser(OG) =
CALCULATE (
[ΣTotalSessions],
FILTER (
VALUES ( ServiceSessionOutcomeGroups[OutcomeGroup] ),
ServiceSessionOutcomeGroups[OutcomeGroup] = "Handled By User"
)
)
🔎 Also see: https://docs.microsoft.com/en-us/dax/
Service Session KPI
Service KPI are used by call center managers to view and analyze general service performance, help to adjust service settings and traits.
Typical Service KPI questions answered are:
- How many tasks accepted by my Service?
- How many tasks were Handled?
- How many tasks were hang-up in queue?
- What is quality of service? Do I keep SLA?
- How many tasks are handled by first accepted agent?
- Average time customers spend in queue?
- Average time needed to handle customer calls?
- Compare Services between each other.
- Compare Service performance between multiple time periods.
- What are possible issues diminishing service performance?
KPI | Description | DAX |
---|---|---|
%AcceptanceSLA | Percentage of tasks handled by users in SLA against all tasks handled by users | DIVIDE([ Σ HandledByUserSLA],[ Σ HandledByUser]) * 100 |
%Handled Rate | Percentage of handled tasks to total tasks | IF(ISBLANK([ΣHandledSessions]) && [ΣTotalSessions]>0, 0, DIVIDE([ΣHandledSessions],[ΣTotalSessions])*100) |
%HangupSLA | Percentage of tasks customer hung up in SLA against all hang up tasks | DIVIDE([ Σ HangupInQueueSLA],[ Σ HangupInQueue]) * 100 |
%Reachability |
Percentage of tasks handled by users over all queued tasks
|
DIVIDE([ Σ HandledByUser],[ Σ QueuedSessions])*100 |
ØAverageAcwExtendedTime_HHMMSS | Average after call extended work time (measure: ØAverageAcwExtendedTimeS) formatted as HH:MM:SS |
IF (NOT ISBLANK ([ØAverageAcwExtendedTimeS]), //show blank instead of empty string IF(INT([ØAverageAcwExtendedTimeS])>=86400, FORMAT (QUOTIENT(INT([ØAverageAcwExtendedTimeS]),86400), "00" ) & "d ") //[DAYS] & FORMAT(QUOTIENT(MOD(INT([ØAverageAcwExtendedTimeS]), 86400),3600), "00" ) & ":" //HOURS & FORMAT(QUOTIENT(MOD(INT([ØAverageAcwExtendedTimeS]), 3600),60), "00") & ":" //MINUTES & FORMAT(MOD(INT([ØAverageAcwExtendedTimeS]), 60), "00") //SECONDS )
|
ØAverageAcwExtendedTimeS | Average After-Call Work (ACW) extended work time | INT(CALCULATE(AVERAGE(ServiceSessions[AcwExtendedTime]), ServiceSessions[AcwExtendedTime]>0)) |
ØIvrTimeS | Average Ivr time in seconds | INT(CALCULATE(AVERAGE(ServiceSessions[TotalIvrTime]), ServiceSessions[TotalIvrTime]>0)) |
ØQueueTimeS | Average Queue time in seconds | INT(CALCULATE(AVERAGE(ServiceSessions[TotalQueueTime]), ServiceSessions[TotalQueueTime]>0)) |
ØTotalConnectedTimeS | Average connected time per session | INT(CALCULATE(AVERAGE(ServiceSessions[TotalConnectedTime]), ServiceSessions[TotalConnectedTime]>0)) |
ØHoldTimeS | Average hold time | INT(CALCULATE(AVERAGE(ServiceSessions[HoldTime]), ServiceSessions[HoldTime]>0)) |
Σ HandledByUser | Count of tasks handled by users |
|
Σ HandledByUserSLA | Count of tasks handled by users in SLA |
|
Σ HangupInQueue | Count of queued tasks during which the customer hang up |
|
Σ HangupInQueueSLA | Count of queued tasks hang up by the customer within the SLA that was set for the Service at the time the session occurred. |
|
ΣIvrTime | Duration of Ivr time expressed in seconds | SUM(ServiceSessions[TotalIvrTime]) |
Σ NotHandledSessions | Count of not handled sessions (ServiceSessionOutcome.MeansHandled = 1) |
|
Σ QueuedSessions | Count of queued sessions (QueueTime >0) |
|
ΣQueueTime | Count Of Queue time | SUM(ServiceSessions[TotalQueueTime]) |
ΣHoldTimeS | Count of hold time | SUM(ServiceSessions[HoldTime]) |
ΣTotalAcwExtendedTime | Total duration of After-Call Work (ACW) extended time expressed in seconds | SUM(ServiceSessions[AcwExtendedTime]) |
ΣTotalAcwExtendedTime_HHMMSS | Total duration of After-Call Work (ACW) time formatted as HH:MM:SS |
IF (NOT ISBLANK ([ΣTotalAcwExtendedTime]), //show blank instead of empty string IF(INT([ΣTotalAcwExtendedTime])>=86400, FORMAT (QUOTIENT(INT([ΣTotalAcwExtendedTime]),86400), "00" ) & "d ") //[DAYS] & FORMAT(QUOTIENT(MOD(INT([ΣTotalAcwExtendedTime]), 86400),3600), "00" ) & ":" //HOURS & FORMAT(QUOTIENT(MOD(INT([ΣTotalAcwExtendedTime]), 3600),60), "00") & ":" //MINUTES & FORMAT(MOD(INT([ΣTotalAcwExtendedTime]), 60), "00") //SECONDS )
|
ΣTotalConnectedTime | Duration of connected time expressed in seconds | SUM(ServiceSessions[TotalConnectedTime]) |
ΣTotalSessions | Count of tasks | COUNT(ServiceSessions[Id]) |
ΣHandledBySystem(OG) | Count of sessions with an outcome group as "Handled By System" |
CALCULATE ( [ΣTotalSessions] , FILTER ( VALUES ( ServiceSessionOutcomes [OutcomeGroup] ), ServiceSessionOutcomes [OutcomeGroup] = "Handled By System" ) )
|
ΣHangupByCustomer(OG | Count of sessions with an outcome group as "Hangup By Customer " |
CALCULATE ( [ΣTotalSessions], FILTER ( VALUES ( ServiceSessionOutcomes[OutcomeGroup]), ServiceSessionOutcomes[OutcomeGroup] = "Hangup By Customer" ) )
|
ΣNotHandled(OG) | Count of sessions with an outcome group as "Not Handled" |
CALCULATE ( [ΣTotalSessions] , FILTER ( VALUES ( ServiceSessionOutcomes [OutcomeGroup] ), ServiceSessionOutcomes [OutcomeGroup] = "Not Handled" ) )
|
ΣCustomerHangupBeforeAccept(Outcome) | Count of sessions with an outcome as "Customer Hangup Before Accept" |
CALCULATE ( [ΣTotalSessions] , FILTER ( VALUES ( ServiceSessionOutcomes [Outcome] ), ServiceSessionOutcomes [Outcome] = "Customer Hangup Before Accept" ) )
|
ΣCustomerHangupInIvr(Outcome) | Count of sessions with an outcome as "Customer Hangup In Ivr" |
CALCULATE ( [ΣTotalSessions] , FILTER ( VALUES ( ServiceSessionOutcomes [Outcome] ), ServiceSessionOutcomes [Outcome] = "Customer Hangup In Ivr" ) )
|
ΣCustomerHangupInQueue(Outcome) | Count of sessions with an outcome as "Customer Hangup In Queue", “Customer Hangup In Ivr After Queue” |
CALCULATE ( [ΣTotalSessions] , FILTER ( VALUES ( ServiceSessionOutcomes [Outcome] ), ServiceSessionOutcomes [Outcome] IN { "Customer Hangup In Queue" , "Customer Hangup In Ivr After Queue" } ) )
|
ΣFirstCallResolution(Outcome) |
Count of sessions with an outcome as "User Accepted" |
CALCULATE ( [ΣTotalSessions] , FILTER ( VALUES ( ServiceSessionOutcomes [Outcome] ), ServiceSessionOutcomes [Outcome] = "User Accepted" ) )
|
ΣVoicemail(Outcome) | Count of sessions with an outcome as "Workflow Conversation Recorded" |
CALCULATE ( [ΣTotalSessions] , FILTER ( VALUES ( ServiceSessionOutcomes [Outcome] ), ServiceSessionOutcomes [Outcome] = "Workflow Conversation Recorded" ) )
|
ΣWorkflowExternalTransfer(Outcome) | Count of sessions with an outcome as "Workflow External Transfer Successful" |
CALCULATE ( [ΣTotalSessions] , FILTER ( VALUES ( ServiceSessionOutcomes [Outcome] ), ServiceSessionOutcomes [Outcome] = "Workflow External Transfer Successful" ) )
|
ΣWorkflowInternalTransfer(Outcome) |
Count of sessions with an outcome as "Workflow Internal Transfer Successful"
|
CALCULATE ( [ΣTotalSessions], FILTER ( VALUES ( ServiceSessionOutcomes[Outcome] ), ServiceSessionOutcomes[Outcome] = "Workflow Internal Transfer Successful" ) )
|
ΣTotalDialOutTime |
Sum of the DialoutTime (for the definition of DialoutTime see ServiceSessions) |
SUM ( ServiceSessions [DialOutTime] ) |
ΣDestinationAccepted | Count of tasks with an outcome as “Destination Accepted” (only applicable to outgoing tasks) |
CALCULATE ( [ΣTotalSessions], FILTER ( VALUES (ServiceSessionOutcomes[Outcome]), ServiceSessionOutcomes[Outcome] = "Destination Accepted" ) )
|
%DestinationAccpeted | Percentage of outbound tasks accepted, intended as the count of tasks with an outcome as “Destination Accepted” over all the tasks irrespective of outcome. | DIVIDE ([ΣDestinationAccepted],[ΣTotalSessions]) * 100 |
ΣDestinationDeclined | Count of outgoing sessions with "Destination Declined" outcome |
CALCULATE ( [ΣTotalSessions] , FILTER ( VALUES ( ServiceSessionOutcomes [Outcome] ), ServiceSessionOutcomes [Outcome] = "Destination Declined" ) )
|
ΣUserAborted | Count of outgoing sessions with "User Aborted" outcome |
CALCULATE ( [ΣTotalSessions] , FILTER ( VALUES ( ServiceSessionOutcomes [Outcome] ), ServiceSessionOutcomes [Outcome] = "User Aborted" ) )
|
ΣDestinationNotReached | Count of outgoing sessions with "Destination Not Reached" outcome |
CALCULATE ( [ΣTotalSessions], FILTER ( VALUES (ServiceSessionOutcomes[Outcome]), ServiceSessionOutcomes[Outcome] = "Destination Not Reached" ) )
|
ΣTotalOutboundSessions | Count of outgoing sessions |
CALCULATE ( [ΣTotalSessions] , FILTER ( VALUES ( TaskDirections [Name] ), TaskDirections [Name] = "Outbound" ) )
|
ΣTotalInboundSessions | Count of incoming sessions |
CALCULATE ( [ΣTotalSessions], FILTER ( VALUES (TaskDirections[Name]), TaskDirections[Name] = "Inbound" ) )
|
ΣTotalExternalSessions | Count of External sessions |
CALCULATE ( [ΣTotalSessions], FILTER ( VALUES (TaskDirections[Name]), TaskDirections[Name] = "External" ) )
|
TotalTime | Sum of the various Time KPIs for of a task expressed in seconds |
ServiceSessions [TotalConnectedTime] + ServiceSessions [TotalIvrTime] + ServiceSessions [TotalQueueTime] + ServiceSessions [HoldTime] + ServiceSessions [AcwTime] + ServiceSessions [DialoutTime]
|
User Session KPI
User KPI are used by call center supervisors to view and analyze User performance.
Typical questions answered are:
- How many tasks were user-handled?
- How many tasks were not handled (missed or decline)?
- What is our acceptance rate (compared to total tasks)?
- What is our transfer rate (to other services or specialist)?
- What are our usual times for user distribution? → Time for Ring/Connected/ACW/Consultation.
KPI | Description | DAX |
---|---|---|
%Acceptance Rate | Ratio of accepted user sessions, to the total number of user sessions for this Nimbus user, for the selected period | DIVIDE([ Σ AcceptedUserSessions],[ Σ TotalUserSessions])*100 |
%Consulted Rate | Ratio of user sessions with consultations, to the total number of user sessions, for this Nimbus user, for the selected period | DIVIDE([ΣConsultedUserSessions],[ΣAcceptedUserSessions])*100 |
%Transfer Rate | Ratio of user sessions ended by transfer, to the total number of user sessions for this Nimbus user, for the selected period | DIVIDE([ΣTransferredUserSessions],[ΣAcceptedUserSessions])*100 |
ØAcwExtendedTime_HHMMSS | Average After-Call Work (ACW) extended work time formatted as HH:MM:SS |
IF (NOT ISBLANK ([ØAcwExtendedTimeS]), //show blank instead of empty string IF(INT([ØAcwExtendedTimeS])>=86400, FORMAT (QUOTIENT(INT([ØAcwExtendedTimeS]),86400), "00" ) & "d ") //[DAYS] & FORMAT(QUOTIENT(MOD(INT([ØAcwExtendedTimeS]), 86400),3600), "00" ) & ":" //HOURS & FORMAT(QUOTIENT(MOD(INT([ØAcwExtendedTimeS]), 3600),60), "00") & ":" //MINUTES & FORMAT(MOD(INT([ØAcwExtendedTimeS]), 60), "00") //SECONDS )
|
ØAcwExtendedTimeS | Average After-Call Work (ACW) extended work time | INT(CALCULATE(AVERAGE(UserSessions[AcwExtendedTime]), UserSessions[AcwExtendedTime]>0)) |
ØConnectedTimeS | Average connected time | INT(CALCULATE(AVERAGE(UserSessions[ConnectedTime]), UserSessions[ConnectedTime]>0)) |
ØRingTimeS | Average ring time | INT(CALCULATE(AVERAGE(UserSessions[RingTime]), UserSessions[RingTime]>0)) |
ØConferencedTimeS | Average conference time | INT(CALCULATE(AVERAGE(UserSessions[ConferencedTime]), UserSessions[ConferencedTime]>0)) |
ØConsultationTimeS | Average consultation time | INT(CALCULATE(AVERAGE(UserSessions[ConsultationTime]), UserSessions[ConsultationTime]>0)) |
ØAcwTimeS | Average After-Call Work (ACW) time | INT(CALCULATE(AVERAGE(UserSessions[AcwTime]), UserSessions[AcwTime]>0)) |
ΣAcwExtendedTime | Total duration of After-Call Work (ACW) extended work time expressed in seconds | SUM(UserSessions[AcwExtendedTime]) |
ΣAcwExtendedTime_HHMMSS | Total duration of After-Call Work (ACW) extended work time formatted as HH:MM:SS |
IF (NOT ISBLANK ([ΣAcwExtendedTime]), //show blank instead of empty string IF(INT([ΣAcwExtendedTime])>=86400, FORMAT (QUOTIENT(INT([ΣAcwExtendedTime]),86400), "00" ) & "d ") //[DAYS] & FORMAT(QUOTIENT(MOD(INT([ΣAcwExtendedTime]), 86400),3600), "00" ) & ":" //HOURS & FORMAT(QUOTIENT(MOD(INT([ΣAcwExtendedTime]), 3600),60), "00") & ":" //MINUTES & FORMAT(MOD(INT([ΣAcwExtendedTime]), 60), "00") //SECONDS )
|
ΣAcceptedUserSessions | Count of accepted user session. UserSessionOutcomes[UserOutcome] = "Accepted"
|
|
ΣTransferredUserSessions | Count of user sessions ended by transfer |
CALCULATE ( [ΣTotalUserSessions], FILTER ( VALUES ( UserSessionOutcomes[ActionGroup]), UserSessionOutcomes[ActionGroup] = "Transferred"))
|
ΣConsultedUserSessions | Count of user sessions that contain at least one consultation. |
CALCULATE ( [ΣTotalUserSessions], FILTER ( VALUES ( UserSessions[ConsultationCount]), UserSessions[ConsultationCount]>0))
|
ΣTotalUserSessions | Count of all user sessions in the selected dataset | COUNT(UserSessions[Id]) |
ΣUserSessions30d |
Count of user sessions for the last 30 days in relation to today's date. Note that if the report itself does not contain the last 30 days of data this KPI will yield a null value. |
|
ΣUserSessionsToday | Count of user sessions in the current day based on today's date. Note that this is dependent on the report actually containing the latest data as of now. |
VAR CurrentDate = TODAY() RETURN CALCULATE( [ΣTotalUserSessions], UserSessionDates[Date]=CurrentDate ) + 0
|
Transfer Session KPI
Transfer KPI are used by call center supervisors to view and analyze transferred sessions performance.
KPI | Description | DAX |
---|---|---|
TotalTransfers | Count of transfers | COUNT(TransferSessions[Id]) |
ΣDurationSeconds(TR) | Duration of transfer in seconds | SUM(TransferSessions[DurationSeconds]) |
ΣDurationTime(TR)_HHMMSS | Transfer duration formatted as HH:MM:SS |
IF (NOT ISBLANK ([ΣDurationSeconds(TR)]), //show blank instead of empty string IF(INT([ΣDurationSeconds(TR)])>=86400, FORMAT (QUOTIENT(INT([ΣDurationSeconds(TR)]),86400), "00" ) & "d ") //[DAYS] & FORMAT(QUOTIENT(MOD(INT([ΣDurationSeconds(TR)]), 86400),3600), "00" ) & ":" //HOURS & FORMAT(QUOTIENT(MOD(INT([ΣDurationSeconds(TR)]), 3600),60), "00") & ":" //MINUTES & FORMAT(MOD(INT([ΣDurationSeconds(TR)]), 60), "00") //SECONDS )
|