Published on

June 10, 2022

Consultando e Analisando o Banco de Dados do SQL Server Reporting Services (SSRS)

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.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.