Quantcast
Channel: Relatórios – André Alves de Lima
Viewing all articles
Browse latest Browse all 61

Criando totalizadores no Report Viewer

$
0
0

É fato que ao desenvolvermos relatórios é praticamente impossível não precisarmos de algum tipo de totalizador. Seja a soma de valores, contagem de registros ou média de um determinado range de valores, é muito improvável que um relatório não tenha a totalização de alguma propriedade. No artigo de hoje veremos como trabalhar com totalizadores no Report Viewer.

Antes de começar, caso você esteja trabalhando com o Visual Studio Express, saiba que não existe suporte ao desenvolvimento de novos relatórios nessa edição do Visual Studio. É possível adicionar o controle do Report Viewer para a exibição de relatórios existentes no Visual Studio Express, mas, para desenhar novos relatórios ou editar relatórios existentes, você precisaria utilizar o SQL Server 2012 Report Builder. Outra opção é migrar para o Visual Studio Community, que suporta o Report Viewer nativamente. Os exemplos desse artigo utilizarão a edição Community do Visual Studio.

Criando o relatório de exemplo

Para demonstrar a criação de totalizadores no Report Viewer, vamos criar um projeto do tipo “Windows Forms Application“. No Form que é criado automaticamente pelo Visual Studio, adicione o controle do Report Viewer e faça o “docking” do controle para que ele ocupe o espaço inteiro do Form.

Feito isso, vamos primeiramente criar o DataSet que será utilizado para alimentar os dados do relatório. Para isso, adicione um novo item do tipo “DataSet” ao projeto (“DataSet” fica dentro da categoria “Data” na tela “Add New Item“). Utilize o nome “DataSetRelatorio.xsd” para o novo DataSet a ser criado.

Após ter criado o DataSet, adicione uma nova DataTable chamada “Transacao” com as seguintes colunas: IDTransacao (auto incremento, chave primária), Descricao (string), Categoria (string), Valor (double).

Com o DataSet criado, vamos adicionar um relatório ao projeto. Para isso, utilize a opção “Add New Item” e escolha o item “Report“, que fica dentro da categoria “Reporting“. Dê o nome de “RelatorioTransacao.rdlc” ao relatório que será criado.

Uma vez executados esses passos, o Visual Studio terá criado um novo relatório em branco. Poderíamos ter utilizado o “Report Wizard“, mas, ele requer maiores explicações. Pretendo escrever um artigo somente sobre o “Report Wizard” no futuro.

No relatório em branco, a primeira tarefa que temos que executar é adicionar a fonte de dados para o relatório. Para isso, utilize a opção “New DataSet” da janela “Report Data“.

Na janela que se abre, preencha o nome do novo DataSet como “DataSetRelatorio“, escolha na caixa de opções “Data source” o DataSet que criamos anteriormente (“DataSetRelatorio“) e escolha na caixa de opções “Available datasets” a tabela “Transacao“.

Feito isso, adicione no relatório um controle do tipo “Table” e arraste as colunas do DataSet para dentro das células detalhe da tabela.

Como o nosso DataSet tem quatro colunas e o controle “Table” é criado com somente três colunas, precisamos adicionar uma coluna extra para o campo “Valor“. Insira uma nova coluna à direita de “Categoria” clicando com o botão direito e escolhendo a opção “Insert Column / Right“.

Finalmente, arraste o campo “Valor” até a célula da nova coluna que acabou de ser criada e formate o relatório para que ele fique com uma aparência mais profissional.

Adicionando os totalizadores

A maneira mais fácil de criarmos totalizadores é clicarmos com o botão direito sobre a coluna que queremos totalizar e escolhermos a opção “Add Total“.

Isso fará com que a soma dos valores da coluna escolhida seja exibida na última linha da tabela.

Note que um totalizador nada mais é do que uma expressão. Nesse caso, para adicionarmos uma soma de todos os valores da coluna “Valor“, utilizamos a expressão “Sum“, que recebe como parâmetro o nome da coluna a ser somada.

Entretanto, a expressão “Sum” não é a única expressão que podemos utilizar para criarmos totalizadores. Além dessa expressão, temos à nossa disposição outras diversas funções que podem ser utilizadas para agregarmos um conjunto valores. Você encontra uma lista dessas funções clicando com o botão direito em uma das outras células da linha inferior da tabela e escolhendo a opção “Expression“.

Na tela “Expression“, confira todas as funções de agregação dentro da categoria “Common Functions / Aggregate“.

As principais expressões utilizadas para agregações de valores são:

– Avg: retorna a média de um conjunto de valores
– Count: retorna a contagem de itens de um conjunto de valores
– CountDistinct: retorna a contagem de itens distintos de um conjunto de valores
– Max: retorna o maior valor de um conjunto de valores
– Min: retorna o menor valor de um conjunto de valores
– Sum: retorna a soma de um conjunto de valores

Por exemplo, para adicionarmos a contagem de itens no nosso relatório, podemos utilizar a expressão “=Count(Fields!IDTransacao.Value)“.

Testando o relatório

A única maneira de testarmos um relatório local desenvolvido com o Report Viewer é utilizando-o dentro de uma aplicação. Portanto, volte até o Form criado anteriormente e escolha o relatório que acabamos de criar utilizando a “smart tag” do controle do Report Viewer.

Ao escolher o relatório, o Visual Studio automaticamente criará um DataSet e um BindingSource apontando para o DataSet que criamos anteriormente (“DataSetRelatorio“, tabela “Transacao“).

Em um cenário de aplicação normal nós provavelmente acessaríamos algum banco de dados para recuperar a lista de transações. Porém, a fim de simplificarmos esse exemplo, vamos adicionar algumas transações manualmente no DataSet do relatório. Para isso, vá até o code-behind do Form e adicione o seguinte código no construtor:

        public FormTotalizadores()
        {
            InitializeComponent();

            DataSetRelatorio.Transacao.AddTransacaoRow("Saldo anterior", "Crédito", 1234.56);
            DataSetRelatorio.Transacao.AddTransacaoRow("Pagamento de Conta", "Débito", -125.98);
            DataSetRelatorio.Transacao.AddTransacaoRow("Salário", "Crédito", 6324.34);
            DataSetRelatorio.Transacao.AddTransacaoRow("Rendimentos", "Crédito", 243.56);
            DataSetRelatorio.Transacao.AddTransacaoRow("Pagamento de Conta", "Débito", -230.99);
            DataSetRelatorio.Transacao.AddTransacaoRow("Transferência", "Débito", -500.00);
            DataSetRelatorio.Transacao.AddTransacaoRow("Pagamento de Conta", "Débito", -39.45);
            DataSetRelatorio.Transacao.AddTransacaoRow("Depósito", "Crédito", 200.00);
            DataSetRelatorio.Transacao.AddTransacaoRow("Pagamento de Conta", "Débito", -44.90);
            DataSetRelatorio.Transacao.AddTransacaoRow("Débito automático", "Débito", -135.50);
        }

Execute a aplicação e veja que a contagem de transações é exibida no final da coluna “Categoria” e a soma das transações é exibida no final da coluna “Valor“.

Totalizadores + Agrupamentos

Imagine a situação onde desejemos adicionar um agrupamento das transações por “Categoria“. Como o Report Viewer trata totalizadores quando temos agrupamentos no nosso relatório? Outras ferramentas de relatórios (como o Crystal Reports, por exemplo) demandam que você especifique explicitamente que o totalizador deve considerar o agrupamento. Felizmente a engine do Report Viewer é inteligente o suficiente para detectar se o totalizador está dentro ou fora de um grupo e, caso esteja dentro do grupo, ele automaticamente considerará que o totalizador deverá considerar somente os registros daquele grupo. Já no caso do totalizador estar fora de uma área de agrupamento, o Report Viewer considerará todos os registros para calcular o valor do totalizador.

Para entendermos essa sistemática, vamos agrupar as linhas da nossa lista de transações por “Categoria“. Caso você não saiba como fazer isso, confira o meu outro artigo sobre agrupamentos simples no Report Viewer. O resultado deve ficar parecido com as imagens a seguir.

Execute a aplicação e veja que o Report Viewer calcula os totalizadores justamente da forma que esperamos.

Caso você queira explicitamente indicar para o Report Viewer que o totalizador deve considerar somente os registros do grupo (não é necessário, mas, vai que você queira fazer isso), basta editar a expressão do totalizador e adicionar um segundo parâmetro com o nome do agrupamento. Por exemplo, a expressão para a somatória dos valores da transação pelo grupo de categorias ficaria a seguinte: “=Sum(Fields!Valor.Value, “Categoria”)

Concluindo

Não importa o relatório que você for desenvolver, muito provavelmente ele terá algum tipo de totalizador, seja a contagem de registros, somatório de valores, média de valores, etc. Nesse artigo você aprendeu a adicionar totalizadores no Report Viewer, tanto em relatórios simples quanto em relatórios com agrupamentos. Para ficar por dentro dos próximos posts, assine a minha newsletter clicando aqui ou utilizando o formulário abaixo.

Até a próxima!

André Lima

Image by Chad Miller used under Creative Commons
https://www.flickr.com/photos/chadmiller/311308512

Newsletter do André Lima

* indicates required



Powered by MailChimp

The post Criando totalizadores no Report Viewer appeared first on André Alves de Lima.


Viewing all articles
Browse latest Browse all 61