Подтвердить что ты не робот

Отслеживание использования отчета

Есть ли простой способ отслеживать, кто выполняет данный отчет в SSRS 2005, и в какое время они запускают этот отчет? У нас около 80 отчетов в нашей реализации SSRS, и мы пытаемся выяснить, есть ли там, которые мы можем безопасно выпустить на пастбище. Если бы мы могли легко увидеть, какие отчеты не используются, это нам поможет. Любые идеи?

4b9b3361

Ответ 1

В следующей статье есть несколько полезных советов и запросов для создания отчетов по этому вопросу.

Например, если вы хотите просмотреть наиболее часто используемые отчеты, вы можете сделать следующее:

SELECT COUNT(Name) AS ExecutionCount,
       Name,
       SUM(TimeDataRetrieval) AS TimeDataRetrievalSum,
       SUM(TimeProcessing) AS TimeProcessingSum,
       SUM(TimeRendering) AS TimeRenderingSum,
       SUM(ByteCount) AS ByteCountSum,
       SUM([RowCount]) AS RowCountSum
  FROM (SELECT TimeStart,
               Catalog.Type,
               Catalog.Name,
               TimeDataRetrieval,
               TimeProcessing,
               TimeRendering,
               ByteCount,
               [RowCount]
          FROM Catalog
               INNER JOIN 
               ExecutionLog
                 ON Catalog.ItemID = ExecutionLog.ReportID
         WHERE Type = 2
       ) AS RE
GROUP BY Name
ORDER BY COUNT(Name) DESC,
         Name;

Следует отметить, что по умолчанию журнал выполнения хранит данные за 2 месяца. Вы можете управлять этим поведением с помощью свойства сервера ExecutionLogDaysKept, см. Эту статью technet.

Ответ 2

Я знаю, что этот вопрос настолько старый, что у него есть бакенбарды, но приведенный ниже код будет перечислять каждый отчет один раз с последним запуском. Я настоятельно рекомендую вам создать новую папку под названием "устаревшие отчеты" и переместить старые отчеты там, а не удалять их. Это удалит беспорядок, но все равно сохранит их в том случае, если Отдел бухгалтерского учета придет после вас за этот отчет, который, очевидно, нужно будет запускать каждые 3,26 года.

WITH RankedReports
AS
(SELECT ReportID,
        TimeStart,
        UserName, 
        RANK() OVER (PARTITION BY ReportID ORDER BY TimeStart DESC) AS iRank
   FROM dbo.ExecutionLog t1
        JOIN 
        dbo.Catalog t2
          ON t1.ReportID = t2.ItemID
)
SELECT t2.Name AS ReportName,
       t1.TimeStart,
       t1.UserName,
       t2.Path,
       t1.ReportID
  FROM RankedReports t1
       JOIN 
       dbo.Catalog t2
         ON t1.ReportID = t2.ItemID
 WHERE t1.iRank = 1
ORDER BY t1.TimeStart;

Ответ 3

Я всегда обнаружил, что журналы отчетов немного сложны в использовании. Службы отчетов сохраняют запись всей своей деятельности в таблице в базе данных отчетов с именем ExecutionLog

У меня есть несколько отчетов, которые я использую для запроса этой таблицы, поэтому вы можете узнать, какие отчеты действительно используются, и кто самые тяжелые пользователи

Ответ 4

Вы можете отслеживать использование отчета с помощью журналов выполнения. Пожалуйста, проверьте http://technet.microsoft.com/en-us/library/aa964131(SQL.90).aspx

Вы также можете запустить запрос, чтобы найти использование отчета. Проверьте ответ Мага в этой ссылке http://www.sqlservercentral.com/Forums/Topic433562-150-1.aspx

веселит

Ответ 5

Этот SQL также даст вам источник данных, пользователя и тип запроса:

select row_number() over (order by LogEntryId) as Id,  LogEntryId, 
        r.Name AS Report_Name, r.Path AS Report_Path, c2.Name AS Data_Source, 
        replace(c2.ConnectString,';Unicode=True','') as ConnectString,
        SUBSTRING(r.Path, 2, LEN(r.Path) - LEN(r.Name) - 2) AS Folder_Path,
        ex.UserName, ex.Format, ex.TimeProcessing, ex.TimeRendering, ex.[RowCount],
        CAST (ex.TimeStart as date) AS TimeStart,
        DATEPART (hour, ex.TimeStart) AS StartHour,
        DATEPART (minute, ex.TimeStart) AS StartMinute,
        case  
            when ex.RequestType = 0 then 'Interactive'  
            when ex.RequestType = 1 then 'Subscription'  
            when ex.RequestType = 2 then 'Refresh Cache'  
        else 'Unknown' end RequestType,
        u.UserName as CreatedBy,
        ex.Status
    from ExecutionLogStorage ex (nolock) --exec log
        join Catalog (nolock) r on ex.ReportID = r.ItemID and r.Type = 2 --report
        join DataSource ds with (nolock) ON ds.ItemID = r.ItemID  --report to connection link
       join (select ItemID, Name, SUBSTRING(Content, CHARINDEX('<ConnectString>',Content) + 15, CHARINDEX('</ConnectString>',Content) - CHARINDEX('<ConnectString>',Content) - 15) AS ConnectString
                from  ( select ItemID, Name, CONVERT(NVARCHAR(MAX),CONVERT(XML,CONVERT(VARBINARY(MAX),Content))) As Content 
                        from Catalog with (nolock) where Type = 5) x
        ) c2  ON ds.Link = c2.ItemID -- connection
        left join Users u on u.UserID = r.CreatedByID

Ответ 6

USE ReportServer
SELECT c.Name AS ItemName
    ,  CASE c.Type
        WHEN 1 THEN 'Folder'
        WHEN 2 THEN 'Report'
        WHEN 3 THEN 'Resource'
        WHEN 4 THEN 'Linked Report'
        WHEN 5 THEN 'Data Source'
        ELSE CAST(c.Type AS VARCHAR(100))
        END AS ItemType
    ,  c.Path AS ItemPath
    ,  ( SELECT TOP 1 TimeStart FROM dbo.ExecutionLog t1 WHERE t1.ReportID = c.ItemID ORDER BY TimeStart DESC ) AS LastRunDate
    ,  ( SELECT TOP 1 UserName FROM dbo.ExecutionLog t1 WHERE t1.ReportID = c.ItemID ORDER BY TimeStart DESC ) AS LastUser
 FROM Catalog AS c WITH (NOLOCK)
 WHERE 1=1
    --AND c.Type IN (1,2)

--uncomment при поиске только отчетов и папок