Trabajar con tipos de datos en expresiones (Reporting Services)

La finalidad de los tipos de datos es permitir el almacenamiento y el procesamiento de los datos de manera eficaz. Los tipos de datos más comunes incluyen texto (también conocido como cadenas), números (con y sin decimales), fechas y horas, e imágenes. Es posible almacenar los datos como un tipo de datos para aumentar la eficacia y, a la hora de mostrarlos en el informe, asignarles un formato de acuerdo con sus preferencias. Por ejemplo, un campo que representa valores de moneda puede almacenarse como un número de punto flotante y mostrarse en uno y otro formato en función de la propiedad de formato elegida. Para obtener más información acerca de formatos de visualización, vea Aplicar formato a informes y elementos de informe.

Es importante conocer los tipos de datos para poder escribir expresiones que comparen o combinen valores, por ejemplo, para definir expresiones de grupo o de filtro, o calcular agregados. Las comparaciones y los cálculos solo son válidos entre elementos del mismo tipo de datos. Si los tipos de datos no coinciden, deberá convertir de manera explícita el tipo de datos del elemento de informe mediante una expresión. En la lista siguiente, se describen los casos en los que puede ser necesario convertir los datos en un tipo de datos diferente:

  • Comparar el valor de un parámetro de informe de un tipo de datos con un campo de conjunto de datos de un tipo de datos diferente.

  • Escribir expresiones de filtro que comparen valores de tipos de datos diferentes.

  • Escribir expresiones de ordenación que combinen campos de tipos de datos diferentes.

  • Escribir expresiones de grupo que combinen campos de tipos de datos diferentes.

  • Convertir el tipo de datos de un valor recuperado del origen de datos en un tipo de datos diferente.

Determinar el tipo de datos de los datos de informe

Para determinar el tipo de datos de un elemento de informe, puede escribir una expresión que devuelva su tipo de datos. Por ejemplo, para mostrar el tipo de datos del campo MyField, agregue la expresión siguiente a una celda de la tabla: =Fields!MyField.Value.GetDataType().ToString(). El resultado muestra el tipo de datos CLR usado para representar MyField; por ejemplo, System.String o System.DateTime.

Convertir campos de conjunto de datos en un tipo de datos diferente

También puede convertir campos de conjunto de datos antes de usarlos en un informe. En la lista siguiente, se describen las maneras de convertir un campo de conjunto de datos existente:

  • Modifique la consulta de conjunto de datos para agregar un nuevo campo de consulta con los datos convertidos. Si se trata de orígenes de datos relacionales o multidimensionales, se usan recursos de origen de datos para realizar la conversión.
  1. Cree un campo calculado basado en un campo de conjunto de datos de informe existente; para ello, escriba una expresión que convierta todos los datos de una columna de conjunto de resultados en una nueva columna con un tipo de datos diferente. Por ejemplo, la expresión siguiente convierte el valor entero del campo Year en un valor de cadena: =CStr(Fields!Year.Value). =CStr(Fields!Year.Value). Para obtener más información, vea Cómo agregar, editar o eliminar un campo en el panel Datos de informe.
  • Compruebe si la extensión de procesamiento de datos que está usando incluye metadatos para recuperar datos que ya tienen asignado un formato. Por ejemplo, una consulta MDX de SQL ServerAnalysis Services incluye la propiedad extendida FORMATTED_VALUE para los valores de cubo a los que se dio formato al procesar el cubo. Para obtener más información, vea Usar propiedades de campo extendidas para un conjunto de datos de Analysis Services.

Descripción de los tipos de datos de los parámetros

Los parámetros de informe deben pertenecer a uno de estos cinco tipos de datos: Boolean, DateTime, Integer, Float o Text (también conocido como String). Si la consulta de conjunto de datos incluye parámetros de consulta, automáticamente se crean parámetros de informe que se vinculan a dichos parámetros de consulta. El tipo de datos predeterminado para un parámetro de informe es String. Para cambiar el tipo de datos predeterminado de un parámetro de informe, seleccione el valor adecuado en la lista desplegable Tipo de datos de la página General del cuadro de diálogo Propiedades de parámetro de informe.

[!NOTA]

Los parámetros de informe cuyo tipo de datos es DateTime no admiten milisegundos. Aunque sí puede crear un parámetro basado en valores que incluyen milisegundos, no puede seleccionar un valor con milisegundos en una lista desplegable de valores disponibles que contiene valores de fecha o de hora.

Escribir expresiones que convierten tipos de datos o que extraen partes de datos

Cuando se combina texto y campos de conjunto de datos con el operador de concatenación (&), el lenguaje CLR (Common Language Runtime) suele proporcionar los formatos predeterminados. Si necesita convertir de manera explícita el tipo de datos de un campo de conjunto de datos o de un parámetro en un tipo de datos concreto, deberá usar un método CLR o una función de biblioteca en tiempo de ejecución de Visual Basic.

En la tabla siguiente, se muestran ejemplos de conversión de tipos de datos.

Tipo de conversión

Ejemplo

DateTime a String

=CStr(Fields!Date.Value)

String a DateTime

=DateTime.Parse(Fields!DateTimeinStringFormat.Value)

String a DateTimeOffset

=DateTimeOffset.Parse(Fields!DateTimeOffsetinStringFormat.Value)

Extraer la parte Year

=Year(Fields!TimeinStringFormat.Value)

-- or --

=Year(Fields!TimeinDateTimeFormat.Value)

Boolean a Integer

=CInt(Parameters!BooleanField.Value)

-1 es True y 0 es False.

Boolean a Integer

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

1 es True y 0 es False.

Solo la parte DateTime de un valor DateTimeOffset

=Fields!MyDatetimeOffset.Value.DateTime

Solo la parte Offset de un valor DateTimeOffset

=Fields!MyDatetimeOffset.Value.Offset

También puede usar la función de formato para controlar el formato de visualización del valor. Para obtener más información, vea Funciones (Visual Basic).

Ejemplos avanzados

Cuando se establece conexión con un origen de datos cuyo proveedor de datos no permite convertir todos los tipos de datos existentes en dicho origen de datos, el tipo de datos predeterminado para los tipos de datos no compatibles es String. En los ejemplos siguientes, se ofrecen soluciones para tipos de datos concretos que se devuelven como String.

Concatenar un tipo de datos String y un tipo de datos CLR DateTimeOffset

Para la mayoría de los tipos de datos, el lenguaje CLR proporciona conversiones predeterminadas que permiten concatenar valores de tipos de datos diferentes en una cadena con el operador &. Por ejemplo, la expresión siguiente concatena el texto "The date and time are: " con un campo de conjunto de datos StartDate, que es un valor System..::..DateTime: ="The date and time are: " & Fields!StartDate.Value.

Para algunos tipos de datos, puede ser necesario incluir la función ToString. Por ejemplo, la expresión siguiente muestra el mismo ejemplo con el tipo de datos CLR System..::..DateTimeOffset, que incluye la fecha, la hora y un ajuste de zona horaria en relación con la zona UTC: ="The time is: " & Fields!StartDate.Value.ToString().

Convertir un tipo de datos String en un tipo de datos CLR DateTime

Si una extensión de procesamiento de datos no admite todos los tipos de datos definidos en un origen de datos, los datos se pueden recuperar como texto. Por ejemplo, un valor del tipo de datos datetimeoffset(7) se puede recuperar como un tipo de datos String. En Perth, Australia, el valor de cadena para la fecha 1 de julio de 2008, a las 6:05:07,9999999 a.m. sería algo parecido a:

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

En este ejemplo, se muestra la fecha (1 de julio de 2008) seguida de la hora con una precisión de 7 dígitos (6:05:07,9999999 a.m.) y de un ajuste de zona horaria UTC en horas y minutos (más 8 horas, 0 minutos). Para los ejemplos siguientes, este valor se ha situado en un campo con el tipo de datos String denominado MyDateTime.Value.

Puede usar una de las estrategias siguientes para convertir estos datos en uno o más valores CLR:

  • En un cuadro de texto, use una expresión para extraer partes de la cadena. Por ejemplo:

    • La expresión siguiente extrae sólo la parte de la hora del ajuste de zona horaria UTC y la convierte en minutos: =CInt(Fields!MyDateTime.Value.Substring(Fields!MyDateTime.Value.Length-5,2)) * 60

      El resultado es 480.

    • La expresión siguiente convierte la cadena en un valor de fecha y hora: =DateTime.Parse(Fields!MyDateTime.Value)

      Si la cadena MyDateTime.Value tiene un ajuste UTC, la función DateTime.Parse primero ajusta de acuerdo con el ajuste UTC (7 a.m. - [+08:00] a la hora UTC de las 11 p.m. de la noche anterior). A continuación, la función DateTime.Parse aplica el ajuste UTC del servidor de informes local y, si fuera necesario, vuelve a ajustar la hora para adaptarla al horario de verano. Por ejemplo, en Redmond, Washington, el ajuste de la hora local adaptado al horario de verano es [-07:00] o 7 horas antes de las 11 p.m. El resultado es el valor DateTime siguiente: 2007-07-06 04:07:07 PM (6 de julio de 2007 a las 4:07 p.m).

      Para obtener más información sobre cómo convertir cadenas en tipos de datos DateTime, vea Analizar cadenas de fecha y hora y Aplicar formato de fecha y hora para una referencia cultural específica en MSDN.

  • Agregue un nuevo campo calculado al conjunto de datos de informe que use una expresión para extraer partes de la cadena. Para obtener más información, vea Cómo agregar, editar o eliminar un campo en el panel Datos de informe.

  • Cambie la consulta de conjunto de datos de informe para usar funciones de Transact-SQL que extraigan valores de fecha y hora de forma independiente para crear columnas independientes. En el ejemplo siguiente, se muestra cómo usar la función DatePart para agregar una columna para el año y una columna para la zona horaria UTC convertida en minutos:

    SELECT

    MyDateTime,

    DATEPART(year, MyDateTime) AS Year,

    DATEPART(tz, MyDateTime) AS OffsetinMinutes

    FROM MyDates

    El conjunto de resultados tiene tres columnas. La primera columna es la fecha y la hora, la segunda columna es el año y la tercera columna es el ajuste UTC en minutos. En la fila siguiente se muestran datos de ejemplo:

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

Para obtener más información acerca de los tipos de bases de datos de SQL Server, vea Tipos de datos (motor de base de datos) y Tipos de datos y funciones de fecha y hora (Transact-SQL).