Exemplos de expressões (Reporting Services)

As expressões são usadas com freqüência em relatórios para controlar o conteúdo e sua aparência. As expressões são escritas no MicrosoftVisual Basic e podem usar funções internas, código personalizado, variáveis globais, variáveis de relatório e de grupo e variáveis definidas pelo usuário.

Este tópico fornece exemplos de expressões que podem ser usadas para tarefas comuns em um relatório.

  • Funções do Visual Basic   Exemplos de funções de data, de cadeia de caracteres, de conversão e condicionais do Visual Basic.

  • Funções de relatórios   Exemplos de funções de agregação e de outras funções internas de relatórios.

  • Aparência dos dados do relatório   Exemplos de alteração da aparência de um relatório.

  • Exemplos de propriedades para definir propriedades de item de relatório para controlar formato ou visibilidade.

  • Parâmetros   Exemplos de uso de parâmetros em uma expressão.

  • Código Personalizado   Exemplos de código personalizado incorporado.

Para obter exemplos de expressões para usos específicos, consulte os tópicos seguintes:

Para obter mais informações sobre expressões simples e complexas, onde você pode usar expressões e os tipos de referências que pode incluir em uma expressão, consulte tópicos em Trabalhando com expressões de relatórios. Para obter mais informações sobre o contexto no qual são avaliadas expressões para calcular agregações, consulte Calculando totais e outros agregados (Reporting Services).

Além disso, o editor de expressão inclui uma exibição hierárquica de funções internas. Quando você seleciona a função, um exemplo de código aparece no painel de valores. Para obter mais informações, consulte Caixa de diálogo Expressão.

Funções

Muitas expressões em um relatório contêm funções. É possível formatar dados, aplicar lógica e acessar metadados do relatório usando estas funções. É possível gravar expressões que usam funções da biblioteca de tempo de execução do MicrosoftVisual Basic e dos namespaces System..::..Convert e System..::..Math. É possível adicionar referências a funções a partir de outros assemblies ou de código personalizado. Você também pode usar classes do Microsoft.NET Framework, incluindo System.Text.RegularExpressions. Para obter mais informações sobre as funções do Visual Basic, consulte a "Biblioteca de tempo de execução do Visual Basic" no msdn.microsoft.com.

O .NET Framework fornece muitos modos de especificar formatos personalizados, por exemplo, para formatos de data específicos. Para obter mais informações, consulte Tipos de formatação no MSDN.

Funções do Visual Basic

Você pode usar as funções do Visual Basic para manipular os dados exibidos nas caixas de texto ou usados para parâmetros, propriedades ou outras áreas do relatório. Esta seção fornece exemplos que demonstram algumas destas funções. Estes exemplos especificam constantes do Visual Basic como valores de enumeração, por exemplo, DateInterval.Month. Embora o editor de expressão não suporte o Intellisense para obter estes valores, eles são compilados corretamente em uma expressão.

Para obter mais informações sobre funções do Visual Basic, consulte a documentação do Visual Basic.

Funções de data

  • A função Today fornece a data atual. Essa expressão pode ser usada em uma caixa de texto para exibir a data no relatório ou em um parâmetro para filtrar dados baseados na data atual.

    =Today()
    
  • A função DateAdd é útil para fornecer um intervalo de datas baseado em um único parâmetro. A expressão a seguir fornece uma data seis meses após a data de um parâmetro do tipo System..::..DateTime denominado StartDate.

    =DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
    
  • A função Year exibe o ano de uma data específica. Você pode usar essa função para agrupar datas em conjunto ou para exibir o ano como um rótulo para um conjunto de datas. Essa expressão fornece o ano para um grupo determinado de datas de pedidos de vendas. A função Month e outras funções também podem ser usadas para manipular datas. Para obter mais informações, consulte a documentação do Visual Basic.

    =Year(Fields!OrderDate.Value)
    

Funções de cadeia de caracteres

  • Combine mais de um campo usando operadores de concatenação e constantes do Visual Basic. A expressão a seguir retorna dois campos, cada um em uma linha separada na mesma caixa de texto:

    =Fields!FirstName.Value & vbCrLf & Fields!LastName.Value 
    
  • Formate datas e números em uma cadeia de caracteres com a função Format. A expressão a seguir exibe valores dos parâmetros StartDate e EndDate em formato de data por extenso:

    =Format(Parameters!StartDate.Value, "D") & " through " &  Format(Parameters!EndDate.Value, "D")  
    

    Se a caixa de texto contiver apenas uma data ou número, você deverá usar a propriedade Format da caixa de texto para aplicar formatação, em vez da função Format dentro da caixa de texto.

  • As funções Right, Len e InStr são úteis para retornar uma subcadeia de caracteres, por exemplo, cortar DOMÍNIO\nome de usuário para apenas o nome de usuário. A expressão a seguir retorna a parte da cadeia de caracteres à direita de um caractere de barra invertida (\) de um parâmetro denominado User:

    =Right(Parameters!User.Value, Len(Parameters!User.Value) - InStr(Parameters!User.Value, "\"))
    

    A expressão a seguir resulta no mesmo valor anterior, usando membros da classe System..::..String do .NET Framework em vez das funções do Visual Basic:

    =Parameters!User.Value.Substring(Parameters!User.Value.IndexOf("\")+1, Parameters!User.Value.Length-Parameters!User.Value.IndexOf("\")-1)
    
  • Exiba os valores selecionados de um parâmetro de vários valores. O exemplo a seguir usa a função Join para concatenar os valores selecionados do parâmetro MySelection em uma única cadeia de caracteres que pode ser definida como uma expressão para o valor de uma caixa de texto em um item de relatório:

    = Join(Parameters!MySelection.Value)
    
  • As funções Regex do RegularExpressions do .NET Framework são úteis para alterar o formato de cadeias de caracteres existentes, por exemplo, a formatação de um número de telefone. A expressão a seguir usa a função Replace para alterar o formato de um número de telefone de dez dígitos em um campo de "nnn-nnn-nnnn" para "(nnn) nnn-nnnn":

    =System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value, "(\d{3})[ -.]*(\d{3})[ -.]*(\d{4})", "($1) $2-$3")
    
    ObservaçãoObservação

    Verifique se o valor para Fields!Phone.Value não tem nenhum espaço adicional e se é do tipo System..::..String.

Funções de conversão

É possível usar as funções do Visual Basic para converter um campo de um tipo de dados em um tipo de dados diferente. As funções de conversão podem ser usadas para converter um tipo de dados padrão de um campo no tipo de dados necessário para cálculos ou para combinar texto. 

  • A expressão a seguir converte a constante 500 para o tipo Decimal a fim de compará-la a um tipo de dados money Transact-SQL no campo Valor de uma expressão de filtro.

    =CDec(500)
    
  • A expressão a seguir exibe o número de valores selecionados para o parâmetro de vários valores MySelection.

    =CStr(Parameters!MySelection.Count)
    

Funções de decisão

  • A função Iif retorna um de dois valores, dependendo da expressão ser verdadeira ou não. A expressão a seguir usa a função Iif para retornar um valor booleano de True se o valor de LineTotal exceder 100. Caso contrário, ele retornará False:

    =IIF(Fields!LineTotal.Value > 100, True, False)
    
  • Use várias funções IIF (também conhecidas como "IIFs aninhadas") para retornar um de três valores, dependendo do valor de PctComplete. A expressão a seguir pode ser colocada na cor de preenchimento de uma caixa de texto para alterar a cor de plano de fundo, dependendo do valor na caixa de texto.

    =IIF(Fields!PctComplete.Value >= 10, "Green", IIF(Fields!PctComplete.Value >= 1, "Blue", "Red"))
    

    Valores maiores ou iguais a 10 são exibidos com um plano de fundo verde, entre 1 e 9 são exibidos com um plano de fundo azul e menores do que 1 são exibidos com um plano de fundo vermelho.

  • Uma maneira diferente de obter a mesma funcionalidade é usar a função Switch. A função Switch é útil quando você tem três ou mais condições a serem testadas. A função Switch retorna o valor associado à primeira expressão em uma série avaliada como verdadeira:

    =Switch(Fields!PctComplete.Value >= 10, "Green", Fields!PctComplete.Value >= 1, "Blue", Fields!PctComplete.Value = 1, "Yellow", Fields!PctComplete.Value <= 0, "Red",)
    

    Valores maiores ou iguais a 10 são exibidos com um plano de fundo verde, entre 1 e 9 são exibidos com um plano de fundo azul, iguais a 1 são exibidos com um plano de fundo amarelo e 0 ou menos são exibidos com um plano de fundo vermelho.

  • Uma terceira maneira de obter a mesma funcionalidade é usar a função Choose. A função Choose usa o primeiro parâmetro como um índice para um dos parâmetros de função restantes. O primeiro parâmetro deve ser um inteiro. Se a cor do plano de fundo de uma caixa de texto em uma tabela for definida como essa expressão, o valor de MyIndex controlará a cor.

    =Choose(Fields!MyIndex.Value,"Red","Green","Yellow")
    

    Por exemplo, quando MyIndex for 1, a cor do plano de fundo será "Vermelho". No conjunto de resultados da consulta, verifique se os dados para MyIndex não excedem o intervalo da lista de parâmetros.

  • Teste o valor do campo ImportantDate e retorne "Vermelho", se ele tiver mais de uma semana, caso contrário, "Azul". Esta expressão pode ser usada para controlar a propriedade Cor de uma caixa de texto em um item de relatório:

    =IIF(DateDiff("d",Fields!ImportantDate.Value, Now())>7,"Red","Blue")
    
  • Teste o valor do campo PhoneNumber e retorne "Sem valor", se ele for null (Nothing no Visual Basic); caso contrário retorne o valor do número do telefone. Esta expressão pode ser usada para controlar o valor de uma caixa de texto em um item de relatório.

    =IIF(Fields!PhoneNumber.Value Is Nothing,"No Value",Fields!PhoneNumber.Value)
    
  • Teste o valor do campo Department e retorne o nome de um sub-relatório ou um null (Nothing no Visual Basic). Esta expressão pode ser usada para sub-relatórios de detalhamento condicional.

    =IIF(Fields!Department.Value = "Development", "EmployeeReport", Nothing)
    
  • Teste se o valor de um campo é nulo. Esta expressão pode ser usada para controlar a propriedade Hidden de um item de relatório de imagem. No exemplo a seguir, a imagem especificada pelo campo [LargePhoto] será exibida apenas se o valor do campo não for nulo.

    =IIF(IsNothing(Fields!LargePhoto.Value),True,False)
    

Funções de relatórios

O Reporting Services fornece funções de relatório adicionais que podem ser usadas para manipular dados em um relatório. Esta seção fornece exemplos de duas destas funções. Para obter mais informações sobre funções de relatórios e exemplos, consulte Usando funções internas de relatório e de agregação em expressões (Reporting Services).

Sum

  • A função Sum pode somar os valores em um grupo ou região de dados. Essa função pode ser útil no cabeçalho ou no rodapé de um grupo. A expressão a seguir exibe a soma de dados no grupo Ordem ou na região de dados:

    =Sum(Fields!LineTotal.Value, "Order")
    
  • Você também pode usar a função Sum para cálculos agregados condicionais. Por exemplo, se um conjunto de dados tiver um campo denominado Estado com valores possíveis Não Iniciado, Iniciado, Concluído, a seguinte expressão, quando colocada em um cabeçalho do grupo, calculará a soma agregada apenas para o valor Concluído:

    =Sum(IIF(Fields!State.Value = "Finished", 1, 0))
    

RowNumber

  • A função RowNumber, quando usada em uma caixa de texto dentro de uma região de dados, exibe o número da linha de cada instância da caixa de texto na qual a expressão é exibida. Essa função pode ser útil para numerar linhas em uma tabela. Ela também pode ser útil para tarefas mais complexas, como fornecer quebras de página baseadas no número de linhas. Para obter mais informações, consulte Quebras de página neste tópico.

    O escopo especificado para RowNumber controla quando a renumeração é iniciada. A palavra-chave Nothing indica que a função iniciará a contagem na primeira linha da região de dados mais externa. Para iniciar a contagem dentro de regiões de dados aninhadas, use o nome da região de dados. Para iniciar a contagem dentro de um grupo, use o nome do grupo.

    =RowNumber(Nothing)
    

Aparência dos dados do relatório

É possível usar expressões para manipular como os dados são exibidos em um relatório. Por exemplo, é possível exibir os valores de dois campos em uma única caixa de texto, exibir informações sobre o relatório ou afetar o modo como as quebras de página são inseridas no relatório.

Cabeçalhos e rodapés de página

Ao criar um relatório, você pode exibir o nome do relatório e o número da página no rodapé. Para fazer isso, você pode usar as expressões a seguir:

  • A seguinte expressão fornece o nome do relatório e a hora em que foi executado. Ela pode ser colocada em uma caixa de texto no rodapé ou no corpo do relatório. A hora é formatada com a cadeia de caracteres de formatação do .NET Framework para data abreviada:

    =Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")
    
  • A seguinte expressão, colocada em uma caixa de texto no rodapé de um relatório, fornece o número da página e o total de páginas no relatório:

    =Globals.PageNumber & " of " & Globals.TotalPages
    

Os exemplos as seguir descrevem como exibir os primeiros e os últimos valores de uma página no cabeçalho da página, semelhante ao que você pode encontrar em uma listagem de diretório. O exemplo pressupõe uma região de dados que contém uma caixa de texto denominada LastName.

  • A expressão a seguir, colocada em uma caixa de texto no lado esquerdo do cabeçalho da página, fornece o primeiro valor da caixa de texto LastName na página:

    =First(ReportItems("LastName").Value)
    
  • A expressão a seguir, colocada em uma caixa de texto no lado direito do cabeçalho da página, fornece o último valor da caixa de texto LastName na página:

    =Last(ReportItems("LastName").Value)
    

O exemplo a seguir descreve como exibir um total de páginas. O exemplo assume uma região de dados que contém uma caixa de texto denominada Cost.

  • A expressão a seguir, colocada no cabeçalho ou no rodapé de página, fornece a soma dos valores na caixa de texto Cost da página:

    =Sum(ReportItems("Cost").Value)
    
ObservaçãoObservação

Você pode fazer referência a apenas um item de relatório por expressão em um cabeçalho ou rodapé de página. Além disso, é possível fazer referência ao nome da caixa de texto, mas não à expressão de dados reais dentro da caixa de texto, nas expressões de cabeçalho e rodapé de página.

Quebras de página

Em alguns relatórios, você pode desejar colocar uma quebra de página no final de um número de linhas especificado ou, além disso, em grupos ou itens de relatório. Para fazer isso, crie um grupo que contenha os grupos ou registros de detalhes desejados, adicione uma quebra de página ao grupo e adicione uma expressão de grupo ao grupo por um número de linhas especificado.

  • A expressão a seguir, quando colocada na expressão de grupo, atribui um número para cada conjunto de 25 linhas. Quando uma quebra de página é definida para o grupo, essa expressão resulta em uma quebra de página a cada 25 linhas.

    =CInt(Ceiling(RowNumber(Nothing)/25))
    

    Para permitir que o usuário defina um valor para o número de linhas por página, crie um parâmetro denominado RowsPerPage e baseie a expressão de grupo no parâmetro, conforme mostrado na expressão a seguir:

    =CInt(Ceiling(RowNumber(Nothing)/Parameters!RowsPerPage.Value))
    

    Para obter mais informações sobre como configurar quebras de página para um grupo, consulte Como adicionar uma quebra de página (Reporting Services).

Propriedades

As expressões não são usadas apenas para exibir dados nas caixas de texto. Elas também podem ser usadas para alterar o modo como as propriedades são aplicadas aos itens do relatório. É possível alterar informações de estilo para um item de relatório ou alterar sua visibilidade.

Formatação

  • A expressão a seguir, quando usada na propriedade Color de uma caixa de texto, altera a cor do texto dependendo do valor do campo Profit:

    =Iif(Fields!Profit.Value < 0, "Red", "Black")
    
  • A expressão a seguir, quando usada na propriedade BackgroundColor de um item de relatório em uma região de dados, alterna a cor de plano de fundo de cada linha entre verde claro e branco:

    =Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")
    

    Se você estiver usando uma expressão para um escopo especificado, poderá precisar indicar o conjunto de dados para a função de agregação:

    =Iif(RowNumber("Employees") Mod 2, "PaleGreen", "White")
    
ObservaçãoObservação

As cores disponíveis são provenientes da enumeração de KnownColor do .NET Framework.

Visibilidade

Você pode mostrar e ocultar itens em um relatório usando as propriedades de visibilidade para o item de relatório. Em uma região de dados, como uma tabela, é possível ocultar inicialmente as linhas de detalhes com base no valor de uma expressão.

  • A expressão a seguir, quando usada para visibilidade inicial de linhas de detalhes em um grupo, mostra as linhas de detalhes de todas as vendas que excedem 90 por cento no campo PctQuota:

    =Iif(Fields!PctQuota.Value>.9, False, True)
    
  • A expressão a seguir, quando definida na propriedade Hidden de uma tabela, mostrará a tabela apenas se ela tiver mais de 12 linhas:

    =IIF(CountRows()>12,true,false)
    

URLs

É possível personalizar URLs usando dados do relatório e também controlar condicionalmente se as URLs são adicionadas como uma ação para uma caixa de texto.

  • A expressão a seguir, quando usada como uma ação em uma caixa de texto, gera uma URL personalizada que especifica o campo do conjunto de dados EmployeeID como um parâmetro da URL.

    ="http://adventure-works/MyInfo?ID=" & Fields!EmployeeID.Value
    

    Para obter mais informações, consulte Como adicionar um hiperlink a uma URL (Reporting Services).

  • A expressão a seguir controla condicionalmente se uma URL deve ser adicionada em uma caixa de texto. Essa expressão depende de um parâmetro denominado IncludeURLs que permite que um usuário decida se deve incluir URLs ativas em um relatório. Essa expressão é definida como uma ação em uma caixa de texto. Configurando o parâmetro como Falso e exibindo o relatório, você pode exportar o relatório Microsoft Excel sem hiperlinks.

    =IIF(Parameters!IncludeURLs.Value,"http://adventure-works.com/productcatalog",Nothing)
    

Dados do Relatório

As expressões podem ser usadas para manipular os dados usados no relatório. Você pode fazer referência a parâmetros e a outras informações do relatório. É possível até mesmo alterar a consulta usada para recuperar dados para o relatório.

Parâmetros

É possível usar expressões em um parâmetro para variar o valor padrão do parâmetro. Por exemplo, você pode usar um parâmetro para filtrar dados para um usuário específico baseado na ID do usuário usada para executar o relatório.

  • A expressão a seguir, quando usada com o valor padrão para um parâmetro, coleta a ID do usuário da pessoa que executa o relatório:

    =User!UserID
    
  • Para consultar um parâmetro em um parâmetro de consulta, expressão de filtro, caixa de texto ou outra área do relatório, use a coleção global de Parameters. Este exemplo supõe que o parâmetro é denominado Department:

    =Parameters!Department.Value
    
  • Parâmetros podem ser criados em um relatório, mas definidos como ocultos. Quando o relatório é executado no servidor de relatório, o parâmetro não é exibido na barra de ferramentas e o leitor de relatório não pode alterar o valor padrão. É possível usar um parâmetro oculto, definido como um valor padrão, como uma constante personalizada. É possível usar esse valor em qualquer expressão, incluindo uma expressão de campo. A expressão a seguir identifica o campo especificado pelo valor do parâmetro padrão para o parâmetro denominado ParameterField:

    =Fields(Parameters!ParameterField.Value).Value
    

    Para obter mais informações, consulte Definindo propriedades de parâmetro para um relatório publicado.

Código personalizado

É possível usar código personalizado em um relatório. O código personalizado é incorporado em um relatório ou armazenado em um assembly personalizado que é usado no relatório. Para obter mais informações sobre código personalizado, consulte Usando referências de código personalizado em expressões (Reporting Services).

  • O exemplo a seguir chama um método de código incorporado chamado ToUSD, que converte o valor do campo StandardCost em um valor em dólar:

    =Code.ToUSD(Fields!StandardCost.Value)
    
  • O exemplo a seguir mostra como definir algumas constantes e variáveis personalizadas.

    [Visual Basic]

    Public Const MyNote = "Authored by Bob"
    Public Const NCopies As Int32 = 2
    Public Dim  MyVersion As String = "123.456"
    Public Dim MyDoubleVersion As Double = 123.456
    

    Embora as constantes e variáveis personalizadas não sejam exibidas na exibição Constantes do Editor de Expressão (que exibe apenas constantes internas), é possível adicionar referências a elas a partir de qualquer expressão, conforme mostrado nos exemplos a seguir. Estas são tratadas como Variantes.

    [Visual Basic]

    =Code.MyNote
    =Code.NCopies 
    =Code.MyVersion
    =Code.MyDoubleVersion
    

Outro modo de criar constantes personalizadas ou personalizar um valor para uma expressão é usar uma variável de relatório ou uma variável de grupo.

Usando variáveis de grupo para agregação personalizada

Você pode inicializar o valor para uma variável de grupo que é local para um escopo de grupo específico e depois incluir uma referência a essa variável nas expressões. Um dos modos pelos quais é possível usar uma variável de grupo com código personalizado é implementar uma agregação personalizada. Para obter mais informações, consulte Usando variáveis de grupo no Reporting Services 2008 para agregação personalizada.

Para obter mais informações sobre variáveis, consulte Usando as referências do conjunto de variáveis de relatórios e grupos em expressões (Reporting Services).

Substituindo texto em um campo em tempo de execução

O exemplo a seguir chama um método incorporado chamado FixSpelling, que substitui "Bicycle" para todas as ocorrências do texto "Bike" em SubCategory.Value.

=Code.FixSpelling(Fields!SubCategory.Value)

O código a seguir, quando incorporado em uma definição de relatório, mostra uma implementação do método FixSpelling. Este exemplo mostra como fazer referência à classe System.Text..::..StringBuilder do .NET Framework. Para obter mais informações, consulte Como adicionar código a um relatório (Reporting Services) e Como adicionar uma referência de assembly a um relatório (Reporting Services).

Public Function FixSpelling(ByVal s As String) As String
   Dim strBuilder As New System.Text.StringBuilder(s)
   If s.Contains("Bike") Then
      strBuilder.Replace("Bike", "Bicycle")
      Return strBuilder.ToString()
      Else : Return s
   End If
End Function

Suprimindo valores nulos ou zero em tempo de execução

Alguns valores em uma expressão podem ser avaliados como nulos ou indefinidos na hora do processamento do relatório. Isso pode criar erro de tempo de execução que resultam em #Erro exibidos na caixa de texto em vez da expressão avaliada. A função IIF é particularmente sensível a esse comportamento porque, ao contrário de uma instrução If-Then-Else, cada parte da instrução IIF é avaliada (incluindo chamadas de função) antes de ser passada para a rotina que é testada como true ou false. A instrução =IIF(Fields!Sales.Value is NOTHING, 0, Fields!Sales.Value) gerará #Erro no relatório renderizado, se Fields!Sales.Value for NOTHING.

Para evitar essa condição, use uma das seguintes estratégias:

  • Defina o numerador como 0 e o denominador como 1, se o valor do campo B for 0 ou indefinido. Caso contrário defina o numerador como o valor do campo A e o denominador como o valor do campo B.

    =IIF(Field!B.Value=0, 0, Field!A.Value / IIF(Field!B.Value =0, 1, Field!B.Value))
    
  • Use uma função de código personalizado para retornar o valor da expressão. O exemplo a seguir retorna a diferença da porcentagem entre um valor atual e um valor anterior. Isso pode ser usado para calcular a diferença entre quaisquer dois valores sucessivos e trata o caso de borda da primeira comparação (quando não há valor anterior) e casos em que o valor anterior ou o valor atual é null (Nothing no Visual Basic).

    Public Function GetDeltaPercentage(ByVal PreviousValue, ByVal CurrentValue) As Object
        If IsNothing(PreviousValue) OR IsNothing(CurrentValue) Then
            Return Nothing
        Else if PreviousValue = 0 OR CurrentValue = 0 Then
            Return Nothing
        Else 
            Return (CurrentValue - PreviousValue) / CurrentValue
        End If
    End Function
    

    A expressão a seguir mostra como chamar esse código personalizado em uma caixa de texto:

    =Code.GetDeltaPercentage(Previous(Sum(Fields!Sales.Value),"ColumnGroupByYear"), Sum(Fields!Sales.Value))
    

Histórico de alterações

Conteúdo atualizado

Exemplos para a função Choose e para calcular agregados personalizados usando variáveis de grupo com código personalizado foram adicionados.