Nimbus KPI Calculations

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"
		)
	)
💡You can find other measures of this outcome group by using the "Fields" filter in Power BI:

🔎 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

CALCULATE ( [ Σ TotalSessions],

FILTER ( VALUES (ServiceSessionOutcomeGroups[OutcomeGroup]), ServiceSessionOutcomeGroups[OutcomeGroup] = "Handled By User" ) )

Σ HandledByUserSLA Count of tasks handled by users in SLA

CALCULATE (

[ Σ HandledByUser],

FILTER ( VALUES ( ServiceSessions[IsUnderSla] ), ServiceSessions[IsUnderSla] = TRUE() ) )

Σ HangupInQueue Count of queued tasks during which the customer hang up

CALCULATE (

[ Σ QueuedSessions],

FILTER (

VALUES ( ServiceSessionOutcomeGroups[OutcomeGroup]),

 ServiceSessionOutcomeGroups[OutcomeGroup] = "Hangup By Customer"

)

)

Σ 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.

CALCULATE (

[ Σ HangupInQueue],

FILTER ( VALUES ( ServiceSessions[IsUnderSla] ), ServiceSessions[IsUnderSla] = TRUE() )

)

ΣIvrTime Duration of Ivr time expressed in seconds SUM(ServiceSessions[TotalIvrTime])
Σ NotHandledSessions Count of not handled sessions (ServiceSessionOutcome.MeansHandled = 1)

CALCULATE (

[ΣTotalSessions],

FILTER (

VALUES ( ServiceSessionOutcomes[MeansHandled] ),

ServiceSessionOutcomes[MeansHandled] = FALSE()

)

)

Σ QueuedSessions Count of queued sessions (QueueTime >0)

CALCULATE (

[ΣTotalSessions],

FILTER (

VALUES ( ServiceSessions[TotalQueueTime] ),

ServiceSessions[TotalQueueTime] > 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"

CALCULATE (

[ Σ TotalUserSessions],

FILTER (VALUES ( UserSessionOutcomes[UserOutcome]),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.

VAR CurrentDate = TODAY()

RETURN

CALCULATE(

[ Σ TotalUserSessions],

DATESBETWEEN(UserSessionDates[Date], CurrentDate - 30, CurrentDate - 1)

) + 0

Σ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    
)

Table of Contents