SSRS 2005で特定のレポートを実行しているユーザーと、そのレポートをいつ実行しているのかを追跡する簡単な方法はありますか? SSRSの実装には約80のレポートがあり、安全に放牧できるものがあるかどうかを確認しようとしています。どのレポートが使用されていないかをなんとか簡単に確認できれば、それは助けになります。何か案は?
次の 記事 でこれに関するレポートを生成するためのいくつかの良いアドバイスとクエリがあります。
たとえば、最も使用頻度の高いレポートを表示する場合、次のことができます。
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;
注意すべきことの1つは、デフォルトでは、実行ログには2か月分のデータしか保存されないことです。この動作はExecutionLogDaysKept
サーバープロパティで制御できます。 このtechnetの記事 を参照してください。
この質問は非常に古く、ひげがあるのはわかっていますが、以下のコードでは、各レポートが最後に実行されたときに一度リストされます。 「古いレポート」という新しいフォルダを作成し、古いレポートを削除するのではなく、そこに移動することを強くお勧めします。これにより、混乱が解消されますが、その報告のために経理部があなたの後に来る場合に備えて利用可能になります明らかに 3.26年に1回実行する必要があります。
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;
レポートログは使いにくいといつも思っていました。レポートサービスは、レポートデータベースのExecutionLogというテーブルにすべてのアクティビティの記録を保持します
私はこのテーブルにクエリを使用するレポートをいくつか持っているので、実際に使用されているレポートと最も重いユーザーが誰であるかを知ることができます
実行ログを使用して、レポートの使用状況を監視できます。これを確認してください http://technet.Microsoft.com/en-us/library/aa964131(SQL.90).aspx
クエリを実行して、レポートの使用状況を見つけることもできます。このリンクでMazの返信を確認してください http://www.sqlservercentral.com/Forums/Topic433562-150-1.aspx
乾杯
この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
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)
-レポートとフォルダのみを検索する場合はコメント解除