Si alguna vez se preguntó quién está ejecutando sus informes de SSRS o si desea verificar los detalles de ejecución (tiempo de ejecución, tipo, etc.), Se puede obtener fácilmente todo tipo de información diferente sobre el historial de ejecución.
Vistas del registro de ejecución
Microsoft recomienda no consultar las tablas del servidor de informes directamente, para esto nos proporciona 3 vistas estándar en la base de datos del servidor de informes.
dbo.ExecutionLog: para compatibilidad con versiones anteriores
dbo.ExecutionLog2: para SQL Server 2008
dbo.ExecutionLog3: para SQL Server 2008 R2 (igual que ExecutionLog2, con 2 campos renombrados: ReportPath ahora es ItemPath y ReportAction ahora es ItemAction)
Tabla – ExecutionLogStorage
Request Type
0: Interactive
1: Subscription
2: Refresh Cache
Report Action
1: Render
2: Bookmark Navigation
3: Document Map Navigation
4: Drill Through
5: Find String
6: Get Document Map
7: Toggle
8: Sort
9: Execute
Source
1: Live
2: Cache
3: Snapshot
4: History
5: Ad Hoc (i.e., Report Builder)
6: Session (i.e., another request within existing session)
7: RDCE (i.e., Report Definition Customization Extension)
SELECT InstanceName,
COALESCE(C.Path, 'Unknown') AS ItemPath,
UserName,
ExecutionId,
CASE(RequestType)
WHEN 0 THEN 'Interactive'
WHEN 1 THEN 'Subscription'
WHEN 2 THEN 'Refresh Cache'
ELSE 'Unknown'
END AS RequestType,
Format,
PARAMETERS,
CASE(ReportAction)
WHEN 1 THEN 'Render'
WHEN 2 THEN 'BookmarkNavigation'
WHEN 3 THEN 'DocumentMapNavigation'
WHEN 4 THEN 'DrillThrough'
WHEN 5 THEN 'FindString'
WHEN 6 THEN 'GetDocumentMap'
WHEN 7 THEN 'Toggle'
WHEN 8 THEN 'Sort'
WHEN 9 THEN 'Execute'
ELSE 'Unknown'
END AS ItemAction,
TimeStart,
TimeEnd,
TimeDataRetrieval,
TimeProcessing,
TimeRendering,
CASE(SOURCE)
WHEN 1 THEN 'Live'
WHEN 2 THEN 'Cache'
WHEN 3 THEN 'Snapshot'
WHEN 4 THEN 'History'
WHEN 5 THEN 'AdHoc'
WHEN 6 THEN 'Session'
WHEN 7 THEN 'Rdce'
ELSE 'Unknown'
END AS SOURCE,
Status,
ByteCount,
[RowCount],
AdditionalInfo
FROM ExecutionLogStorage EL WITH(NOLOCK)
LEFT OUTER JOIN CATALOG C WITH(NOLOCK) ON (EL.ReportID = C.ItemID)
CATALOG
Esta tabla contiene todos los objetos de informe con los que un usuario puede interactuar a través de la interfaz de usuario de Web Portal, como informes, orígenes de datos e imágenes. Estos datos se almacenan como una jerarquía con una ruta principal/raíz y todos los demás objetos debajo de ella en un árbol. La siguiente consulta devuelve algunos datos básicos de esta tabla:
SELECT ItemID, Path, Name, ParentID,
Type,
CASE
WHEN Type = 1 THEN 'Folder (1)'
WHEN Type = 2 THEN 'Report (2)'
WHEN Type = 3 THEN 'File (3)'
WHEN Type = 4 THEN 'Linked Report (4)'
WHEN Type = 5 THEN 'Data Source (5)'
WHEN Type = 6 THEN 'Report Model (6)'
WHEN Type = 7 THEN 'Report Part (7)'
WHEN Type = 8 THEN 'Shared Data Set (8)'
WHEN Type = 9 THEN 'Report Part (9)'
WHEN Type = 11 THEN 'KPI (11)'
WHEN Type = 12 THEN 'Mobile Report Folder (12)'
WHEN Type = 13 THEN 'PowerBI Desktop Document (13)'
END AS Type1,
[Content], Intermediate, SnapshotDataID,
LinkSourceID, Property, Description, Hidden, CreatedByID, CreationDate, ModifiedByID,
ModifiedDate, MimeType, SnapshotLimit, Parameter,
PolicyID, PolicyRoot,
ExecutionFlag, ExecutionTime, SubType, ComponentID
FROM Catalog
SELECT Type,
CASE
WHEN Type = 1 THEN 'Folder (1)'
WHEN Type = 2 THEN 'Report (2)'
WHEN Type = 3 THEN 'File (3)'
WHEN Type = 4 THEN 'Linked Report (4)'
WHEN Type = 5 THEN 'Data Source (5)'
WHEN Type = 6 THEN 'Report Model (6)'
WHEN Type = 7 THEN 'Report Part (7)'
WHEN Type = 8 THEN 'Shared Data Set (8)'
WHEN Type = 9 THEN 'Report Part (9)'
WHEN Type = 11 THEN 'KPI (11)'
WHEN Type = 12 THEN 'Mobile Report Folder (12)'
WHEN Type = 13 THEN 'PowerBI Desktop Document (13)'
END AS Type1,
COUNT(*) AS Total
FROM Catalog
GROUP BY Type
Los resultados muestran parte del contenido de mi servidor de prueba SSRS, incluye carpetas, informes y orígenes de datos.
USER
Dentro de la configuración del sitio en SSRS, los usuarios/grupos se pueden agregar, eliminar o ajustar sus permisos. Esta seguridad es independiente de los inicios de sesión y los usuarios que SQL Server mantiene por separado.
SELECT Users.UserID,
Users.UserName,
CASE
WHEN Users.UserType = 0 THEN 'SQL Server user/login'
WHEN Users.UserType = 1 THEN 'Domain user or group'
END AS UserType,
CASE
WHEN Users.AuthType IN (0,1) THEN 'Windows user/group'
WHEN Users.AuthType = 2 THEN 'SQL auth'
END AS AuthType
FROM dbo.Users;
SUSCRIPTIONS
Esta tabla contiene todas las suscripciones definidas en SSRS. Se necesitan algunas uniones para obtener información sobre el informe al que está adjunta la suscripción, quién es el propietario o quién la modificó por última vez:
SELECT
Subscriptions.Description,
Subscriptions.LastStatus,
Subscriptions.EventType,
Subscriptions.LastRunTime,
Subscriptions.Parameters,
SUBSCRIPTION_OWNER.UserName AS SubscriptionOwner,
Catalog.Name AS ReportName,
MODIFIED_BY.UserName AS LastModifiedBy,
Subscriptions.ModifiedDate
FROM dbo.Subscriptions
INNER JOIN dbo.Users SUBSCRIPTION_OWNER ON SUBSCRIPTION_OWNER.UserID = Subscriptions.OwnerID
INNER JOIN dbo.Catalog ON Catalog.ItemID = Subscriptions.Report_OID
INNER JOIN dbo.Users MODIFIED_BY ON MODIFIED_BY.UserID = Subscriptions.ModifiedByID;
¡Esta es una información excepcionalmente útil! No existe una forma central de administrar las suscripciones en SSRS y, por lo tanto, obtener una vista completa en un solo lugar es muy útil.
UN SCRIPT MUY BUENO
SELECT c.Name, c.[Path], COUNT(*) AS TimesRun,
MAX(l.TimeStart) AS [LastRun],
(SELECT SUBSTRING(
(SELECT CAST(', ' AS VARCHAR(MAX))+CAST(c1.Name AS VARCHAR(MAX))
FROM [ReportServer].[dbo].[Catalog] AS c
INNER JOIN [ReportServer].[dbo].[DataSource] AS d ON c.ItemID = d.ItemID
INNER JOIN [ReportServer].[dbo].[Catalog] c1 ON d.Link = c1.ItemID
WHERE c.Type = 2 AND c.ItemId = l.ReportId FOR XML PATH('') ), 3, 10000000) AS list) AS DataSources,
(SELECT SUBSTRING(
(SELECT CAST(', ' AS VARCHAR(MAX))+CAST(REPLACE(t.UserName, 'DOMAIN_NAME\', '') AS VARCHAR(MAX))
FROM ( SELECT TOP 100000 l2.UserName + '(' + CAST(COUNT(*) AS VARCHAR(100)) + ')' AS UserName
FROM [ReportServer].[dbo].ExecutionLog AS l2
WHERE l2.ReportID = l.ReportId
GROUP BY l2.UserName
ORDER BY COUNT(*) DESC ) AS t
FOR XML PATH('')), 3, 10000000)) AS UsedBy
FROM [ReportServer].[dbo].ExecutionLog AS l
RIGHT JOIN [ReportServer].[dbo].Catalog AS c ON l.ReportID = C.ItemID
WHERE c.Type = 2 -- Only show reports 1=folder, 2=Report, 3=Resource, 4=Linked Report, 5=Data Source
GROUP BY l.ReportId, c.Name, c.[Path];
Una vez conectado al SSRS, haga clic con el botón derecho en el nombre del servidor seleccionar Propiedades para abrir la ventana Propiedades del servidor.
Asegúrese de que la casilla de verificación Habilitar registro de ejecución de informes esté marcada. Si desea conservar los registros de forma indefinida, simplemente puede desmarcar la casilla junto a Eliminar las entradas de registro anteriores a esta cantidad de días. Sin embargo, según su entorno y la cantidad de ejecuciones de informes que tenga, esto podría hacer que la tabla de registro crezca excesivamente. Dicho esto, es probable que tome MUCHO tiempo ya que los datos almacenados aquí generalmente se pueden medir en MB. Recomendaría establecer este valor en 365 o en cualquier valor que satisfaga sus necesidades de auditoría.
El otro método para cambiar este valor se puede encontrar en la página Avanced. Si mira debajo del grupo Other, verá una marca para ExecutionLogDaysKept. Actualizar este valor tendrá el mismo efecto.
Leave a Reply