O SQL Server Reporting Services (SSRS) é uma ferramenta poderosa para criar e gerenciar relatórios no SQL Server. No entanto, o banco de dados subjacente do ReportServer não é documentado pela Microsoft, o que torna difícil consultar e analisar os dados armazenados nele. Neste artigo, exploraremos tabelas e junções comuns no banco de dados do ReportServer e discutiremos cenários em que a consulta a esse banco de dados pode ser útil.
Consultando o Catálogo do SSRS
A primeira tabela que exploraremos é dbo.Catalog. Essa tabela contém informações sobre cada objeto no site do SSRS, incluindo pastas, relatórios, fontes de dados, imagens e relatórios vinculados. Ao consultar essa tabela, podemos recuperar detalhes como o identificador exclusivo do objeto, caminho, nome, tipo, descrição e informações de criação/modificação. Também podemos fazer junção da tabela dbo.Catalog com a tabela dbo.Users para converter IDs de usuário em nomes.
Por exemplo, a seguinte consulta recupera informações da tabela dbo.Catalog:
SELECT
ItemID,
[Path],
[Name],
ParentID,
CASE [Type]
WHEN 1 THEN 'Pasta'
WHEN 2 THEN 'Relatório'
WHEN 3 THEN 'Arquivo'
WHEN 4 THEN 'Relatório Vinculado'
WHEN 5 THEN 'Fonte de Dados'
WHEN 6 THEN 'Modelo de Relatório - Raro'
WHEN 7 THEN 'Parte de Relatório - Raro'
WHEN 8 THEN 'Conjunto de Dados Compartilhado - Raro'
WHEN 9 THEN 'Imagem'
ELSE CAST(Type as varchar(100))
END AS TypeName,
[Description],
[Hidden],
CreatedBy.UserName AS CreatedBy,
CreationDate,
ModifiedBy.UserName AS ModifiedBy,
ModifiedDate
FROM
ReportServer.dbo.[Catalog] CTG
INNER JOIN
ReportServer.dbo.Users CreatedBy ON CTG.CreatedByID = CreatedBy.UserID
INNER JOIN
ReportServer.dbo.Users ModifiedBy ON CTG.ModifiedByID = ModifiedBy.UserID;
Consultando Estatísticas de Execução de Relatórios do SSRS
Toda vez que um relatório do SSRS é executado, uma linha é adicionada à tabela dbo.ExecutionLog. Essa tabela armazena informações sobre a execução do relatório, incluindo o caminho do relatório, nome de usuário, tipo de solicitação, formato, horário de início/fim, tempo de recuperação de dados, tempo de processamento, tempo de renderização, origem, status, contagem de linhas e parâmetros utilizados. Ao consultar essa tabela, podemos analisar padrões de execução de relatórios e identificar problemas de desempenho.
Por exemplo, a seguinte consulta recupera informações da tabela dbo.ExecutionLog:
SELECT *
FROM dbo.ExecutionLog;
Para tornar os dados mais legíveis, a Microsoft fornece visualizações como dbo.ExecutionLog2 e dbo.ExecutionLog3, que convertem algumas colunas em valores legíveis por humanos. Por exemplo, dbo.ExecutionLog3 inclui colunas como ItemPath, UserName, RequestType, Format, TimeStart, TimeEnd, TimeDataRetrieval, TimeProcessing, TimeRendering, Source, Status, RowCount e Parameters.
Consultando Assinaturas do SSRS
As assinaturas do SSRS são armazenadas no banco de dados do ReportServer e estão associadas a trabalhos do SQL Server Agent. A tabela dbo.ReportSchedule contém informações sobre agendamentos, enquanto a tabela dbo.Subscriptions vincula relatórios a agendamentos, criando assinaturas de relatórios. Ao fazer junção dessas tabelas com a tabela msdb.dbo.sysjobs, podemos recuperar detalhes sobre assinaturas, como caminho do relatório, descrição da assinatura, descrição do trabalho do agente, último status, extensão de entrega e parâmetros.
Por exemplo, a seguinte consulta recupera informações sobre assinaturas do SSRS:
SELECT
ctg.[Path],
s.[Description] AS SubscriptionDesc,
sj.[description] AS AgentJobDesc,
s.LastStatus,
s.DeliveryExtension,
s.[Parameters]
FROM
ReportServer.dbo.[Catalog] ctg
INNER JOIN
ReportServer.dbo.Subscriptions s ON s.Report_OID = ctg.ItemID
INNER JOIN
ReportServer.dbo.ReportSchedule rs ON rs.SubscriptionID = s.SubscriptionID
INNER JOIN
msdb.dbo.sysjobs sj ON CAST(rs.ScheduleID AS sysname) = sj.name
ORDER BY
rs.ScheduleID;
Utilizando Esses Dados em Cenários do Mundo Real
Embora consultar e analisar o banco de dados do SSRS possa parecer trivial do SQL Server, pode ser incrivelmente útil em cenários do mundo real. Aqui estão alguns exemplos:
- Otimização de Desempenho: Ao analisar o log de execução, você pode identificar gargalos na renderização de relatórios ou recuperação de dados, permitindo otimizar consultas ou trabalhar com desenvolvedores de relatórios para melhorar o desempenho.
- Solução de Problemas de Desempenho do Aplicativo: Se os usuários reclamarem sobre o desempenho lento do aplicativo, revisar o log de execução pode ajudar a identificar a causa, como um relatório modificado recentemente ou uma consulta sendo executada repetidamente.
- Limpeza de Relatórios: Ao gerar um relatório mostrando contagens de execução e últimas datas de execução para cada relatório, você pode identificar e remover relatórios não utilizados, liberando recursos e melhorando o gerenciamento de relatórios.
Ao aproveitar os dados armazenados no banco de dados do SSRS, os profissionais do SQL Server podem obter insights valiosos e tomar decisões informadas para otimizar o desempenho, solucionar problemas e simplificar o gerenciamento de relatórios.