Advertisement
WorkAkkaunt

Дашбоард по ГЕТТ

Jul 11th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.22 KB | None | 0 0
  1. /****** Script for SelectTopNRows command from SSMS  ******/
  2. SELECT *
  3. INTO #FilteredTable
  4. FROM [oktell].[dbo].[A_Stat_Connections_1x1]
  5. WHERE (ConnectionType = 5 OR ConnectionType = 1)
  6.     AND (Astr LIKE '%B2B%' OR Bstr LIKE '%B2B%')
  7.     AND (SUBSTRING(Astr, 0, 1) = 's' OR SUBSTRING(Bstr, 0, 1) = 's' OR Astr LIKE '%B2B_s%'OR Bstr LIKE '%B2B_s%')
  8.  
  9. DECLARE @Id_Users0 TABLE (Id uniqueidentifier, [Name] nvarchar(50))
  10. DECLARE @Id_Users TABLE (Id uniqueidentifier, [Name] nvarchar(50))
  11.  
  12. --ЗАДАЕМ СООТВЕТСТВИЕ МЕЖДУ ИМЕНАМИ И ID ОПЕРАТОРОВ
  13. INSERT INTO @Id_Users0
  14. SELECT BUserId,Bstr
  15. FROM #FilteredTable
  16. WHERE ConnectionType = 5
  17. UNION
  18. SELECT AUserId, Astr
  19. FROM #FilteredTable
  20. WHERE ConnectionType = 1
  21.  
  22. INSERT INTO @Id_Users SELECT * FROM @Id_Users0 GROUP BY Id, [Name]
  23.  
  24. DELETE @Id_Users0
  25. ----------------------------------------------------------------
  26.  
  27. --ФОРМИРУЕМ ВХОДЯЩИЕ ВЫЗОВЫ
  28. DECLARE @InboundCalls TABLE(IdChain uniqueidentifier, UserId uniqueidentifier)
  29.  
  30. INSERT INTO @InboundCalls
  31. SELECT IdChain, BUserId
  32.   FROM #FilteredTable
  33.   WHERE ConnectionType = 5
  34.  
  35. DECLARE @InboundMarks TABLE(IdChain uniqueidentifier, UserId uniqueidentifier, Mark int, Iterator int)
  36.  
  37. INSERT INTO @InboundMarks
  38. SELECT IC.IdChain, IC.UserId, TM.MARK, IIF(TM.MARK IS NOT NULL, 1, 0)
  39. FROM @InboundCalls AS IC
  40. LEFT JOIN [oktell].[dbo].[tbl_MARK] AS TM
  41. ON IC.IdChain = TM.IDHCAIN
  42.  
  43. DELETE @InboundCalls
  44.  
  45. DECLARE @InboundFinal TABLE(UserId uniqueidentifier, [Count] int, MiddleMark float, CountMarks int)
  46.  
  47. INSERT INTO @InboundFinal
  48. SELECT UserId
  49.     ,COUNT(UserId)
  50.     ,ROUND(ISNULL(SUM(Mark), 0) / SUM(Iterator), 2)
  51.     ,SUM(Iterator)
  52. FROM @InboundMarks
  53. GROUP BY UserId
  54.  
  55. DELETE @InboundMarks
  56. ------------------------------------------------------
  57.  
  58. --ФОРМИРУЕМ ИСХОДЯЩИЕ ВЫЗОВЫ
  59. DECLARE @OutgoingCalls TABLE(IdChain uniqueidentifier, UserId uniqueidentifier)
  60.  
  61. INSERT INTO @OutgoingCalls
  62. SELECT IdChain, AUserId
  63.   FROM #FilteredTable
  64.   WHERE ConnectionType = 1
  65.  
  66. DECLARE @OutgoingMarks TABLE(IdChain uniqueidentifier, UserId uniqueidentifier, Mark int, Iterator int)
  67.  
  68. DROP TABLE #FilteredTable
  69.  
  70. SELECT *
  71. INTO #OlpTemp
  72. FROM [oktell].[dbo].[Olp_dialog]
  73. WHERE result != -1 AND result IS NOT NULL
  74.  
  75. INSERT INTO @OutgoingMarks
  76. SELECT OC.IdChain, OC.UserId, OT.result, IIF(OT.result IS NOT NULL, 1, 0)
  77. FROM @OutgoingCalls AS OC
  78. INNER JOIN #OlpTemp AS OT
  79. ON OC.IdChain = OT.IdChain
  80.  
  81. DROP TABLE #OlpTemp
  82.  
  83. DELETE @OutgoingCalls
  84. --SELECT * FROM @OutgoingMarks
  85.  
  86. DECLARE @OutgoingFinal TABLE(UserId uniqueidentifier, [Count] int, MiddleMark float, CountMarks int)
  87.  
  88. INSERT INTO @OutgoingFinal
  89. SELECT UserId
  90.     ,COUNT(UserId)
  91.     ,ROUND(ISNULL(SUM(Mark), 0) / SUM(Iterator), 2)
  92.     ,SUM(Iterator)
  93. FROM @OutgoingMarks
  94. GROUP BY UserId
  95.  
  96. DELETE @OutgoingMarks
  97. ------------------------------------------------------------------------
  98.  
  99. DECLARE @FinalTable TABLE([Name] nvarchar(50), CountInbound int, CountOutgoing int, MiddleIn int, MiddleOut int, CountMarks int, PersentMarks nvarchar(20))
  100.  
  101. INSERT INTO @FinalTable
  102. SELECT IU.Name
  103.     , ISNULL(inf.[Count], 0)
  104.     , ISNULL(outf.[Count], 0)
  105.     , inf.MiddleMark
  106.     , outf.MiddleMark
  107.     , ISNULL(inf.CountMarks, 0) + ISNULL(outf.CountMarks, 0)
  108.     --, (SELECT [dbo].CalculatePersent(ISNULL(inf.CountMarks, 0) + ISNULL(outf.CountMarks, 0), ISNULL(inf.[Count], 0) + ISNULL(outf.[Count], 0)))
  109.     , CONCAT(IIF(ISNULL(inf.[Count], 0) + ISNULL(outf.[Count], 0) != 0, ROUND(CAST(ISNULL(inf.CountMarks, 0) + ISNULL(outf.CountMarks, 0) as float) / CAST(ISNULL(inf.[Count], 0) + ISNULL(outf.[Count], 0) as float), 4), 0) * 100, '%')
  110. FROM @InboundFinal as inf
  111. LEFT JOIN @Id_Users as IU
  112. ON inf.UserId = IU.Id
  113. LEFT JOIN @OutgoingFinal as outf
  114. ON inf.UserId = outf.UserId
  115.  
  116. DELETE @InboundFinal
  117. DELETE @OutgoingFinal
  118.  
  119. --INSERT @FinalTable VALUES
  120. --  (
  121.        
  122. --  )
  123. DECLARE @InboundCount int;
  124. DECLARE @OutgoingCount int;
  125. DECLARE @MiddleMarkIn int;
  126. DECLARE @MiddleMarkOut int;
  127. DECLARE @CountOfMarks int;
  128. DECLARE @Persent nvarchar(20);
  129. DECLARE @CountMarkIn int = (SELECT SUM(IIF(MiddleIn IS NOT NULL, 1, 0)) FROM @FinalTable)
  130. DECLARE @CountMarkOut int = (SELECT SUM(IIF(MiddleOut IS NOT NULL, 1, 0)) FROM @FinalTable)
  131.  
  132. SET @InboundCount = (SELECT SUM(CountInbound) FROM @FinalTable)
  133. SET @OutgoingCount = (SELECT SUM(CountOutgoing) FROM @FinalTable)
  134. SET @MiddleMarkIn = (SELECT SUM(MiddleIn) / @CountMarkIn FROM @FinalTable)
  135. SET @MiddleMarkOut = (SELECT SUM(MiddleOut) / @CountMarkOut FROM @FinalTable)
  136. SET @CountOfMarks = (SELECT SUM(CountMarks) FROM @FinalTable)
  137. --SET @Persent = (SELECT [dbo].CalculatePersent(ISNULL(@CountOfMarks, 0), ISNULL(@InboundCount, 0) + ISNULL(@OutgoingCount, 0)))
  138. SET @Persent = CONCAT(IIF(ISNULL(@InboundCount, 0) + ISNULL(@OutgoingCount, 0) != 0, ROUND(CAST(ISNULL(@CountOfMarks, 0) as float) / CAST(ISNULL(@InboundCount, 0) + ISNULL(@OutgoingCount, 0) as float), 4), 0) * 100, '%')
  139.  
  140. INSERT @FinalTable VALUES('Итого', @InboundCount, @OutgoingCount, @MiddleMarkIn, @MiddleMarkOut, @CountOfMarks, @Persent)
  141.  
  142. SELECT [Name] as 'Name'
  143.     ,CountInbound as 'Inbound Calls'
  144.     ,CountOutgoing  as 'Outgoing Calls'
  145.     ,MiddleIn as 'CSAT Inbound'
  146.     ,MiddleOut as 'CSAT Outgoing'
  147.     ,CountMarks as 'Total Rated'
  148.     ,PersentMarks as '% Rated Calls'
  149. FROM @FinalTable
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement