Partilhar via


Exemplos de expressões em relatórios paginados no Construtor de Relatórios

Aplica-se a: Microsoft Report Builder (SSRS) Power BI Report Builder Report Designer no SQL Server Data Tools

Expressões costumam ser usadas em relatórios paginados para controlar o conteúdo e a aparência do relatório. As expressões são escritas no Microsoft Visual Basic e podem usar funções internas, código personalizado, variáveis de grupo e relatório e variáveis definidas pelo usuário. As expressões começam com um sinal de igual (=). Para obter mais informações sobre o editor de expressões e os tipos de referências que podem ser incluídos, confira Uso de expressões em relatórios paginados (Construtor de Relatórios) e Adicionar uma expressão a um relatório paginado (Construtor de Relatórios).

Importante

Quando o RDL Sandboxing é habilitado, você pode usar somente certos tipos e membros no texto da expressão durante o tempo de publicação do relatório. Para obter mais informações, consulte Habilitar e desabilitar o RDL Sandboxing para o Reporting Services no modo integrado do SharePoint.

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

Para obter mais informações sobre expressões simples e complexas, nas quais você pode usar expressões, e os tipos de referências que podem ser incluídas em uma expressão, confira os artigos em Expressões em um relatório paginado (Construtor de Relatórios). Para obter mais informações sobre o contexto em que as expressões são avaliadas para calcular agregações, confira Escopo das expressões para totais, agregações e coleções internas em um relatório paginado (Construtor de Relatórios).

Para aprender como gravar expressões que usam muitas das funções e dos operadores também empregados por exemplos de expressões neste artigo, consulte Tutorial: introdução às expressões.

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. Escreva expressões que usam funções da biblioteca em tempo de execução do Microsoft Visual Basic e dos namespaces Convert e Math. É possível adicionar referências a funções a partir de outros assemblies ou de código personalizado. Use também classes do Microsoft .NET Framework, incluindo System.Text.RegularExpressions.

funções do Visual Basic

É possível usar funções do Visual Basic para manipular os dados exibidos em caixas de texto ou seus parâmetros, propriedades ou outras áreas do seu relatório. Esta seção fornece exemplos que demonstram algumas dessas funções. Para obter mais informações, confira o artigo sobre membros da biblioteca de runtime do Visual Basic.

O .NET Framework fornece muitas opções de formato personalizado, por exemplo, para formatos de data específicos.

Funções matemáticas

  • A função Round é útil para números arredondados para o inteiro mais próximo. A seguinte expressão arredonda 1,3 para 1:

    = Round(1.3)  
    

    Também é possível escrever uma expressão para arredondar um valor para um múltiplo especificado, semelhante à função MRound no Excel. Com essa função, é possível multiplicar o valor por um fator que cria um inteiro, arredonde o número e divida pelo mesmo fator. Por exemplo, para arredondar 1,3 para o múltiplo mais próximo de 0,2 (1,4), use a seguinte expressão:

    = Round(1.3*5)/5  
    

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()  
    
  • Use a função DateInterval para extrair uma parte específica de uma data. Estes são alguns parâmetros DateInterval válidos:

    • DateInterval.Second

    • DateInterval.Minute

    • DateInterval.Hour

    • DateInterval.Weekday

    • DateInterval.Day

    • DateInterval.DayOfYear

    • DateInterval.WeekOfYear

    • DateInterval.Month

    • DateInterval.Quarter

    • DateInterval.Year

      Por exemplo, essa expressão mostra o número da semana no ano atual da data de hoje:

      =DatePart(DateInterval.WeekOfYear, 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 posterior à data de um parâmetro 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:

    =Year(Fields!OrderDate.Value)  
    
  • É possível combinar funções em uma expressão para personalizar o formato. A expressão a seguir altera o formato de uma data na forma mês-dia-ano para mês-semana-número da semana. Por exemplo, 12/23/2009 para December Week 3:

    =Format(Fields!MyDate.Value, "MMMM") & " Week " &   
    (Int(DateDiff("d", DateSerial(Year(Fields!MyDate.Value),   
    Month(Fields!MyDate.Value),1), Fields!FullDateAlternateKey.Value)/7)+1).ToString  
    

    Quando usado como um campo calculado em um conjunto de dados, é possível usar essa expressão em um gráfico para agregar valores por semana dentro de cada mês.

  • A expressão a seguir formata o valor SellStartDate como MMM-AA. O campo SellStartDate é um tipo de dados de data/hora:

    =FORMAT(Fields!SellStartDate.Value, "MMM-yy")  
    
  • A expressão a seguir formata o valor SellStartDate como dd/MM/aaaa. O campo SellStartDate é um tipo de dados datetime:

    =FORMAT(Fields!SellStartDate.Value, "dd/MM/yyyy")  
    
  • A função CDate converte o valor em uma data. A função Now retorna um valor de data que contém a data e hora atuais de acordo com seu sistema. DateDiff retorna um valor Longo especificando o número de intervalos de hora entre dois valores de Data.

    O exemplo a seguir exibe a data de início do ano atual:

    =DateAdd(DateInterval.Year,DateDiff(DateInterval.Year,CDate("01/01/1900"),Now()),CDate("01/01/1900"))  
    
  • O exemplo a seguir exibe a data de início do mês anterior com base no mês atual:

    =DateAdd(DateInterval.Month,DateDiff(DateInterval.Month,CDate("01/01/1900"),Now())-1,CDate("01/01/1900"))  
    
  • A expressão a seguir gera os anos de intervalo entre SellStartDate e LastReceiptDate. Esses campos estão em dois conjuntos de dados diferentes, DataSet1 e DataSet2. As Funções do Construtor de Relatórios – First Function em um relatório paginado (Construtor de Relatórios), que é uma função de agregação, retorna o primeiro valor de SellStartDate em DataSet1 e o primeiro valor de LastReceiptDate em DataSet2:

    =DATEDIFF("yyyy", First(Fields!SellStartDate.Value, "DataSet1"), First(Fields!LastReceiptDate.Value, "DataSet2"))  
    
  • A função DatePart retorna um valor Integer que contém o componente especificado de um determinado valor Date. A expressão a seguir retorna o ano para o primeiro valor de SellStartDate em DataSet1. O escopo do conjunto de dados é especificado, pois há vários conjuntos de dados no relatório:

    =Datepart("yyyy", First(Fields!SellStartDate.Value, "DataSet1"))  
    
    
  • A função DateSerial retorna um valor de Data que representa um ano, um mês e um dia especificados, com as informações de tempo definidas como meia-noite. O exemplo a seguir exibe a data de término do mês anterior com base no mês atual:

    =DateSerial(Year(Now()), Month(Now()), "1").AddDays(-1)  
    
  • As expressões a seguir exibem várias datas com base em um valor de parâmetro de data selecionado pelo usuário:

Descrição de exemplo Exemplo
Ontem =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-1)
Dois Dias Atrás =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-2)
Um Mês Atrás =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-1,Day(Parameters!TodaysDate.Value))
Dois Meses Atrás =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-2,Day(Parameters!TodaysDate.Value))
Um Ano Atrás =DateSerial(Year(Parameters!TodaysDate.Value)-1,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value))
Dois Anos Atrás =DateSerial(Year(Parameters!TodaysDate.Value)-2,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.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, e Lene InStr são úteis para retornar uma subcadeia de caracteres, por exemplo, cortar DOMAIN\username para apenas o nome de usuário. A seguinte expressão 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 seguinte expressão resulta no mesmo valor que o anterior, usando membros da classe String do .NET Framework em vez de 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)  
    

    O exemplo a seguir faz o mesmo que o exemplo anterior e exibe uma cadeia de texto antes da lista de valores selecionados:

    ="Report for " & JOIN(Parameters!MySelection.Value, " & ")  
    
    
  • As funções Regex do .NET Framework System.Text.RegularExpressions são úteis para alterar o formato de cadeias de caracteres existentes, por exemplo, formatação de um número de telefone. A expressão a seguir usa a função Substituir para alterar o formato de um número de telefone 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ção

    Verifique se o valor para Fields!Phone.Value não tem espaços adicionais e se é do tipo String.

Pesquisa

  • Ao especificar um campo chave, você pode usar a função Lookup para recuperar um valor de um conjunto de dados para uma relação um para um, como um par chave-valor. A expressão seguinte exibe o nome de produto de um conjunto de dados chamado Produto, considerando o identificador de produto para correspondência:

    =Lookup(Fields!PID.Value, Fields!ProductID.Value, Fields!ProductName.Value, "Product")  
    

LookupSet

  • Ao especificar um campo chave, você pode usar a função LookupSet para recuperar um conjunto de valores de um conjunto de dados para uma relação de um para muitos. Por exemplo, uma pessoa pode ter vários números de telefone. No exemplo seguinte, suponha que o conjunto de dados PhoneList contenha um identificador de pessoa e um número de telefone em cada linha. LookupSet retorna uma matriz de valores. A seguinte expressão combina os valores retornados em uma única cadeia de caracteres e exibe a lista de números de telefone da pessoa especificada por ContactID:

    =Join(LookupSet(Fields!ContactID.Value, Fields!PersonID.Value, Fields!PhoneNumber.Value, "PhoneList"),",")  
    

Funções de conversão

Use funções do Visual Basic para converter um campo de um tipo de dados em outro tipo de dados. Você pode usar as funções de conversão 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 no tipo Decimal a fim de compará-la com um tipo de dados de dinheiro do Transact-SQL no campo Value em uma expressão de filtro:

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

    =CStr(Parameters!MySelection.Count)  
    

Funções de decisão

  • A função IIF retorna um dos dois valores, dependendo se a expressão é verdadeira ou não. A expressão a seguir usa a função IIF para retornar um valor booliano igual a True, se o valor de LineTotal exceder 100. Caso contrário, ela retorna um valor “Falso”:

    =IIF(Fields!LineTotal.Value > 100, True, False)  
    
  • Use várias funções IIF (também conhecidas como "instruções IIF aninhadas") para retornar um dos 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. Valores entre um e nove são exibidos com um plano de fundo azul. valores menores que uma exibição com um plano de fundo vermelho.

  • Uma maneira diferente de obter a mesma funcionalidade usa 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 TRUE:

    =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. Valores entre um e nove são exibidos com um plano de fundo azul. Valores iguais a uma exibição com um plano de fundo amarelo. Os valores menores que ou iguais a 0 são exibidos com um plano de fundo vermelho.

  • Teste o valor do campo ImportantDate e retorne "Vermelho", se ele for mais antigo que uma semana, e "Azul", em caso contrário. 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 "No Value" se ele for nulo, chamado Nothing no Visual Basic. Caso contrário, retorne o valor do número de 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 valor nulo, chamado Nothing no Visual Basic. Esta expressão pode ser usada para sub-relatórios detalhados 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 é exibida somente se o valor do campo não é nulo:

    =IIF(IsNothing(Fields!LargePhoto.Value),True,False)  
    
  • A função MonthName retorna um valor de cadeia de caracteres que contém o nome do mês especificado. O exemplo a seguir exibe NA no campo Mês quando o campo contiver o valor de 0:

    IIF(Fields!Month.Value=0,"NA",MonthName(IIF(Fields!Month.Value=0,1,Fields!Month.Value)))  
    
    

Funções de relatório

Em uma expressão, você pode adicionar uma referência a mais funções de relatório que manipulam dados em um relatório. Esta seção fornece exemplos de duas dessas funções. Para obter mais informações sobre exemplos e funções de relatório, confira Funções do Construtor de Relatórios – referência de funções de agregação em relatórios paginados (Report Builder).

Somar

  • 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 de agregação condicionais. Por exemplo, imagine que você tenha um conjunto de dados que tenha um campo chamado Estado com os valores possíveis Não Iniciado, Iniciado e Concluído. A expressão a seguir, quando colocada em um cabeçalho de grupo, calcula 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.

    O escopo especificado para RowNumber controla quando a renumeração é iniciada. A palavra-chave Nothing indica que a função inicia 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 de 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 querer exibir o nome do relatório e o número da página no rodapé. As seguintes expressões podem ser usadas:

  • 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 de data abreviada do .NET Framework:

    =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 a 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 contenha uma caixa de texto chamada LastName.

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

    =First(ReportItems("LastName").Value)  
    
  • A seguinte expressão, colocada em uma caixa de texto no lado direito do cabeçalho de 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 pressupõe uma região de dados que contenha uma caixa de texto chamada Cost. Ao colocar esta expressão no cabeçalho ou no rodapé de página, a soma dos valores é fornecida na caixa de texto Cost da página:

    =Sum(ReportItems("Cost").Value)  
    

Observaçã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. Crie um grupo que contenha os grupos ou registros de detalhes desejados. Adicione uma quebra de página ao grupo e, em seguida, adicione uma expressão de grupo ao grupo por um número especificado de linhas.

  • 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:

    =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 chamado RowsPerPage e baseie a expressão de grupo no parâmetro, conforme mostrado na seguinte expressão:

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

    Para obter mais informações sobre como configurar quebras de página para um grupo, confira Adicionar uma quebra de página a um relatório paginado (Construtor de Relatórios).

Propriedades

As expressões não são usadas apenas para exibir dados em 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 seguinte expressão, 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")  
    

    Use também a variável de objeto Me do Visual Basic. Essa variável é outra maneira de fazer referência ao valor de uma caixa de texto.

    =Iif(Me.Value < 0, "Red", "Black")

  • A seguinte expressão, quando usada na propriedade BackgroundColor de um item de relatório em uma região de dados, alterna a cor da tela de fundo de cada linha entre verde-pálido e branco:

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

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

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

Observação

As cores disponíveis foram obtidas da enumeração KnownColor do .NET Framework.

Cores do gráfico

Para especificar cores para um gráfico de Forma, você pode usar código personalizado para controlar a ordem em que as cores são mapeadas para valores de pontos de dados. Este código personalizado ajuda a usar cores consistentes para vários gráficos que têm os mesmos grupos de categorias. Para obter mais informações, confira Especificar cores consistentes em gráficos com várias formas em um relatório paginado (Construtor de Relatórios).

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 seguinte expressão, quando usada para visibilidade inicial das linhas de detalhes em um grupo, mostra as linhas de detalhes de todas as vendas que excedem 90% no campo PctQuota:

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

    =IIF(CountRows()>12,false,true)  
    
  • A expressão a seguir, quando definida na propriedade Hidden de uma coluna, mostrará a coluna apenas se o campo existir no conjunto de dados do relatório depois que os dados são recuperados de uma fonte de dados:

    =IIF(Fields!Column_1.IsMissing, true, false)  
    

É 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 de conjunto de dados EmployeeID como um parâmetro de URL:

    ="https://contoso/MyInfo?ID=" & Fields!EmployeeID.Value  
    

    Para obter mais informações, confira Adicionar um hiperlink a uma URL em um relatório paginado (Report Builder).

  • 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 chamado IncludeURLs, que permite a um usuário decidir se deseja 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 FALSE e exibindo o relatório, você pode exportar o relatório Microsoft Excel sem hiperlinks:

    =IIF(Parameters!IncludeURLs.Value,"https://contoso.com/productcatalog",Nothing)  
    

dados de 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 do 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  
    

Código personalizado

É possível usar código personalizado em um relatório. O código personalizado é inserido em um relatório ou armazenado em um assembly personalizado usado no relatório. Para obter mais informações sobre o código personalizado, confira Referências de código personalizado e assembly em expressões em um relatório paginado no Designer de Relatórios (SSRS).

Usar 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 Usar variáveis de grupo no Reporting Services 2008 para agregação personalizada.

Para obter mais informações sobre as variáveis, confira Referências e variáveis de grupo e de relatório em um relatório paginado (Construtor de Relatórios).

Suprimir 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. Esses valores podem criar erros de tempo de execução que resultam em “#Erro” exibidos na caixa de texto em vez da expressão avaliada. A função IIF é sensível a esse comportamento. 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 um valor 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. Esse valor pode ser usado para calcular a diferença entre dois valores sucessivos. Ele lida com o caso extremo da primeira comparação quando não há nenhum valor anterior e funciona nos casos em que o valor anterior ou o valor atual é um valor nulo, chamado 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 de uma caixa de texto, para o contêiner "ColumnGroupByYear", um grupo ou região de dados:

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

    Esse código ajuda a evitar exceções em tempo de execução. Agora você pode usar uma expressão como =IIF(Me.Value < 0, "red", "black") na propriedade Color da caixa de texto para exibição condicional do texto, dependendo se os valores são maiores que ou menores que 0.