Advertisement
WorkAkkaunt

Отчет по показателям опера Северсталь

Aug 5th, 2019
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 8.70 KB | None | 0 0
  1. DECLARE @DATE_START datetime = '20190801 00:00'
  2. DECLARE @DATE_END datetime = '20190802 23:59'
  3.  
  4. DECLARE @TIME_START DATETIME = '19000101 00:00'
  5. DECLARE @TIME_END DATETIME = '19000101 23:59'
  6.  
  7. DECLARE @TASKS TABLE (Id uniqueidentifier)
  8.  
  9. INSERT INTO @tasks
  10. SELECT id
  11. FROM [oktell].[dbo].[A_TaskManager_Tasks]
  12.  
  13. DECLARE @OPERATORS TABLE (Id uniqueidentifier)
  14.  
  15. INSERT INTO @operators
  16. SELECT Id
  17. FROM [oktell_settings].[dbo].[A_Users]
  18.  
  19. -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  20. --------ОТФИЛЬТРОВЫВАЕМ И СОЕДИНЯЕМ ТАБЛИЦЫ-----------------------------------------------------------
  21. DECLARE @OperStates TABLE
  22.     (
  23.         IdTask uniqueidentifier
  24.         , IdOperator uniqueidentifier
  25.         , TimeStart datetime
  26.         , [State] int
  27.         , ICode int
  28.         , LenTime int
  29.         , UserState int
  30.     );
  31.  
  32. WITH FilteredTable AS
  33. (
  34.     SELECT IdTask
  35.         , IdOperator
  36.         , DateTimeStart
  37.         , [State]
  38.         , ICode
  39.         , LenTime
  40.     FROM [oktell_cc_temp].[dbo].[A_Cube_CC_OperatorStates] WITH (NOLOCK)
  41.     WHERE DateTimeStart BETWEEN @DATE_START AND @DATE_END
  42.         AND TimeStart BETWEEN @TIME_START AND @TIME_END
  43.         AND IdOperator IN (SELECT * FROM @OPERATORS)
  44. )
  45.  
  46. INSERT INTO @OperStates
  47. SELECT IdTask
  48.     , IdOperator
  49.     , DateTimeStart
  50.     , OS.[State]
  51.     , OS.ICode
  52.     , CAST(LenTime as int)
  53.     , US.[State]
  54. FROM FilteredTable as OS
  55. LEFT JOIN [oktell].[dbo].[A_UserStateHistory] as US
  56.     ON US.UserId = OS.IdOperator AND OS.DateTimeStart = US.TimeChange
  57.  
  58. -------------------------------------------------------------------------------------------------
  59.  
  60. ---------СЧИТАЕМ ПРИНЯТЫЕ--------------------------------------------------------------
  61. DECLARE @Accepted TABLE(OperId uniqueidentifier, [Count] int, AvgLenTime int)
  62.  
  63. INSERT INTO @Accepted
  64. SELECT IdOperator, COUNT(DISTINCT IdChain), AVG(LenTime)
  65. FROM [oktell_cc_temp].[dbo].[A_Cube_CC_EffortConnections]
  66. WHERE DateTimeStart BETWEEN @DATE_START AND @DATE_END
  67.     AND TimeStart BETWEEN @TIME_START AND @TIME_END
  68.     AND BLineNum <> 'IVR' AND IsOutput = 0
  69.     AND IdTask IN (SELECT * FROM @TASKS)
  70.     AND IdOperator IN (SELECT * FROM @OPERATORS)
  71.     AND IsRecorded = 1
  72. GROUP BY IdOperator
  73. ----------------------------------------------------------------------------------------
  74.  
  75. ---------ФИЛЬТРУЕМ [oktell].[dbo].[A_Stat_Connections_1x1]------------------------------
  76. DECLARE @StatConnections TABLE
  77.     (
  78.         AUserId uniqueidentifier, BUserId uniqueidentifier
  79.         , TimeStart datetime, TimeStop datetime
  80.         , ConnectionType int, IdChain uniqueidentifier
  81.     )
  82.  
  83. INSERT INTO @StatConnections
  84. SELECT AUserId, BUserId, TimeStart, TimeStop, ConnectionType, IdChain
  85. FROM [oktell].[dbo].[A_Stat_Connections_1x1]
  86. WHERE TimeStart BETWEEN @DATE_START AND @DATE_END
  87.     AND CAST(TimeStart as time) BETWEEN CAST(@TIME_START as time) AND CAST(@TIME_END as time)                                      
  88. ---------------------------------------------------------------------------------------
  89.  
  90. ---------СЧИТАЕМ ВХОДЯЩИЕ--------------------------------------------------------------
  91. DECLARE @Incoming TABLE(OperId uniqueidentifier, [Count] int, [LenTime] int)
  92.  
  93. INSERT INTO @Incoming
  94. SELECT BUserId, COUNT(DISTINCT IdChain), SUM(DATEDIFF(SECOND, TimeStart, TimeStop))
  95. FROM @StatConnections
  96. WHERE ConnectionType = 5
  97.     AND BUserId IN (SELECT * FROM @OPERATORS)
  98. GROUP BY BUserId;
  99. -----------------------------------------------------------------------------------------
  100.  
  101. ---------СЧИТАЕМ ИСХОДЯЩИЕ--------------------------------------------------------------
  102. DECLARE @Outgoing TABLE(OperId uniqueidentifier, [LenTime] int)
  103.  
  104. INSERT INTO @Outgoing
  105. SELECT AUserId, SUM(DATEDIFF(SECOND, TimeStart, TimeStop))
  106. FROM @StatConnections
  107. WHERE ConnectionType = 1
  108.     AND AUserId IN (SELECT * FROM @OPERATORS)
  109. GROUP BY AUserId;
  110. -----------------------------------------------------------------------------------------
  111.  
  112. ------ПОДСЧИТЫВАЕМ ВСЕ ЗНАЧЕНИЯ----------------------------------------------------------
  113. WITH FinalTable AS
  114. (
  115.     SELECT IdOperator
  116.         , (SELECT TOP 1 TimeStart FROM @OperStates ORDER BY TimeStart) as TimeStart
  117.         , SUM(LenTime) as SumTotal
  118.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE [State] = 10                                           AND OS.IdOperator = IdOperator), 0) as Ready
  119.         , ISNULL((SELECT TOP 1 [LenTime] FROM @Incoming WHERE OperId = OS.IdOperator), 0) as IncomingCallsTime
  120.         , ISNULL((SELECT TOP 1 [LenTime] FROM @Outgoing WHERE OperId = OS.IdOperator), 0) as OutgoingCallsTime
  121.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE ICode = 101                                            AND OS.IdOperator = IdOperator), 0) as CallDirector
  122.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE ICode = 102                                            AND OS.IdOperator = IdOperator), 0) as Consult
  123.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE ICode = 103                                            AND OS.IdOperator = IdOperator), 0) as Training
  124.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE ICode = 104                                            AND OS.IdOperator = IdOperator), 0) as Lunch
  125.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE ICode = 105                                            AND OS.IdOperator = IdOperator), 0) as Break5Minutes
  126.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE ([State] = 9 AND UserState IS NULL OR UserState = 3)   AND OS.IdOperator = IdOperator), 0) as [Break]
  127.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE ICode = 106                                            AND OS.IdOperator = IdOperator), 0) as Solution
  128.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE ICode = 107                                            AND OS.IdOperator = IdOperator), 0) as Status1
  129.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE ICode = 108                                            AND OS.IdOperator = IdOperator), 0) as Status2
  130.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE ICode = 109                                            AND OS.IdOperator = IdOperator), 0) as Missing
  131.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE ICode = 110                                            AND OS.IdOperator = IdOperator), 0) as Post
  132.         , ISNULL((SELECT TOP 1 [Count] FROM @Incoming WHERE OperId = OS.IdOperator), 0) as AllIncomingCallsCount
  133.         , ISNULL((SELECT TOP 1 [Count] FROM @Accepted WHERE OperId = OS.IdOperator), 0) as AcceptedCount
  134.         , ISNULL((SELECT TOP 1 AvgLenTime FROM @Accepted WHERE OperId = OS.IdOperator), 0) as AcceptedAvg
  135.     FROM @OperStates AS OS
  136.     GROUP BY (IdOperator)
  137. )
  138.  
  139. ----------------------------------------------------------------------------------------------------------------------------------------------------------------
  140.  
  141. SELECT OI.[Name] as 'Оператор'
  142.     , FT.TimeStart as 'Время начала'
  143.     , (SELECT [dbo].[GetTimeFromSecond](FT.SumTotal)) as 'Всего в работе'
  144.     , (SELECT [dbo].[GetTimeFromSecond](FT.Ready)) as 'Готов'
  145.     , (SELECT [dbo].[GetPersent](FT.Ready, FT.SumTotal)) as 'Готов / Всего в работе'
  146.     , (SELECT [dbo].[GetTimeFromSecond](FT.IncomingCallsTime)) as 'Время входящих звонков'
  147.     , (SELECT [dbo].[GetPersent](FT.IncomingCallsTime, FT.SumTotal)) as 'Входящих звонков / Всего в работе'
  148.     , (SELECT [dbo].[GetTimeFromSecond](FT.OutgoingCallsTime)) as 'Время исходящих звонков'
  149.     , (SELECT [dbo].[GetPersent](FT.OutgoingCallsTime, FT.SumTotal)) as 'Исходящих звонков / Всего в работе'
  150.     , (SELECT [dbo].[GetTimeFromSecond](FT.CallDirector)) as 'Вызов к руководителю'
  151.     , (SELECT [dbo].[GetTimeFromSecond](FT.Consult)) as 'Консультация'
  152.     , (SELECT [dbo].[GetTimeFromSecond](FT.Training)) as 'Обучение'
  153.     , (SELECT [dbo].[GetTimeFromSecond](FT.Lunch)) as 'Обед'
  154.     , (SELECT [dbo].[GetTimeFromSecond](FT.Break5Minutes)) as 'Перерыв 5 минут'
  155.     , (SELECT [dbo].[GetTimeFromSecond](FT.[Break])) as 'Перерыв'
  156.     , (SELECT [dbo].[GetTimeFromSecond](FT.Solution)) as 'Решение обращения'
  157.     , (SELECT [dbo].[GetTimeFromSecond](FT.Status1)) as 'Статус1'
  158.     , (SELECT [dbo].[GetTimeFromSecond](FT.Status2)) as 'Статус2'
  159.     , (SELECT [dbo].[GetTimeFromSecond](FT.Missing)) as 'Отсутствует'
  160.     , (SELECT [dbo].[GetTimeFromSecond](FT.Post)) as 'Постобработка'
  161.     , FT.AllIncomingCallsCount as 'Количество всех звонков'
  162.     , FT.AcceptedCount as 'Принятые звонки'
  163.     , (SELECT [dbo].[GetPersent](FT.AcceptedCount, FT.AllIncomingCallsCount)) as 'Принятые / Все'
  164.     , (SELECT [dbo].[GetTimeFromSecond](FT.AcceptedAvg)) as 'Среднее время разговора'
  165. FROM FinalTable as FT
  166. LEFT JOIN [oktell_cc_temp].[dbo].[A_Cube_CC_Cat_OperatorInfo] as OI
  167.      ON FT.IdOperator = OI.Id
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement