2009-07-24 16 views
42

C'è un modo semplice per tenere traccia di chi sta eseguendo un determinato report in SSRS 2005 ea che ora stanno eseguendo quel report? Abbiamo circa 80 segnalazioni nella nostra implementazione SSRS e stiamo cercando di capire se c'è qualcosa che possiamo tranquillamente mettere al pascolo. Se potessimo facilmente vedere in qualche modo quali rapporti non vengono usati, ciò ci aiuterebbe. Qualche idea?Utilizzo del report di tracciamento

risposta

3

ho sempre trovato i registri di rapporto sono un po 'difficile da usare. Reporting Services mantiene un record di tutta la sua attività in una tabella nel database di report chiamato ExecutionLog

Ho un paio di rapporti io uso quella query questa tabella, in modo da poter scoprire quali rapporti sono effettivamente utilizzati, e chi gli utenti più pesanti sono

+0

Questo è utile per una facile e la luce di segnalazione, ma si sono limitati alla storia che i negozi del server (credo 3 mesi) e la sicurezza nel database del report è limitata solo a determinati utenti autorizzati. Ancora: è un primo passo facile che ti consentirà di iniziare. –

13

So che questa domanda è così vecchia che ha baffi, ma il codice seguente elencherà ogni rapporto una volta con l'ultima volta che è stato eseguito. Consiglio vivamente di creare una nuova cartella denominata "report obsoleti" e spostare i vecchi report anziché eliminarli. Ciò rimuoverà la confusione, ma li manterrà comunque disponibili nel caso in cui l'Ufficio contabilità venga dopo di te per quel rapporto che , ovviamente, deve essere eseguito una volta ogni 3.26 anni.

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; 
+0

Ho svalutato questo solo per il riferimento agli oscuri rapporti richiesti dal Dipartimento Contabilità ... troppe volte mi è stato dato meno di 24 ore di preavviso per riqualificare qualcosa di cui nessuno sa nulla! – Gallus

46

C'è qualche buon consiglio e le query per generare rapporti su questo nel seguente article.

Ad esempio, se si desidera vedere i rapporti più utilizzati, è possibile effettuare le seguenti operazioni:

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; 

Una cosa da notare è che di default il log di esecuzione manterrà solo 2 mesi vale la pena di dati. È possibile controllare questo comportamento con la proprietà server ExecutionLogDaysKept, vedere this technet article.

0

Questa SQL vi darà anche l'origine dei dati, l'utente e il tipo di richiesta:

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 
Problemi correlati