2009-07-24 8 views
42

Có cách nào dễ dàng để theo dõi ai đang chạy báo cáo nhất định trong SSRS 2005 và vào thời điểm nào họ đang chạy báo cáo đó? Chúng tôi có khoảng 80 báo cáo trong việc thực hiện SSRS của chúng tôi và đang cố gắng xem liệu có bất kỳ điều gì chúng tôi có thể đưa ra đồng cỏ một cách an toàn hay không. Nếu chúng ta có thể dễ dàng thấy bằng cách nào đó mà các báo cáo không được sử dụng, điều đó sẽ giúp chúng ta. Bất kỳ ý tưởng?Sử dụng báo cáo theo dõi

Trả lời

3

tôi luôn luôn tìm thấy các bản ghi báo cáo là một chút khó khăn để sử dụng. Dịch vụ báo cáo lưu giữ hồ sơ về tất cả hoạt động của nó trong một bảng trong cơ sở dữ liệu báo cáo được gọi là ExecutionLog

Tôi có một số báo cáo sử dụng bảng này để bạn biết người dùng nặng nhất là

+0

này rất hữu ích cho việc báo cáo dễ dàng & ánh sáng, nhưng bạn được giới hạn lịch sử mà các cửa hàng máy chủ (Tôi tin rằng 3 tháng) và bảo mật trên cơ sở dữ liệu báo cáo chỉ giới hạn ở một số người dùng được ủy quyền nhất định. Tuy nhiên - đó là một bước đầu tiên dễ dàng giúp bạn bắt đầu. –

13

Tôi biết câu hỏi này quá cũ nên có râu, nhưng mã bên dưới sẽ liệt kê từng báo cáo một lần với lần cuối cùng nó được chạy. Tôi khuyên bạn nên tạo một thư mục mới có tên là "báo cáo lỗi thời" và di chuyển các báo cáo cũ ở đó thay vì xóa chúng. Điều đó sẽ loại bỏ sự lộn xộn nhưng vẫn giữ chúng sẵn có trong trường hợp Bộ phận kế toán xuất hiện sau khi bạn báo cáo rằng họ rõ ràng là cần phải chạy một lần mỗi 3,26 năm.

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; 
+0

Tôi upvoted này hoàn toàn cho tham chiếu đến các báo cáo tối nghĩa theo yêu cầu của Bộ Kế toán ... quá nhiều lần tôi đã được thông báo ít hơn 24 giờ để tái phát triển một cái gì đó không ai biết bất cứ điều gì về! – Gallus

46

Có một số lời khuyên và truy vấn tốt để tạo báo cáo về điều này trong article sau.

Ví dụ, nếu bạn muốn xem các báo cáo sử dụng nhiều nhất, bạn có thể làm như sau:

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; 

Một điều cần lưu ý là theo mặc định các bản ghi thực hiện sẽ chỉ giữ 2 tháng giá trị của dữ liệu. Bạn có thể kiểm soát hành vi này với thuộc tính máy chủ ExecutionLogDaysKept, xem this technet article.

0

SQL này cũng sẽ cung cấp cho bạn nguồn dữ liệu, người dùng và các loại yêu cầu:

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