跟踪报告使用情况
Posted
技术标签:
【中文标题】跟踪报告使用情况【英文标题】:Tracking report usage 【发布时间】:2010-11-13 19:48:46 【问题描述】:是否有一种简单的方法可以跟踪谁在 s-s-rS 2005 中运行给定报告,以及他们在什么时间运行该报告?在我们的 s-s-rS 实施中,我们有大约 80 份报告,并且正在尝试看看是否有任何我们可以安全地放牧的报告。如果我们能够以某种方式轻松查看哪些报告没有被使用,那将对我们有所帮助。有什么想法吗?
【问题讨论】:
【参考方案1】: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)
--如果只搜索报告和文件夹,请取消注释
【讨论】:
【参考方案2】:在下面的article 中有一些关于生成报告的好建议和查询。
例如,如果您想查看最常用的报告,您可以执行以下操作:
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
服务器属性控制此行为,请参阅this technet article。
【讨论】:
我认为您与 wrox 的链接已损坏。我试图找到它,但失败了。 看起来那样。不知道他们是否重新组织了那里的论坛,这就是为什么我在答案中放了一个示例。 更新了 wrox 链接到 2017 年页面的存档版本 @FistOfFury - 太棒了,我怎么没想到?【参考方案3】:此 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
【讨论】:
【参考方案4】:我知道这个问题太老了,它有胡须,但下面的代码将列出每个报告一次,以及它最后一次运行的时间。我强烈建议您创建一个名为“过时报告”的新文件夹并将旧报告移到那里而不是删除它们。这将消除混乱,但仍然可以让它们保持可用,以防会计部门跟踪您的报告,他们显然需要每 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;
【讨论】:
我赞成这个纯粹是为了参考会计部门要求的晦涩报告......太多次我收到不到 24 小时的通知来重新开发没人知道的东西!跨度> @Russell Fox 据我所知,执行日志不会跟踪从父报告调用的任何子报告。如果这是真的,我可能最终也会废弃子报告。关于如何从查询中排除活动子报告的任何想法? @Bonzay - 这很难,但我只是通过相应地命名报告来处理它:MainReportName_Sub_WhatTheSubDoes。在名称中对报告进行编号也有帮助,并且可以更轻松地按报告编号进行搜索:“DailyFinance9427_Sub_QtrTotal”。然后你可以 WHERE t1.iRank = 1 AND ReportName NOT LIKE '%_Sub_%'【参考方案5】:我总是发现报告日志有点难用。报告服务将其所有活动记录在报告数据库中名为 ExecutionLog
的表中我有几个报告用于查询此表,因此您可以了解实际使用的报告以及最重的用户是谁
【讨论】:
这对于简单而轻松的报告很有用,但您仅限于服务器存储的历史记录(我相信 3 个月),并且报告数据库的安全性仅限于某些授权用户。仍然 - 这是一个简单的第一步,可以让你开始。【参考方案6】:您可以使用执行日志监控报告使用情况。请检查此http://technet.microsoft.com/en-us/library/aa964131(SQL.90).aspx
您还可以运行查询来查找报告使用情况。在此链接中查看 Maz 的回复http://www.sqlservercentral.com/Forums/Topic433562-150-1.aspx
干杯
【讨论】:
以上是关于跟踪报告使用情况的主要内容,如果未能解决你的问题,请参考以下文章