reporting-services - parametros - sql reporting services parameters in query
Seguimiento del uso del informe (5)
¿Existe una manera fácil de rastrear quién está ejecutando un informe determinado en SSRS 2005 y en qué momento están ejecutando ese informe? Tenemos aproximadamente 80 informes en nuestra implementación de SSRS, y estamos tratando de ver si hay alguno que podamos poner en libertad de manera segura. Si pudiéramos ver fácilmente qué informes no se están utilizando, eso nos ayudaría. ¿Algunas ideas?
Este SQL también le dará la fuente de datos, el usuario y el tipo de solicitud:
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
Hay algunos buenos consejos y consultas para generar informes sobre esto en el siguiente article .
Por ejemplo, si desea ver los informes más utilizados, puede hacer lo siguiente:
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 a tener en cuenta es que, de forma predeterminada, el registro de ejecución solo conservará 2 meses de datos. Puede controlar este comportamiento con la propiedad del servidor ExecutionLogDaysKept
, consulte este artículo de TechNet .
Puede controlar el uso del informe usando los registros de ejecución. Por favor revisa esto http://technet.microsoft.com/en-us/library/aa964131(SQL.90).aspx
También puede ejecutar una consulta para buscar el uso del informe. Consulte la respuesta de Maz en este enlace http://www.sqlservercentral.com/Forums/Topic433562-150-1.aspx
aclamaciones
Sé que esta pregunta es tan antigua que tiene bigotes, pero el siguiente código enumerará cada informe una vez con la última vez que se ejecutó. Le recomiendo que cree una nueva carpeta llamada "informes obsoletos" y mueva los informes antiguos allí en lugar de eliminarlos. Eso eliminará el desorden pero aún los mantendrá disponibles en caso de que el Departamento de Contabilidad venga detrás de usted por ese informe que obviamente necesitan ejecutar una vez cada 3,26 años.
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;
Siempre encontré que los registros del informe son un poco difíciles de usar. Los servicios de informes mantienen un registro de toda su actividad en una tabla en la base de datos de informes llamada ExecutionLog
Tengo un par de informes que utilizo esa consulta en esta tabla, para que pueda averiguar qué informes se usan realmente y quiénes son los usuarios más pesados.