home *** CD-ROM | disk | FTP | other *** search
/ moodle.waes.ac.uk / moodle.waes.ac.uk.zip / moodle.waes.ac.uk / TMG / SP1-TMG-KB981324-AMD64-ENU.msp / PCW_CAB_SHFx2 / F2143_msfpcui.dll / BINARY / 25618 < prev    next >
Text File  |  2010-06-15  |  7KB  |  156 lines

  1. CREATE PROCEDURE [dbo].[ISA_spSoftBlockUsersRDL]
  2.     @FromDate datetime,
  3.     @ToDate datetime,
  4.     @ReportType varchar(10),
  5.     @TopUsersCount int,
  6.     @TopSitesCount int
  7. AS
  8. BEGIN
  9.     DECLARE @SummTableName varchar(100)
  10.     SET @SummTableName = dbo.fnGetSummaryTableName('tblSoftBlockSummary', @FromDate, @ToDate, @ReportType)
  11.     CREATE TABLE #TopUsersSummary
  12.     (
  13.         SequenceNum nvarchar(3),
  14.         UserName nvarchar(514),
  15.         UserNameHidden nvarchar(514),
  16.         Site varchar(2048),
  17.         UrlCategoryName nvarchar(255),
  18.         Requests bigint,
  19.         RequestRatio float
  20.     )
  21.     IF OBJECT_ID (@SummTableName, 'u') IS NOT NULL
  22.     BEGIN
  23.         -- build queries as a string and execute it, since there is no
  24.         -- other way to select from table, which name is in a variable
  25.         DECLARE @strQuery varchar(8000)
  26.         -- select top users, as requsted (will itereate over the result set)
  27.         CREATE TABLE #TopUsers
  28.         (
  29.             UserName nvarchar(514),
  30.             Requests bigint
  31.         )
  32.         SET @strQuery =
  33.         'SELECT TOP(' + CAST(@TopUsersCount AS varchar(10)) + ')
  34.             [UserName] AS [UserName],
  35.             SUM([Requests]) AS [Requests]
  36.         FROM ' + @SummTableName + '
  37.         WHERE
  38.             ([date] >= ' + QUOTENAME(CONVERT(varchar, @FromDate, 126),CHAR(39)) +
  39.             ' AND [date] <= ' + QUOTENAME(CONVERT(varchar, @ToDate, 126),CHAR(39)) + ' AND [UserName] <> '''')
  40.         GROUP BY [UserName]
  41.         ORDER BY [Requests] DESC
  42.         '
  43.         INSERT INTO #TopUsers
  44.         EXEC(@strQuery)
  45.         -- from this temporary tables the data will be propagated to the #TopUsersSummary
  46.         CREATE TABLE #SingleUserSummary
  47.         (
  48.             Site varchar(2048),
  49.             UrlCategoryName nvarchar(255),
  50.             Requests bigint
  51.         )
  52.         CREATE TABLE #SingleUserSummaryCut
  53.         (
  54.             Site varchar(2048),
  55.             UrlCategoryName nvarchar(255),
  56.             Requests bigint,
  57.             RequestRatio float
  58.         )
  59.         DECLARE @UserName nvarchar(514)
  60.         DECLARE UsersIterator CURSOR FOR SELECT [UserName] FROM #TopUsers
  61.         OPEN UsersIterator
  62.         FETCH NEXT FROM UsersIterator INTO @UserName
  63.         WHILE @@FETCH_STATUS = 0
  64.         BEGIN
  65.             PRINT 'Fetching data for user ' + @UserName
  66.             SET @strQuery =
  67.             'SELECT DISTINCT
  68.                 summary.[Site] AS [Site],
  69.                 urlMeta.[URLCategoryName] AS [URLCategoryName],
  70.                 SUM(summary.[Requests]) AS [Requests]
  71.             FROM ' + @SummTableName + ' AS summary INNER JOIN [tblUrlfMetadata] AS urlMeta ON summary.[URLCategoryId] = urlMeta.[URLCategoryId]
  72.             WHERE
  73.                 (summary.[date] >= ' + QUOTENAME(CONVERT(varchar, @FromDate, 126),CHAR(39)) +
  74.                 ' AND summary.[date] <= ' + QUOTENAME(CONVERT(varchar, @ToDate, 126),CHAR(39)) +
  75.                 ' AND summary.[UserName] = ''' + @UserName + ''')
  76.             GROUP BY [Site], [URLCategoryName]
  77.             ORDER BY [Requests] DESC
  78.             '
  79.             DELETE FROM #SingleUserSummary
  80.             INSERT INTO #SingleUserSummary
  81.             EXEC(@strQuery)
  82.             DECLARE @TotalRequests bigint
  83.             SET @TotalRequests = (SELECT SUM([Requests]) FROM #SingleUserSummary)
  84.             IF (@TotalRequests = 0)
  85.                 SET @TotalRequests = 1
  86.             DELETE FROM #SingleUserSummaryCut
  87.             INSERT INTO #SingleUserSummaryCut
  88.             SELECT TOP(@TopSitesCount)
  89.                 Site AS Site,
  90.                 URLCategoryName AS UrlCategoryName,
  91.                 Requests AS Requests,
  92.                 (CAST([Requests] AS decimal) / @TotalRequests) AS RequestRatio
  93.             FROM #SingleUserSummary
  94.             WHERE [Site] != N'{[23124]}'
  95.             DECLARE @UserNameProcessed nvarchar(514) = [dbo].[fnUserOrIpAddressToText](@UserName)
  96.             INSERT INTO #TopUsersSummary
  97.             SELECT
  98.                 ROW_NUMBER() OVER (ORDER BY [Requests] DESC) AS [SequenceNum],
  99.                 CASE -- UserName should appear for the first line only
  100.                     WHEN ROW_NUMBER() OVER (ORDER BY [Requests] DESC) = 1 THEN @UserNameProcessed
  101.                     ELSE N''
  102.                 END AS [UserName],
  103.                 @UserNameProcessed AS [UserNameHidden], -- this field is needed for grouping when rendering the chart
  104.                 [Site],
  105.                 [UrlCategoryName],
  106.                 [Requests],
  107.                 [RequestRatio]
  108.             FROM #SingleUserSummaryCut
  109.             -- build the all others data
  110.             DELETE FROM #SingleUserSummaryCut
  111.             INSERT INTO #SingleUserSummaryCut
  112.             SELECT
  113.                 N'{[23124]}' AS Site,
  114.                 N' ' AS UrlCategoryName,
  115.                 SUM([Requests]) AS Requests,
  116.                 (CAST(SUM([Requests]) AS decimal) / @TotalRequests) AS RequestRatio
  117.             FROM #SingleUserSummary notIdentifiedData
  118.             WHERE NOT EXISTS
  119.             (
  120.                 SELECT *
  121.                 FROM
  122.                 (
  123.                     SELECT TOP(@TopSitesCount) *
  124.                     FROM #SingleUserSummary
  125.                     WHERE [Site] != N'{[23124]}'
  126.                 ) identifiedData
  127.                 WHERE
  128.                 (
  129.                     (notIdentifiedData.Site = identifiedData.Site) AND
  130.                     (notIdentifiedData.URLCategoryName = identifiedData.URLCategoryName)
  131.                 )
  132.             )
  133.             -- insert only if there is actually some "All Others" data
  134.             INSERT INTO #TopUsersSummary
  135.             SELECT
  136.                 N'' AS SequenceNum,
  137.                 N'' AS UserName,
  138.                 @UserNameProcessed AS UserNameHidden,
  139.                 Site AS Site,
  140.                 UrlCategoryName AS UrlCategoryName,
  141.                 Requests AS Requests,
  142.                 RequestRatio AS RequestRatio
  143.             FROM #SingleUserSummaryCut
  144.             WHERE [Requests] > 0
  145.             -- insert the total template per user (will be actually evaluated dynamically)
  146.             INSERT INTO #TopUsersSummary VALUES (N'', N'', N'', N'{[23133]}', N'', 0, 1)
  147.             -- insert empty delimiter
  148.             INSERT INTO #TopUsersSummary VALUES (N'', N'', N'', N'', N'', NULL, NULL)
  149.             FETCH NEXT FROM UsersIterator INTO @UserName
  150.         END
  151.         CLOSE UsersIterator
  152.         DEALLOCATE UsersIterator
  153.     END
  154.     SELECT * FROM #TopUsersSummary
  155. END
  156.