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
È possibile monitorare l'utilizzo del report utilizzando i registri di esecuzione. Si prega di controllare questo http://technet.microsoft.com/en-us/library/aa964131(SQL.90).aspx
È inoltre possibile eseguire una query per trovare l'utilizzo del report. Controllare la risposta di Maz in questo link http://www.sqlservercentral.com/Forums/Topic433562-150-1.aspx
applausi
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
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;
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
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.
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
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. –