Compartilhar via


Trabalhando com tipos de dados em expressões (Reporting Services)

Os tipos de dados representam tipos diferentes de dados de forma que eles possam ser armazenados e processados com eficiência. Tipos de dados comuns incluem texto (também conhecido como cadeias de caracteres) com e sem casas decimais, datas e horas e imagens. Os dados podem ser armazenados usando um tipo de dados para eficiência, mas formatados de acordo com a sua preferência quando os dados são exibidos no relatório. Por exemplo, um campo que representa moeda pode ser armazenado como um número de ponto flutuante, mas pode ser exibido em uma variedade de formatos, dependendo da propriedade de formato escolhida. Para obter mais informações sobre formatos de exibição, consulte Formatando relatórios e itens de relatório.

É importante entender os tipos de dados quando você grava expressões para comparar ou combinar valores; por exemplo, quando você define expressões de grupo ou filtro ou calcular agregações. As comparações e os cálculos são válidos somente entre itens do mesmo tipo de dados. Se os tipos de dados não coincidirem, você deverá converter explicitamente o tipo de dados no item de relatório usando uma expressão. A lista a seguir descreve os casos quando você precisa converter os dados em um tipo de dados diferente:

  • Comparando o valor de um parâmetro de relatório de um tipo de dados a um campo de conjunto de dados de um tipo de dados diferente.

  • Escrevendo expressões de filtro que compõem valores de tipos de dados diferentes.

  • Escrevendo expressões de classificação que combinam campos de tipos de dados diferentes.

  • Escrevendo expressões de grupo que combinam campos de tipos de dados diferentes.

  • Convertendo um valor recuperado da fonte de dados de um tipo de dados para um tipo de dados diferente.

Determinando o tipo de dados dos dados do relatório

Para determinar o tipo de dados de um item de relatório, você pode gravar uma expressão que retorne seu tipo de dados. Por exemplo, para mostrar o tipo de dados para o campo MyField, adicione a seguinte expressão a uma célula de tabela: =Fields!MyField.Value.GetDataType().ToString(). O resultado exibe o tipo de dados CLR usado para representar MyField, por exemplo, System.String ou System.DateTime.

Convertendo campos de conjunto de dados em um tipo de dados diferente

Você também pode converter os campos de conjunto de dados antes de usá-los em um relatório. A lista a seguir descreve as maneiras que você pode converter um campo de conjunto de dados existente:

  • Modifique a consulta do conjunto de dados para adicionar um novo campo de consulta com os dados convertidos. Para as fontes de dados relacionais ou multidimensionais, isso usa os recursos de origem de dados para executar a conversão.
  1. Crie um campo calculado com base em um campo de conjunto de dados de relatório existente, escrevendo uma expressão que converta todos os dados em uma coluna de conjunto de resultados em uma nova coluna com um tipo de dados diferente. Por exemplo, a expressão seguir converte o campo Ano de um valor inteiro para um valor de cadeia: =CStr(Fields!Year.Value). =CStr(Fields!Year.Value). Para obter mais informações, consulte Como adicionar, editar ou excluir um campo no painel Dados do Relatório.
  • Verifique se a extensão de processamento de dados que você está usando inclui metadados para recuperar dados pré-formatados. Por exemplo, uma consulta MDX SQL ServerAnalysis Services inclui a propriedade estendida FORMATTED_VALUE para valores de cubo que já foram formatados ao processar o cubo. Para obter mais informações, consulte Usando propriedades de campo estendidas para um conjunto de dados do Analysis Services.

Entendendo os tipos de dados de parâmetro

Os parâmetros de relatório devem ser um dos cinco tipos de dados: Boolean, DateTime, Integer, Float ou Text (também conhecido como String). Quando sua consulta de conjunto de dados inclui parâmetros de consulta, os parâmetros de relatório são criados automaticamente e vinculados a parâmetros de consulta. O tipo de dados padrão para um parâmetro de relatório é String. Para alterar o tipo de dados padrão de um parâmetro de relatório, selecione o valor correto da lista suspensa Tipo de dados na página Geral da caixa de diálogo Propriedades do Parâmetro de Relatórios.

ObservaçãoObservação

Os parâmetros de relatório que são tipos de dados DateTime não oferecem suporte a milissegundos. Embora você possa criar um parâmetro com base em valores que incluem milissegundos, você não pode selecionar um valor a partir de uma lista suspensa de valores disponíveis que inclui valores de Data e Hora que incluem milissegundos.

Escrevendo expressões que convertem tipos de dados ou extraem partes de dados

Quando você combina campos de texto e conjunto de dados usando o operador de concatenação (&), o CLR (Common Language Runtime) geralmente fornece os formatos padrão. Quando você precisa converter explicitamente um parâmetro ou campo de conjunto de dados em um tipo de dados específico, você deve usar um método CLR ou uma função de biblioteca em tempo de execução do Visual Basic para converter os dados.

A tabela a seguir mostra exemplos de conversão de tipos de dados.

Tipo de conversão

Exemplo

DateTime para String

=CStr(Fields!Date.Value)

String para DateTime

=DateTime.Parse(Fields!DateTimeinStringFormat.Value)

String para DateTimeOffset

=DateTimeOffset.Parse(Fields!DateTimeOffsetinStringFormat.Value)

Extraindo o ano

=Year(Fields!TimeinStringFormat.Value)

-- or --

=Year(Fields!TimeinDateTimeFormat.Value)

Booleano para Integer

=CInt(Parameters!BooleanField.Value)

-1 é verdadeiro e 0 é falso.

Booleano para Integer

=System.Convert.ToInt32(Fields!BooleanFormat.Value)

1 é verdadeiro e 0 é falso.

Apenas a parte DateTime do valor DateTimeOffset

=Fields!MyDatetimeOffset.Value.DateTime

Apenas a parte Offset do valor DateTimeOffset

=Fields!MyDatetimeOffset.Value.Offset

Você também pode usar a função Formatar para controlar o formato de exibição do valor. Para obter mais informações, consulte Functions (Visual Basic).

Exemplos avançados

Quando você converte em uma fonte de dados com um provedor de dados que não fornece suporte à conversão para todos os tipos de dados na fonte de dados, o tipo de dados padrão para tipos de dados não suportados é String. Os exemplos a seguir fornecem soluções para tipos de dados específicos retornados como uma cadeia.

Concatenando um tipo de dados String e um DateTimeOffset CLR

Para a maioria dos tipos de dados, o CLR fornece conversões padrão para que você possa concatenar valores que são de tipos de dados diferentes em uma cadeia, usando o operador &. Por exemplo, a expressão a seguir concatena o texto "A data e hora são:" com um campo de conjunto de dados StartDate, que é um valor System..::..DateTime: ="The date and time are: " & Fields!StartDate.Value.

Para alguns tipos de dados, talvez você precise incluir a função ToString. Por exemplo, a expressão a seguir mostra o mesmo exemplo usando o tipo de dados CLR System..::..DateTimeOffset, que inclui a data, a hora e o deslocamento de fuso horário relativo ao fuso horário UTC: ="The time is: " & Fields!StartDate.Value.ToString().

Convertendo um tipo de dados String em um tipo de dados DateTime CLR

Se uma extensão de processamento de dados não oferecer suporte a todos os tipos de dados definidos em uma fonte de dados, os dados poderão ser recuperados como texto. Por exemplo, um valor de tipo de dados datetimeoffset(7) pode ser recuperado como um tipo de dados String. Em Perth, Austrália, o valor da cadeia para 1º de julho de 2008, às 6:05:07.9999999 AM seria semelhante a:

2008-07-01 06:05:07.9999999 +08:00

Este exemplo mostra a data (1º de julho de 2008), seguida pela hora com uma precisão de 7 dígitos (6:05:07.9999999 AM), seguida pelo deslocamento de fuso horário UTC em horas e minutos (mais 8 horas, 0 minutos). Para os exemplos a seguir, este valor foi colocado em um campo String chamado MyDateTime.Value.

Você pode usar uma das seguintes estratégias para converter esses dados para um ou mais valores CLR:

  • Em uma caixa de texto, use uma expressão para extrair partes da cadeia. Por exemplo:

    • A expressão a seguir extrai apenas a parte da hora do deslocamento de fuso horário UTC e converte-a em minutos: =CInt(Fields!MyDateTime.Value.Substring(Fields!MyDateTime.Value.Length-5,2)) * 60

      O resultado é 480.

    • A expressão a seguir converte a cadeia em um valor de data e hora: =DateTime.Parse(Fields!MyDateTime.Value)

      Se a cadeia MyDateTime.Value tiver um deslocamento UTC, a função DateTime.Parse primeiro se ajustará para o deslocamento UTC (7 AM - [+08:00] para a hora UTC de 11 PM da noite anterior). A função DateTime.Parse então aplicará o deslocamento UTC do servidor de relatórios local e, se necessário, ajustará a hora novamente para o Horário de Verão. Por exemplo, em Redmond, Washington, o deslocamento de horário local ajustado para o Horário de Verão é [-07:00] ou 7 horas antes de 11 PM. O resultado é o seguinte valor DateTime: 2007-07-06 04:07:07 PM (6 de julho de 2007 às 4:07 PM).

      Para obter mais informações sobre a conversão de cadeias tem tipos de dados DateTime, consulte Analisando cadeias de data e hora e Formatando data e hora para uma cultura específica no MSDN.

  • Adicione um novo campo calculado ao conjunto de dados de relatório que use uma expressão para extrair partes da cadeia. Para obter mais informações, consulte Como adicionar, editar ou excluir um campo no painel Dados do Relatório.

  • Altere a consulta do conjunto de dados do relatório para usar as funções Transact-SQL para extrair os valores de data e hora independentemente para criar colunas separadas. O exemplo a seguir mostra como usar a função DatePart para adicionar uma coluna para o ano e um coluna para o fuso horário UTC convertido em minutos:

    SELECT

    MyDateTime,

    DATEPART(year, MyDateTime) AS Year,

    DATEPART(tz, MyDateTime) AS OffsetinMinutes

    FROM MyDates

    O conjunto de resultados tem três colunas. A primeira coluna é a data e hora, a segunda coluna é o ano e a terceira é o deslocamento UTC em minutos. A linha a seguir mostra os dados de exemplo:

    2008-07-01 06:05:07 2008 480

Para obter mais informações sobre os tipos de bancos de dados SQL Server, consulte Tipos de dados (Mecanismo de Banco de Dados) e tipos de dados e funções de data e hora (Transact-SQL).