Existe-t-il un moyen simple de savoir qui exécute un rapport donné dans SSRS 2005 et à quelle heure ce rapport est-il exécuté? Nous avons environ 80 rapports dans la mise en œuvre de notre SSRS et essayons de voir s'il y en a que nous pouvons envoyer en toute sécurité vers le pâturage. Si nous pouvions facilement voir quels rapports ne sont pas utilisés, cela nous aiderait. Des idées?
Il existe de bons conseils et requêtes pour générer des rapports à ce sujet dans le article suivant.
Par exemple, si vous souhaitez voir les rapports les plus utilisés, vous pouvez procéder comme suit:
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;
Une chose à noter est que par défaut le journal d'exécution ne conservera que 2 mois de données. Vous pouvez contrôler ce comportement avec la propriété de serveur ExecutionLogDaysKept
, voir cet article technique .
Je sais que cette question est si ancienne qu’elle contient des moustaches, mais le code ci-dessous répertorie chaque rapport une fois avec la dernière fois qu’il a été exécuté. Je vous recommande vivement de créer un nouveau dossier appelé "rapports obsolètes" et de déplacer les anciens rapports plutôt que de les supprimer. Cela enlèvera tout le fouillis mais les maintiendra quand même au cas où le service de la comptabilité viendrait après vous pour ce rapport dont ils [devaient] évidemment avoir besoin de s'exécuter tous les 3,26 ans.
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;
j'ai toujours trouvé que les journaux de rapport sont un peu difficiles à utiliser. Reporting Services conserve un enregistrement de toutes ses activités dans une table de la base de génération de rapports appelée ExecutionLog
J'ai quelques rapports que j'utilise pour interroger ce tableau. Vous pouvez ainsi savoir quels rapports sont réellement utilisés et quels sont les utilisateurs les plus lourds.
Vous pouvez surveiller l'utilisation du rapport à l'aide des journaux d'exécution. Veuillez vérifier ceci http://technet.Microsoft.com/en-us/library/aa964131(SQL.90).aspx
Vous pouvez également exécuter une requête pour rechercher l'utilisation du rapport. Vérifiez la réponse de Maz dans ce lien http://www.sqlservercentral.com/Forums/Topic433562-150-1.aspx
à votre santé
Ce SQL vous donnera également la source de données, l'utilisateur et le type de demande:
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