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
Bạn có thể theo dõi việc sử dụng báo cáo bằng nhật ký thực thi. Vui lòng kiểm tra điều này http://technet.microsoft.com/en-us/library/aa964131(SQL.90).aspx
Bạn cũng có thể chạy truy vấn để tìm cách sử dụng báo cáo. Kiểm tra trả lời Maz trong liên kết này http://www.sqlservercentral.com/Forums/Topic433562-150-1.aspx
cổ vũ
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à
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;
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
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.
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
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. –