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.