Usar colecciones globales en expresiones (Reporting Services)

Actualizado: 14 de abril de 2006

Reporting Services ofrece las siguientes colecciones globales a las que se puede hacer referencia en las expresiones: DataSources, DataSets, Fields, Globals, Parameters, ReportItems y User. Si desea hacer referencia a una colección en una expresión, puede utilizar la sintaxis estándar de Visual Basic para los elementos de una colección. La lista siguiente proporciona ejemplos de esta sintaxis:

  • Collection!ObjectName.Property O bien: Collection!ObjectName("Property")
    =Fields!Sales.Value
    =Fields!Sales("Value")
  • Collection("ObjectName").Property
    =Fields("Sales").Value
  • Collection("Member")
    =User("Language")
  • Collection.Member
    =User.Language

Resumen de colecciones globales

La tabla siguiente describe cada colección global e indica cuándo puede hacer referencia a la colección desde una expresión. Cada una de las colecciones se trata por separado más adelante en esta sección.

Colección global Ejemplo Descripción

Fields

=Fields!Sales.Value

Representa la colección de campos del conjunto de datos que están disponibles para el informe. Está disponible una vez que los datos se han recuperado desde un origen de datos en un conjunto de datos.

ReportItems

=ReportItems("Textbox1").Value

Representa la colección de cuadros de texto para el elemento de informe, como los cuadros de texto incluidos en una región de datos de tabla, un encabezado o un pie de página. Disponible durante el procesamiento de informes.

Globals

=Globals.ReportName

Representa variables globales útiles para los informes, como el nombre del informe o el número de página. Siempre está disponible.

Parameters

=Parameters("ReportMonth").Value

O bien

=Parameters!ReportYear.Value

Representa la colección de parámetros de informe. Cada uno de ellos puede tener uno o varios valores. No está disponible hasta que la inicialización se ha completado. Cuando cree parámetros de consulta, se agregarán automáticamente a la colección de parámetros de informe.

User

=User.UserID

O bien

User.Language

Representa una colección de datos acerca del usuario que ejecuta el informe, como la configuración de idioma o el Id. de usuario. Siempre está disponible. User!UserID se utiliza a menudo para filtrar resultados de los informes.

DataSources

=DataSources("AdventureWorks").Type

Representa la colección de orígenes de datos a los que se hace referencia en el cuerpo de un informe. No incluye los orígenes de datos que sólo se utilizan en encabezados o pies de página. No está disponible en el modo de vista previa local.

DataSets

=DataSets("TopEmployees").CommandText

Representa la colección de conjuntos de datos a los que se hace referencia desde el cuerpo de una definición de informe. No incluye los orígenes de datos que sólo se utilizan en encabezados o pies de página. No está disponible en el modo de vista previa local.

Los miembros de las colecciones Globals y Users devuelven datos Variant. Si desea utilizar una variable global en una expresión que requiera un tipo de datos específico, primero deberá convertir la variable. Por ejemplo, para convertir la variante de tiempo de ejecución a formato de fecha, utilice CDate(Globals!ExecutionTime). Para obtener más ejemplos, vea Ejemplos de expresiones en Reporting Services.

Fields

Cada conjunto de datos de un informe contiene una colección Fields. Ésta es la colección de campos que aparece al expandir un nodo de conjunto de datos en la ventana Conjuntos de datos. La colección Fields se suele utilizar para mostrar datos en los cuadros de texto de un informe, pero también se puede emplear en otros elementos, propiedades y funciones de informe. Los nombres de los campos deben ser únicos en la colección, pero un mismo nombre de campo puede existir en otras colecciones.

Algunas extensiones de procesamiento de datos determinan automáticamente la colección de campos a partir de la consulta que se define para un conjunto de datos. Cuando se hace clic en el botón Actualizar campos de la barra de herramientas, los cambios se guardan en la definición del informe y la ventana Conjuntos de datos se actualiza para mostrar esos cambios. Para editar las definiciones de los campos, en la vista Datos del Diseñador de informes, seleccione el conjunto de datos para abrir el cuadro de diálogo Conjunto de datos y haga clic en la ficha Campos. Si desea agregar un campo calculado, haga clic con el botón secundario en el conjunto de datos en la ventana Conjuntos de datos para abrir el cuadro de diálogo Agregar nuevo campo y escriba un nombre. A continuación, haga clic en Campo calculado y escriba la expresión.

Durante el procesamiento del informe, dado que cada elemento de informe se procesa aparte, la colección Fields asociada al elemento de informe actual se enlaza al origen de datos subyacente. Los datos devueltos para un campo específico pueden ser un único valor o un valor para cada fila del conjunto de datos mientras se procesa el informe. El tipo del elemento de informe que contiene la referencia al campo es lo que determina si se obtiene un solo valor o varios valores. Las referencias desde una región de datos (tabla, matriz, lista o gráfico) devuelven un valor para cada fila del conjunto de datos. Las referencias que no forman parte de una región de datos devuelven un solo valor.

Cuando se utiliza una función de agregado para procesar la colección de campos en un conjunto de datos, se incluye un parámetro scope que especifica el conjunto de datos. Para comprobar la asociación entre un elemento de informe y un conjunto de datos, seleccione el elemento de informe y vea sus propiedades. Para obtener más información acerca de las funciones de informe y el parámetro de ámbito (Scope), vea Usar funciones de informe en expresiones (Reporting Services).

De manera predeterminada, los elementos de la colección Fields tienen dos propiedades: Value e IsMissing. Cuando se arrastra un campo desde la ventana Conjuntos de datos hasta un elemento de informe en el diseño de informe, el contenido del elemento de informe se establece en la propiedad Value del campo de manera predeterminada. Para una región de datos, el valor de cada fila del conjunto de datos se establece en =Fields!FieldName.Value. El contenido de un elemento de informe que no es una región de datos se establece en un único valor, como =First(Fields!FieldName.Value).

La propiedad IsMissing indica si un campo que se ha definido para un conjunto de datos se encuentra en los campos recuperados del origen de datos. Este campo se puede comprobar en una expresión de campo en Visual Basic. La propiedad Value para los campos que faltan es Null (Nothing en Visual Basic). El ejemplo siguiente, si se coloca en el cuadro de texto del elemento de informe en el que se desean mostrar los datos de campo, muestra cómo comprobar si falta un campo:

=IIF(Fields!FieldName.IsMissing, "Field was not returned by query", Fields!FieldName.Value))

Dado que la función IIF de Visual Basic evalúa todos los elementos de una instrucción antes de devolver ningún resultado, las referencias a un campo que no se encuentra pueden provocar errores de procesamiento. En el ejemplo siguiente se muestra cómo se pueden realizar llamadas a funciones de Visual Basic que hagan referencia a un campo que quizás no se encuentre:

=IIF(Sum(Fields!FieldName.Value) IS NOTHING, 0, Sum(Fields!FieldName.Value))

Cuando se utiliza el editor de expresiones para crear una expresión que hace referencia a un campo, se puede seleccionar la colección Fields en el primer panel y ver la lista de campos disponibles en el último panel. En la siguiente ilustración se muestra el campo FirstName para un conjunto de datos denominado Employees.

Cuadro de diálogo Editar expresión con Intellisense

Observe la lista de propiedades disponibles en la ventana de IntelliSense. En la lista se incluyen las propiedades predeterminadas Value e IsMissing. Las demás son propiedades de campo extendidas predefinidas que admiten otras extensiones de procesamiento de datos.

Propiedades de campo extendidas

Las propiedades de campo extendidas son propiedades adicionales que la extensión de procesamiento de datos define en un campo. Un subconjunto de las propiedades de campo extendidas están predefinidas. Las propiedades predefinidas son propiedades de campo comúnmente utilizadas. El campo Key y el campo UniqueName son ejemplos típicos. Estas propiedades predefinidas aparecen en la lista de IntelliSense y se puede hacer referencia a ellas utilizando la sintaxis de colección Fields!FieldName.Property. Una extensión de procesamiento de datos puede sacar partido de las propiedades predefinidas optimizando consultas que incluyan esta sintaxis.

También se puede hacer referencia a otras propiedades de campo extendidas admitidas por una extensión de procesamiento de datos específica. Estas propiedades no aparecen en la ventana Expresiones, pero se pueden determinar explorando un origen de datos a través de una extensión de procesamiento de datos registrada y el diseñador de consultas asociado. Se puede hacer referencia a cualquier propiedad de campo extendida mediante la sintaxis de colección Fields!FieldName("Property").

Si un proveedor de datos no admite propiedades de campo extendidas o si no se encuentra el campo al ejecutar la consulta, el valor de la propiedad será null (Nothing en Visual Basic) para las propiedades de tipo String y Object, y cero (0) para las propiedades de tipo Integer.

Si una extensión de datos incluye propiedades de campo personalizadas, estarán visibles en la lista desplegable del Editor de expresiones para todos los campos del conjunto de datos, independientemente de si un campo admite o no esa propiedad. Si agrega una referencia a una propiedad no admitida para ese campo, la referencia se evalúa como null (Nothing en Visual Basic). Para obtener ejemplos de proveedores que admiten propiedades de campo extendidas, vea Definir conjuntos de datos para datos multidimensionales y de predicción de minería de datos de Analysis Services y Definir conjuntos de datos de informe para datos multidimensionales desde un sistema SAP NetWeaver BI.

Globals

La colección Globals contiene las variables globales del informe. En la siguiente tabla, se describen los miembros de la colección Globals.

Miembro Tipo Descripción

ExecutionTime

DateTime

Fecha y hora a la que se empezó a ejecutar el informe.

PageNumber

Integer

Número de la página actual. Sólo puede usarse en el encabezado y pie de página.

ReportFolder

String

Ruta de acceso completa a la carpeta en la que se halla el informe. No incluye la dirección URL del servidor de informes.

ReportName

String

Nombre del informe tal como se almacena en la base de datos del servidor de informes.

ReportServerUrl

String

Dirección URL del servidor de informes en el que se ejecuta el informe.

TotalPages

Integer

Número total de páginas del informe. Sólo puede usarse en el encabezado y pie de página.

A continuación figuran algunos ejemplos de variables globales:

  • Esta expresión, ubicada en un cuadro de texto en el pie de página de un informe, devuelve el número de página y el total de páginas del informe.
    =Globals.PageNumber & " of " & Globals.TotalPages
  • Esta expresión devuelve el nombre del informe y la hora a la que se ejecutó. La hora se presenta con la cadena de formato de Microsoft .NET Framework para fechas cortas:
    =Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")

Parameters

La colección Parameters contiene los objetos de parámetros de informe incluidos en el informe. Los parámetros pueden transferirse a consultas y utilizarse en filtros o en otras funciones que alteran la apariencia y el contenido del informe en función del parámetro usado. Cuando defina parámetros de consulta, se agregarán automáticamente a la colección de parámetros de informe. En la tabla siguiente se describen las propiedades definidas en un Parameter: Count, IsMultiValue, Value y Label.

Propiedad Descripción

Count

Entero que especifica el número de parámetros de la colección.

IsMultiValue

Valor booleano que indica que este parámetro tiene un conjunto de valores.

Value

Valor del parámetro. Para un parámetro de varios valores, Value devuelve una matriz de objetos.

Label

Etiqueta descriptiva del parámetro. Si no se ha especificado ninguna etiqueta, el valor de la propiedad Label será el mismo que el de la propiedad Value. Si se asocia más de un valor Label con el mismo valor Value, se usará el primer valor Label que coincida. Para un parámetro de varios valores, Label devuelve una matriz de objetos.

Utilice la sintaxis de propiedades o colecciones para obtener acceso a los parámetros. La siguiente expresión muestra cómo obtener acceso a cada uno de los miembros de la colección Parameters y, si se coloca en un cuadro de texto de un elemento de informe, muestra el contenido del parámetro ProductSubCategory.

="IsMultiValue: " & Parameters!ProductSubCategory.IsMultiValue.ToString() 
& " Count:" & Parameters!ProductSubCategory.Count & " Values: " 
& Join(Parameters!ProductSubCategory.Value,", ") & " Labels: " 
& Join(Parameters!ProductSubCategory.Label,", ")

Para obtener más información, vea Trabajar con parámetros en Reporting Services.

ReportItems

La colección ReportItems contiene los cuadros de texto de un informe. Los elementos de la colección ReportItems sólo tienen una propiedad: Value. El valor de un elemento ReportItems puede utilizarse para mostrar o calcular los datos de otro campo del informe. Para obtener acceso al valor del cuadro de texto actual, puede utilizar el valor global integrado Me.Value o simplemente Value. No obstante, en las funciones de informe, como First, y las funciones de agregado, utilice la sintaxis completa.

Por ejemplo:

  • Esta expresión, ubicada en un cuadro de texto, muestra el valor de un cuadro de texto ReportItem denominado Textbox1:
    =ReportItems("Textbox1").Value
  • Esta expresión, ubicada en la propiedad Color del cuadro de texto ReportItem, muestra el texto en negro cuando el valor es > 0 y en rojo, en los demás casos:
    =iif(Me.Value > 0,"Black","Red")
  • Esta expresión, ubicada en un cuadro de texto del encabezado o el pie de página, muestra el primer valor por página del informe representado, para un cuadro de texto llamado LastName:
    =First(ReportItems("LastName").Value)

User

La colección User contiene datos acerca del usuario que ejecuta el informe. Puede utilizar esta colección para filtrar los datos que aparecen en un informe; por ejemplo, para mostrar sólo los datos del usuario actual o mostrar el Id. de usuario en el título de un informe. La expresión siguiente, ubicada en un cuadro de texto, combina texto estático con datos variables del usuario.

=Globals!ReportName & " for " & User!UserID

En la siguiente tabla, se describen los miembros de la colección User.

Miembro Tipo Descripción

Language

String

Idioma del usuario que ejecuta el informe. Por ejemplo, en-US.

UserID

String

Id. del usuario que ejecuta el informe. Si está utilizando la autenticación de Windows, este valor será la cuenta de dominio del usuario actual. El valor viene determinado por la extensión de seguridad de Reporting Services, que puede utilizar la autenticación de Windows o una autenticación personalizada.

En algunas ocasiones, los informes que incluyen la variable User!UserID no mostrarán los datos de informes específicos del usuario que está visualizando el informe en ese momento. Para que este error se produzca, deben darse las siguientes condiciones:

  • El informe debe ser una instantánea de ejecución de informes o una instantánea del historial de informes.
  • Se debe obtener acceso al informe mediante programación a través de métodos SOAP o de la dirección URL del informe.

Cuando se produce este error, la información de perfil de usuario de la instantánea de informe se basará en cualquiera de los siguientes elementos:

  • Identidad del usuario que creó la instantánea de informe.
  • La cuenta con la que se ejecuta el servidor de informes si el servidor de informes crea la instantánea como una operación programada.
ms157274.note(es-es,SQL.90).gifImportante:
Si no se actualiza una instantánea de informe basada en información de perfil de usuario, se generan datos incorrectos y se introduce un riesgo de seguridad si se incluyen datos confidenciales en la instantánea.

Los errores de perfil de usuario se producen sólo para instantáneas de informe que se abren mediante llamadas SOAP o mediante la dirección URL de la instantánea de informe. El valor User!UserID es plenamente funcional para informes que se ejecutan a petición y para todas las instantáneas de informe que se abren desde el Administrador de informes. Para obtener más información acerca de cómo llamar instantáneas de informe desde métodos de servicio Web y acceso URL, vea Using a URL to Access Report Server Items y Identifying Execution State.

DataSources

La colección DataSources representa los orígenes de datos a los que se hace referencia en una definición de informe publicado. Puede que los valores que obtenga para estas propiedades en el modo de vista previa sean diferentes de los que obtenga al implementar y ver un informe publicado.

En la siguiente tabla, se describen las variables de la colección DataSources.

Variable Tipo Descripción

DataSourceReference

String

Ruta de acceso completa del origen de datos en el servidor de informes. Por ejemplo, /DataSources/AdventureWorks.

Type

String

El tipo de proveedor de datos para el origen de datos. Por ejemplo, SQL.

DataSets

La colección DataSets representa los conjuntos de datos a los que se hace referencia en una definición de informe. Esta colección global rara vez se utiliza de forma directa en informes, pero está disponible para que los diseñadores de informes tengan acceso al comando de consulta utilizado para recuperar datos desde un origen de datos para cada conjunto de datos.

En la siguiente tabla, se describen los miembros de la colección DataSets.

Miembro Tipo Descripción

CommandText

String

Para los orígenes de datos de base de datos, ésta es la consulta que se utiliza para recuperar datos del origen de datos. Si la consulta es una expresión, ésta es la expresión evaluada.

RewrittenCommandText

String

El valor CommandText expandido del proveedor de datos. Se utiliza normalmente en informes con parámetros de consulta que se asignan a parámetros de informe. El proveedor de datos establece esta propiedad al expandir las referencias de los parámetros de comandos de texto a los valores constantes seleccionados para los parámetros de informe asignados.

Vea también

Tareas

Cómo agregar una expresión (Diseñador de informes)

Conceptos

Descripción del diseño y la representación de informes
Fundamentos del Diseñador de informes

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

14 de abril de 2006

Contenido modificado:
  • Se amplió el contenido de Campos.

5 de diciembre de 2005

Contenido nuevo:
  • Se agregaron las colecciones DataSets y DataSources.
Contenido modificado:
  • Se modificaron los ejemplos de sintaxis global.