Em todo relatório que você desenvolver (ou tiver que dar manutenção) você provavelmente contará com alguma fórmula. No Report Viewer as fórmulas são chamadas de expressões (ou “expressions“). A documentação oficial sobre expressões no Report Viewer deixa um pouco a desejar, sem falar que não existe uma versão traduzida para o português. Pensando nisso, resolvi escrever esse artigo abordando as principais expressões que podemos utilizar em relatórios do Report Viewer.
Não tenho como comentar sobre todas as expressões disponíveis no Report Viewer, uma vez que elas são muitas. Porém, acredito que as expressões que listarei neste artigo são as mais comuns e com certeza algum dia você irá utilizá-las nos seus relatórios.
Inserindo expressões no relatório
Podemos utilizar expressões em praticamente todos os controles e propriedades dos relatórios no Report Viewer. Podemos inclusive utilizar expressões nas propriedades de visibilidade e cor de fundo para implementarmos formatação condicional.
Para adicionarmos expressões em células de uma tabela ou em um campo texto, basta clicarmos com o botão direito do mouse sobre o item desejado e escolhermos a opção “Expression“:
Já para utilizarmos expressões em propriedades, basta abrirmos a caixa de opções da propriedade e, caso ela suporte a utilização de expressões, você encontrará o item “Expression“. Por exemplo, a propriedade “Hidden” suporta expressões:
Agora vamos ver as principais expressões que podemos utilizar no Report Viewer.
Estruturas de decisão
Acredito que as expressões que implementam estruturas de decisão são as mais utilizadas no desenvolvimento de relatórios (em qualquer plataforma). Pense bem, quando desenvolvemos aplicativos, qual é a estrutura de controle mais utilizada? Muito provavelmente os “ifs“. Pois bem, o “if” é uma estrutura de decisão (ou controle de fluxo) que você pode utilizar também dentro dos seus relatórios do Report Viewer.
No Report Viewer, ao invés de simplesmente chamar-se “if“, essa estrutura de controle se chama “Iif” (vindo do Visual Basic, também presente no Excel, por exemplo). Sua utilização é muito simples. O primeiro parâmetro é uma condição, o segundo parâmetro é o valor que deve ser considerado caso a condição seja verdadeira e o terceiro parâmetro é o valor que deve ser considerado caso a condição seja falsa.
Por exemplo, para retornar 0 caso um valor seja negativo ou o próprio valor caso ele seja positivo, podemos utilizar a seguinte expressão:
=IIf(Fields!Valor.Value < 0, 0, Fields!Valor.Value)
A segunda estrutura de decisão é o “Switch“, que você provavelmente também já conhece da programação em C# ou VB.NET. Com ele conseguimos avaliar diversas condições e indicar o valor de retorno que deve ser utilizado para cada uma das opções. Por exemplo, se tivermos um campo chamado “IDCategoria” (com os itens “C“, “D“, “N“) e quisermos converter para um texto do tipo “Crédito“, “Débito” ou “Neutro“, podemos fazer da seguinte forma:
=Switch(Fields!Valor.IDCategoria = "C", "Crédito", Fields!Valor.IDCategoria = "D", "Débito", Fields!Valor.IDCategoria = "N", "Neutro")
Estruturas de decisão são muito utilizadas para fazer formatações condicionais, uma vez que podemos retornar uma cor baseada em uma condição (ou até mesmo verdadeiro/falso para mostrar/esconder um item do relatório). Não vou abordar esse assunto neste artigo pois quero escrever sobre isso em um artigo futuro.
Totalizadores
Existe uma categoria de expressões que servem para totalizar grupos de valores no Report Viewer. Não vou detalhá-las nesse artigo pois semanas atrás eu escrevi um post justamente sobre totalizadores no Report Viewer.
Datas
Quer mostrar a data atual no seu relatório? Basta utilizar a expressão “Today“. Ou, se quiser pegar uma parte específica de uma data, utilize as expressões “Day“, “Month” e “Year” passando a data desejada. Exemplo:
="Dia: " & Day(Today) & ", mês: " & Month(Today) & ", ano: " & Year(Today)
Já se quisermos adicionar dias a uma data específica, podemos utilizar a expressão “DateAdd“. Essa expressão recebe o intervalo a ser utilizado (“Hour” para adicionar horas, “Day” para adicionar dias, e por aí vai) o valor para o intervalo e a data original. Por exemplo, para retornarmos a data atual + 30 dias, poderíamos utilizar a seguinte expressão:
=DateAdd(DateInterval.Day, 30, Today)
Formatação de strings
Além de ser possível concatenarmos strings através do operador “&“, também podemos formata-las e ajusta-las com algumas outras expressões. Por exemplo, para formatar uma string utilizamos a expressão “Format“. O primeiro parâmetro dessa expressão é o valor a ser formatado e o segundo parâmetro é o formato. Para formatarmos um campo de valor no formato de moeda, utilizamos a seguinte expressão:
=Format(Fields!Valor.Value, "C")
Também é possível formatarmos datas com essa expressão. Para uma lista completa de formatos disponíveis, confira a documentação.
Além da expressão “Format“, temos à nossa disposição a expressão “Right” que utilizamos para pegarmos os valores de uma string de trás pra frente (por exemplo, os três últimos caracteres de uma string), a expressão “Left” para pegarmos os valores à esquerda da string (por exemplo, os três primeiros caracteres de uma string), a expressão “Len” que utilizamos para descobrir a quantidade de caracteres de uma string e a expressão “InStr” que serve para descobrirmos a primeira posição em que um caractere específico aparece dentro de uma string.
Informações do relatório
Outro tipo de expressão muito útil são as expressões que nos retornam informações gerais do relatório. Por exemplo, podemos utilizar a expressão “ReportName” para descobrirmos o nome do relatório e a expressão “ExecutionTime” para descobrirmos a hora em que o relatório foi gerado.
Duas expressões que são muito utilizadas e se enquadram nessa categoria são as expressões “PageNumber” e “TotalPages“. Elas retornam o número da página atual e o número total de páginas, respectivamente. Portanto, para colocarmos no rodapé a informação “Página X de Y“, utilizamos a seguinte expressão:
="Página " & Globals.PageNumber & " de " & Globals.TotalPages
Porém, é importante notar que essas expressões se encontram dentro do grupo de expressões globais (por isso elas começam com “Globals.“). Esse tipo de expressão só pode ser utilizado no cabeçalho e rodapé do relatório, e não na área de detalhes. Para uma lista completa das expressões do grupo global, confira a documentação.
Além dessas expressões, temos também duas outras muito úteis, que são as expressões “First” e “Last“. Como o próprio nome diz, elas servem para retornar o primeiro e o último registro da fonte de dados.
Códigos customizados
As expressões abordadas até agora muitas vezes são o suficiente para gerarmos um relatório de qualidade. Porém, algumas vezes precisamos de lógicas mais complexas. Pensando nisso, a Microsoft possibilita a utilização de métodos customizados (estáticos e implementados em .NET) nas expressões do Report Viewer. O processo para utilizar códigos customizados é um pouco extenso, portanto não vou abordá-lo nesse artigo. Pretendo escrever um artigo somente sobre esse tema mais pra frente. Por enquanto, caso você precise dessa funcionalidade, confira a documentação.
Entretanto, algo que eu posso mostrar nessa seção é a utilização de métodos do namespace
Microsoft.VisualBasic e a utilização das classes System.Convert e System.Math. Esse namespace e essas classes são referenciadas automaticamente pelo Report Viewer, portanto, é possível utilizá-las nas nossas expressões sem nenhum esforço. Por exemplo, suponha que você queira retornar o valor absoluto de um campo numérico (valor absoluto significa que sempre teremos um valor positivo, ou seja, se o valor original for negativo, ele perderá o sinal e virará positivo). Nesse caso, podemos utilizar o método Abs da classe Math:
=Math.Abs(Fields!Valor.Value)
Concluindo
A engine do Report Viewer provê várias expressões que fazem com que os nossos relatórios fiquem mais ricos. As expressões abordadas nesse artigo são as que eu mais utilizei nos relatórios que eu desenvolvi até hoje. Existem outras além dessas que você pode conferir na documentação (apesar da documentação do Report Viewer ser bem fraca, como eu mencionei anteriormente). É possível ainda criarmos código customizado em .NET e utilizarmos nas expressões do Report Viewer (isso não foi mostrado nesse artigo, mas, pretendo abordar no futuro). Com isso, espero que você consiga solucionar as demandas mais comuns para a geração de relatórios com o Report Viewer.
E você, já conhecia todas essas expressões? Tem alguma que você acha importante que eu deixei de fora? Dê a sua opinião nos comentários.
Finalmente, caso você ainda não tenha feito, convido para que você assine a minha newsletter. Ao inscrever-se, você sempre ficará por dentro de todos os novos artigos publicados aqui no site, além de ficar sabendo em primeira mão sobre o tema do próximo artigo e receber dicas extras que eu só compartilho por e-mail. Você pode assinar a minha newsletter através desse link ou utilizando o formulário logo abaixo.
Até a próxima!
André Lima
Image by Shaun Dunmall used under Creative Commons
https://www.flickr.com/photos/llamnuds/2815834628
The post Utilizando expressões no Report Viewer appeared first on André Alves de Lima.