Published on

February 17, 2020

Criando um Relatório de Matriz com Dados Ausentes no SQL Server Reporting Services (SSRS)

Problema: Preciso criar um relatório de matriz usando o SQL Server Reporting Services (SSRS) que possa mostrar todos os meses no cabeçalho da coluna, mesmo para os meses que possuem dados ausentes.

Solução:

Para alcançar isso, podemos modificar a consulta T-SQL usada para desenvolver o relatório SSRS. A consulta inicial retorna o Valor de Vendas para todos os funcionários de um determinado ano. No entanto, se houver meses sem dados, eles não aparecerão nos cabeçalhos do relatório de matriz.

Primeiro, precisamos declarar uma variável de tabela chamada @months e preenchê-la com todos os números de mês de 1 a 12 usando um loop:

DECLARE @months table (MonthNum int)
DECLARE @i int = 1

WHILE (@i <= 12)
BEGIN
   INSERT INTO @months(MonthNum)
   SELECT @i
   SET @i = @i + 1
END

SELECT * FROM @months

Após executar o código acima, teremos uma variável de tabela @months com todos os números de mês.

Em seguida, modificamos a consulta T-SQL existente para incluir a tabela @months usando um LEFT JOIN. Isso garante que, mesmo que a tabela de dados principal esteja sem dados para alguns meses, ainda obteremos todos os meses na saída, com o restante das colunas tendo valores NULL:

DECLARE @months table (MonthNum int)

DECLARE @i int = 1 
WHILE (@i <= 12) 
BEGIN 
   INSERT INTO @months(MonthNum) 
   SELECT @i 
   SET @i = @i + 1 
END 

SELECT 
   b.FirstName + ' ' + b.LastName as NomeFuncionario 
   ,[SalesAmountQuota] 
   ,m.MonthNum  as MesCalendario 
   ,MONTH([Date]) as MesCalendario_antigo 
   ,YEAR([Date]) as AnoCalendario 
FROM @months as m 
LEFT JOIN [dbo].[FactSalesQuota] as a on m.MonthNum = MONTH(a.[Date]) and YEAR([Date]) = @Year 
LEFT JOIN [dbo].[DimEmployee] as b on a.EmployeeKey = b.EmployeeKey

Após atualizar a consulta do conjunto de dados do relatório com o código acima, podemos atualizar os campos no relatório SSRS.

Finalmente, podemos fazer alguns ajustes de formatação no relatório. Podemos remover linhas em branco de funcionários adicionando uma expressão de filtro na seção do grupo de linhas de funcionários no relatório SSRS:

ISNOTHING(Fields!NomeFuncionario.Value) = FALSE

Para exibir 0 em vez de valores em branco, podemos usar uma expressão IIF na caixa de texto de valor:

=IIF(ISNOTHING(Sum(Fields!SalesAmountQuota.Value)), 0, Sum(Fields!SalesAmountQuota.Value))

Após corrigir esses itens de formatação, o relatório exibirá as colunas da matriz para todos os meses, mesmo que haja dados ausentes.

Seguindo essas etapas, você pode criar um relatório de matriz no SQL Server Reporting Services (SSRS) que mostra cabeçalhos de coluna para todos os meses, mesmo quando não há dados para essas colunas.

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.