Exemplos de expressões no Construtor de Relatórios do Power BI
APLICA-SE A: Power BI Report Builder Power BI Desktop
As expressões são usadas com frequência nos relatórios paginados do Construtor de Relatórios do Power BI 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 relatório e grupo e variáveis definidas pelo usuário. As expressões começam com um sinal de igual (=).
Este artigo fornece exemplos de expressões que podem ser usadas para tarefas comuns em um relatório.
Funções do Visual Basic: Exemplos de data, cadeia de caracteres, conversão e funções condicionais do Visual Basic.
Funções de relatório: exemplos de agregações e outras funções de relatório incorporadas.
Aparência dos dados do relatório: exemplos para alterar a aparência de um relatório.
Propriedades: Exemplos para definir propriedades de item de relatório para controlar o formato ou a visibilidade.
Parâmetros: Exemplos de uso de parâmetros em uma expressão.
Código personalizado: Exemplos de código personalizado incorporado.
Para obter mais informações sobre expressões simples e complexas, onde você pode usar expressões e os tipos de referências que você pode incluir em uma expressão, consulte Expressões no Construtor de Relatórios do Power BI.
Funções
Muitas expressões em um relatório contêm funções. Você pode formatar dados, aplicar lógica e acessar metadados de relatório usando essas funções. Você pode escrever expressões que usam funções da biblioteca de tempo de execução do Microsoft Visual Basic e dos xref:System.Convert
namespaces e xref:System.Math
. Você pode adicionar referências a funções em código personalizado. Você também pode usar classes do Microsoft .NET Framework, incluindo xref:System.Text.RegularExpressions
.
Funções do Visual Basic
Você pode usar funções do Visual Basic para manipular os dados exibidos em caixas de texto ou usados para parâmetros, propriedades ou outras áreas do relatório. Esta seção fornece exemplos que demonstram algumas dessas funções. Para obter mais informações, consulte Membros da biblioteca de tempo de execução do Visual Basic no MSDN.
O .NET Framework fornece muitas opções de formato personalizado, por exemplo, para formatos de data específicos. Para obter mais informações, consulte Tipos de formatação.
Funções matemáticas
A função Round é útil para arredondar números para o número inteiro mais próximo. A expressão a seguir arredonda 1.3 para 1:
=Round(1.3)
Você também pode escrever uma expressão para arredondar um valor para um múltiplo que você especificar, semelhante à função MRound no Excel. Multiplique o valor por um fator que cria um inteiro, arredondar o número e, em seguida, dividir pelo mesmo fator. Por exemplo, para arredondar 1,3 para o múltiplo mais próximo de 0,2, que é 1,4, use a seguinte expressão:
=Round(1.3*5)/5
Funções de data
A função Hoje 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 com base na data atual.
=Today()
Use a função DateInterval para extrair uma parte específica de uma data. Aqui estão alguns parâmetros DateInterval válidos:
- DateInterval.Second
- DateInterval.Minute
- DateInterval.Hour
- DateInterval.Dia da semana
- DateInterval.Day
- DateInterval.DayOfYear
- DateInterval.WeekOfYear
- DateInterval.Month
- DateInterval.Quarter
- DateInterval.Year
Por exemplo, esta expressão mostrará o número da semana no ano atual para a data de hoje:
=DatePart(DateInterval.WeekOfYear, today())
A função DateAdd é útil para fornecer um intervalo de datas com base em um único parâmetro. A expressão a seguir fornece uma data que é seis meses após a data de um parâmetro chamado StartDate.
=DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
A função Ano exibe o ano de uma data específica. Você pode agrupar datas ou exibir o ano como um rótulo para um conjunto de datas. Esta expressão fornece o ano para um determinado grupo de datas de ordem de venda. A função Mês 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)
Você pode combinar funções em uma expressão para personalizar o formato. A expressão a seguir altera o formato de uma data no formato mês-dia-ano para o número mês-semana-semana. Por exemplo, altere "18/12/2022" para "Semana 3 de dezembro":
=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, você pode 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-yy. O campo SellStartDate é um tipo de dados datetime.
=FORMAT(Fields!SellStartDate.Value, "MMM-yy")
A expressão a seguir formata o valor SellStartDate como dd/MM/aa. 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 Agora retorna um valor de data contendo a data e hora atuais de acordo com o seu sistema. DateDiff retorna um valor Long especificando o número de intervalos de tempo entre dois valores Date .
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 o intervalo de anos entre SellStartDate e LastReceiptDate. Esses campos estão em dois conjuntos de dados diferentes, DataSet1 e DataSet2.
=DATEDIFF("yyyy", First(Fields!SellStartDate.Value, "DataSet1"), First(Fields!LastReceiptDate.Value, "DataSet2"))
A função DatePart retorna um valor Integer contendo 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 porque há vários conjuntos de dados no relatório.
=Datepart("yyyy", First(Fields!SellStartDate.Value, "DataSet1"))
A função DateSerial retorna um valor Date que representa um ano, mês e dia especificado, com as informações de hora 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.
Exemplo de descrição | Exemplo |
---|---|
Ontem | =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-1) |
Há dois dias | =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-2) |
Há um mês | =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-1,Day(Parameters!TodaysDate.Value)) |
Há dois meses | =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-2,Day(Parameters!TodaysDate.Value)) |
Há um ano | =DateSerial(Year(Parameters!TodaysDate.Value)-1,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)) |
Há dois anos | =DateSerial(Year(Parameters!TodaysDate.Value)-2,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)) |
Funções de cadeia
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 Formatar . A expressão a seguir exibe valores dos parâmetros StartDate e EndDate no formato de data longa:
=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 substring, por exemplo, cortando o nome de usuário DOMAIN\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 chamado User:
=Right(Parameters!User.Value, Len(Parameters!User.Value) - InStr(Parameters!User.Value, "\"))
A expressão a seguir resulta no mesmo valor que a anterior, usando membros da classe .NET Framework
xref:System.String
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 caracteres de texto antes da lista de valores selecionados.
="Report for " & JOIN(Parameters!MySelection.Value, " & ")
As funções Regex do .NET Framework
xref:System.Text.RegularExpressions
são úteis para alterar o formato de cadeias de caracteres existentes, por exemplo, formatar 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 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")
Nota
Verifique se o valor de Campos! Phone.Value não tem espaços extras e é do tipo
xref:System.String
.
Procura
Ao especificar um campo de chave, você pode usar a função Pesquisa para recuperar um valor de um conjunto de dados para uma relação um-para-um, por exemplo, um par chave-valor. A expressão a seguir exibe o nome do produto de um conjunto de dados ("Produto"), dado o identificador do produto para corresponder:
=Lookup(Fields!PID.Value, Fields!ProductID.Value, Fields.ProductName.Value, "Product")
LookupSet
Ao especificar um campo de chave, você pode usar a função LookupSet para recuperar um conjunto de valores de um conjunto de dados para uma relação um-para-muitos. Por exemplo, uma pessoa pode ter vários números de telefone. No exemplo a seguir, suponha que o conjunto de dados PhoneList contém um identificador de pessoa e um número de telefone em cada linha. LookupSet retorna uma matriz de valores. A expressão a seguir combina os valores de retorno em uma única cadeia de caracteres e exibe a lista de números de telefone para a pessoa especificada por ContactID:
=Join(LookupSet(Fields!ContactID.Value, Fields!PersonID.Value, Fields!PhoneNumber.Value, "PhoneList"),",")
Funções de conversão
Você pode usar funções do Visual Basic para converter um campo de um tipo de dados para um tipo de dados diferente. As funções de conversão podem ser usadas para converter o tipo de dados padrão de um campo para o tipo de dados necessário para cálculos ou para combinar texto.
A expressão a seguir converte a constante 500 para digitar Decimal para compará-la a um tipo de dados monetários 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 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 booleano de True se o valor de LineTotal exceder 100. Caso contrário, ele retorna False:
=IIF(Fields!LineTotal.Value > 100, True, False)
Use várias funções IIF (também conhecidas como "IIFs 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 do 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 fundo verde, entre 1 e 9 com um fundo azul e menos de 1 com um fundo vermelho.
Uma maneira diferente de obter a mesma funcionalidade usa a função Switch . A função Switch é útil quando há três ou mais condições para testar. A função Switch retorna o valor associado à primeira expressão de 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 exibem com um fundo verde, entre 1 e 9 exibem com um fundo azul, igual a 1 display com um fundo amarelo e 0 ou menos display com um fundo vermelho.
Teste o valor do campo ImportantDate e retorne "Red" se tiver mais de uma semana e "Blue" caso contrário. Esta expressão pode ser usada para controlar a propriedade Color 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 for nulo (Nothing no Visual Basic), caso contrário, retorne o valor do número de telefone. Essa 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 Departamento e retorne um nome de sub-relatório ou um nulo (Nothing no Visual Basic). Essa expressão pode ser usada para sub-relatórios de detalhamento condicional.
=IIF(Fields!Department.Value = "Development", "EmployeeReport", Nothing)
Teste se um valor de campo é nulo. Essa 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 somente se o valor do campo não for nulo.
=IIF(IsNothing(Fields!LargePhoto.Value),True,False)
A função MonthName retorna um valor de cadeia de caracteres contendo o nome do mês especificado. O exemplo a seguir exibe NA no campo Month quando o campo contém o valor 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 funções de relatório adicionais que manipulam dados em um relatório. Esta seção fornece exemplos para duas dessas funções.
Soma
A função Soma pode totalizar os valores em um grupo ou região de dados. Esta função pode ser útil no cabeçalho ou rodapé de um grupo. A expressão a seguir exibe a soma dos dados no grupo Ordem ou região de dados:
=Sum(Fields!LineTotal.Value, "Order")
Você também pode usar a função Soma para cálculos de agregação condicional. Por exemplo, se um conjunto de dados tiver um campo chamado Estado com valores possíveis Não Iniciado, Iniciado, Concluído, a expressão a seguir, quando colocada em um cabeçalho de grupo, calculará a soma agregada apenas para o valor Concluído:
=Sum(IIF(Fields!State.Value = "Finished", 1, 0))
Número da linha
A função RowNumber , quando usada em uma caixa de texto dentro de uma região de dados, exibe o número da linha para cada ocorrência da caixa de texto na qual a expressão aparece. Esta função pode ser útil para numerar linhas numa tabela. Também pode ser útil para tarefas mais complexas, como fornecer quebras de página com base no número de linhas. Para obter mais informações, consulte Quebras de página neste artigo.
O escopo especificado para controles RowNumber quando a renumeração começa. A palavra-chave Nothing indica que a função começará a contar na primeira linha na região de dados mais externa. Para começar a contar dentro de regiões de dados aninhadas, use o nome da região de dados. Para começar a contar dentro de um grupo, use o nome do grupo.
=RowNumber(Nothing)
Aparência dos dados do relatório
Você pode usar expressões para manipular como os dados aparecem em um relatório. Por exemplo, você pode exibir os valores de dois campos em uma única caixa de texto, exibir informações sobre o relatório ou afetar como as quebras de página são inseridas no relatório.
Cabeçalhos e rodapés de páginas
Ao criar um relatório, você pode exibir o nome do relatório e o número da página no rodapé do relatório. Para fazer isso, você pode usar as seguintes expressões:
A expressão a seguir fornece o nome do relatório e a hora em que ele foi executado. Ele pode ser colocado em uma caixa de texto no rodapé do relatório ou no corpo do relatório. A hora é formatada com a cadeia de formatação do .NET Framework para data curta:
=Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")
A expressão a seguir, colocada em uma caixa de texto no rodapé de um relatório, fornece o número de página e o total de páginas no relatório:
=Globals.PageNumber & " of " & Globals.TotalPages
Os exemplos a seguir descrevem como exibir o primeiro e o último 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 chamada 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 Sobrenome 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 Sobrenome na página:
=Last(ReportItems("LastName").Value)
O exemplo a seguir descreve como exibir um total de página. O exemplo pressupõe uma região de dados que contém uma caixa de texto chamada Cost.
A expressão a seguir, colocada no cabeçalho ou rodapé da página, fornece a soma dos valores na caixa de texto Custo da página:
=Sum(ReportItems("Cost").Value)
Nota
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, você pode se referir ao nome da caixa de texto, mas não à expressão de dados real dentro da caixa de texto, em expressões de cabeçalho e rodapé de página.
Quebras de página
Em alguns relatórios, você pode colocar uma quebra de página no final de um número especificado de linhas em vez de, ou além de, em grupos ou itens de relatório. Crie um grupo que contenha os grupos ou registos de detalhe que pretende, 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 a 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 expressão a seguir:
=Ceiling(RowNumber(Nothing)/Parameters!RowsPerPage.Value)
Propriedades
As expressões não são usadas apenas para exibir dados em caixas de texto. Eles também podem ser usados para alterar como as propriedades são aplicadas aos itens de relatório. Você pode alterar as informações de estilo de 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 Lucro :
=Iif(Fields!Profit.Value < 0, "Red", "Black")
Você também pode usar a variável de objeto do Visual Basic Me. Esta variável é outra forma de se referir ao valor de uma caixa de texto.
=Iif(Me.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 do plano de fundo de cada linha entre verde pálido e branco:
=Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")
Se você usar uma expressão para um escopo especificado, talvez seja necessário indicar o conjunto de dados para a função de agregação:
=Iif(RowNumber("Employees") Mod 2, "PaleGreen", "White")
Nota
As cores disponíveis vêm da enumeração KnownColor do .NET Framework.
Cores do gráfico
Para especificar cores para um gráfico de Formas, você pode usar código personalizado para controlar a ordem em que as cores são mapeadas para valores de pontos de dados. Isso ajuda você a usar cores consistentes para vários gráficos que têm os mesmos grupos de categorias.
Visibility
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, você pode inicialmente ocultar 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 para todas as vendas superiores a 90% no campo PctQuota :
=IIF(Fields!PctQuota.Value>.9, False, True)
A expressão a seguir, quando definida na propriedade Hidden de uma tabela, mostra a tabela somente se ela tiver mais de 12 linhas:
=IIF(CountRows()>12,false,true)
A expressão a seguir, quando definida na propriedade Hidden de uma coluna, mostra a coluna somente se o campo existir no conjunto de dados do relatório depois que os dados forem recuperados da fonte de dados:
=IIF(Fields!Column_1.IsMissing, true, false)
URLs
Você pode personalizar URLs usando dados de 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 de URL.
="https://adventure-works/MyInfo?ID=" & Fields!EmployeeID.Value
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 que um usuário decida se deseja incluir URLs ativas em um relatório. Esta expressão é definida como uma ação em uma caixa de texto. Definindo o parâmetro como False e, em seguida, exibindo o relatório, você pode exportar o relatório para o Microsoft Excel sem hiperlinks.
=IIF(Parameters!IncludeURLs.Value,"https://adventure-works.com/productcatalog",Nothing)
Nota
Os relatórios paginados do Power BI não suportam o uso de JavaScript em uma expressão de URL Ir para.
Dados do relatório
As expressões podem ser usadas para manipular os dados usados no relatório. Você pode consultar parâmetros e outras informações de relatório. Você pode até mesmo alterar a consulta usada para recuperar dados para o relatório.
Parâmetros
Você pode usar expressões em um parâmetro para variar o valor padrão para o parâmetro. Por exemplo, você pode usar um parâmetro para filtrar dados para um usuário específico com base no ID de usuário usado para executar o relatório.
A expressão a seguir, quando usada como o valor padrão para um parâmetro, coleta o ID do usuário da pessoa que executa o relatório:
=User!UserID
Para fazer referência a 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 Parameters . Este exemplo pressupõe que o parâmetro é chamado Department:
=Parameters!Department.Value
Os 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 aparece na barra de ferramentas e o leitor de relatório não pode alterar o valor padrão. Você pode usar um parâmetro oculto definido como um valor padrão, uma constante personalizada. Você pode 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 chamado ParameterField:
=Fields(Parameters!ParameterField.Value).Value
Código personalizado
Você pode usar código personalizado incorporado em um relatório.
Usando variáveis de grupo para agregação personalizada
Você pode inicializar o valor de uma variável de grupo que é local para um escopo de grupo específico e, em seguida, incluir uma referência a essa variável em expressões. Uma das maneiras de usar uma variável de grupo com código personalizado é implementar uma agregação personalizada.
Supressão de valores nulos ou nulos em tempo de execução
Alguns valores em uma expressão podem ser avaliados como nulos ou indefinidos no momento do processamento do relatório. Isso pode criar erros em tempo de execução que resultam na exibição de #Error 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 testa true ou false. A instrução =IIF(Fields!Sales.Value is NOTHING, 0, Fields!Sales.Value)
gera #Error no relatório renderizado se Fields! Sales.Value é NADA.
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 para o valor do campo A e o denominador para 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 percentual entre um valor atual e um valor anterior. Isso pode ser usado para calcular a diferença entre quaisquer dois valores sucessivos e lida com o caso de borda da primeira comparação (quando não há nenhum valor anterior) e casos em que o valor anterior ou o valor atual é nulo (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 (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 exibir condicionalmente o texto com base no fato de os valores serem maiores ou menores que 0.