web-dev-qa-db-fra.com

Suivi de l'utilisation du rapport

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?

47
Chris Valdivia

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 .

48
xan

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;
14
Russell Fox

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.

4
beakersoft

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é

2
Arnkrishn

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
0
Igor Krupitsky