Usar parámetros de un solo valor y de varios valores

Los parámetros pueden tener uno o varios valores. Los parámetros de varios valores se pueden establecer en más de un valor. Cuando se define una lista de valores disponibles para un parámetro de varios valores, Reporting Services proporciona automáticamente una opción Seleccionar todo en la lista desplegable de la barra de herramientas de informe. Puede usar esta opción para seleccionar y borrar todos los valores de la lista.

En los cuadros de texto en la superficie de diseño, tanto los parámetros de un solo valor como los de varios valores aparecen como expresiones simples que comienzan por el símbolo @. Por ejemplo, un parámetro denominado Store aparece como [@Store]. Para obtener más información, vea Descripción de las expresiones simples y complejas (Reporting Services).

Para establecer la propiedad de varios valores para un parámetro, seleccione la opción Permitir varios valores en el cuadro de diálogo Propiedades de parámetro de informe. La propiedad de varios valores puede establecerse para cualquier parámetro, excepto para los de tipo Boolean.

El uso principal de los parámetros de varios valores es permitir que una cláusula de restricción de consulta, como por ejemplo, la cláusula WHERE de Transact-SQL o la cláusula Filter de MDX, compruebe la inclusión en un conjunto de valores en lugar de la igualdad con un solo valor. Para obtener información sobre cómo crear parámetros de varios valores, vea Tutorial: Agregar parámetros a un informe y Crear parámetros de informe y establecer sus propiedades.

Nota de seguridadNota de seguridad

En cualquier informe que incluya un parámetro de tipo String, asegúrese de que usa una lista de valores disponibles (también conocida como lista de valores válidos) y de que los usuarios que ejecuten el informe solo dispongan de los permisos necesarios para ver los datos del mismo. Cuando se define un parámetro de tipo String, el usuario ve un cuadro de texto que admite cualquier valor. Una lista de valores disponibles limita los valores que se pueden especificar. Si el parámetro de informe está asociado a un parámetro de consulta y no se utiliza una lista de valores disponibles, un usuario del informe podría escribir sintaxis SQL en el cuadro de texto y exponer el informe y el servidor a un ataque por inyección de código SQL. Si el usuario tiene permisos suficientes para ejecutar la nueva instrucción SQL, podría provocar resultados no deseados en el servidor.

Si un parámetro de informe no está asociado a un parámetro de consulta y los valores del parámetro están incluidos en el informe, un usuario del mismo podría escribir sintaxis de expresiones o una dirección URL en el valor del parámetro y representar el informe en Excel o HTML. Si, posteriormente, otro usuario visualiza el informe y hace clic en el contenido del parámetro representado, podría ejecutar accidentalmente el script o el vínculo malintencionado.

Para reducir el riesgo de ejecución accidental de scripts malintencionados, abra exclusivamente informes representados procedentes de orígenes de confianza. Para obtener más información acerca de cómo proteger los informes, vea Proteger informes y recursos.

Escribir consultas para parámetros de informe de varios valores

Puede definir un parámetro de varios valores para cualquier parámetro de informe que cree. No obstante, si desea devolver varios valores del parámetro a un origen de datos mediante una consulta, deben cumplirse los requisitos siguientes:

  • El origen de datos debe ser de SQL Server, Oracle, Analysis Services, SAP BI NetWeaver o Hyperion Essbase.

  • El origen de datos no puede ser un procedimiento almacenado. Reporting Services no permite pasar una matriz de parámetros de varios valores a un procedimiento almacenado.

  • La consulta debe utilizar una cláusula IN para especificar el parámetro.

El ejemplo siguiente muestra el uso de una palabra clave IN en la cláusula WHERE de una instrucción Transact-SQL. Para obtener más información acerca de la palabra clave IN o los resultados devueltos por esta consulta, vea IN (Transact-SQL).

SELECT FirstName, LastName, e.Title
FROM HumanResources.Employee AS e
    JOIN Person.Contact AS c 
    ON e.ContactID = c.ContactID
WHERE e.Title IN (@Title)

Para experimentar con esta consulta en un informe, defina un conjunto de datos mediante ella. Cambie las propiedades del parámetro de informe Title creado automáticamente del modo siguiente:

  • Seleccione la opción Multivalor.

  • En Valores disponibles, seleccione la opción No consultado. Especifique la lista siguiente en la columna Valor (deje la columna Etiqueta en blanco): Design Engineer, Buyer, Marketing Assistant.

  • En Valores predeterminados, escriba Buyer.

  • Ejecute la vista previa. Seleccione distintas combinaciones de valores para Title y compruebe que se obtienen los resultados esperados.

[!NOTA]

El servidor de informes vuelve a escribir las consultas para los orígenes de datos que no pueden procesar los parámetros como una matriz. La reescritura de la consulta es necesaria para generar el resultado deseado. La reescritura de una consulta se desencadena cuando un parámetro se define como parámetro de varios valores y la consulta utiliza una instrucción IN para especificar el parámetro. Si crea una consulta que no incluye la instrucción IN, tenga en cuenta que está sorteando la lógica que proporciona el servidor de informes para la compatibilidad con los parámetros de varios valores.

Las expresiones de filtro para los conjuntos de datos, las regiones de datos y los grupos se definen en la página Filtro del cuadro de diálogo Propiedades correspondiente. Si ha definido una expresión de filtro que hace referencia a un parámetro de varios valores, debe utilizar el operador IN en la expresión de filtro. Las expresiones de filtro que utilizan operadores distintos a IN provocan errores de procesamiento. Para obtener más información, vea Cómo agregar un filtro (Reporting Services).

Escribir expresiones que hacen referencia a parámetros de varios valores

Cuando se hace referencia a un parámetro en una expresión, se usa la colección integrada Parameters. Cuando utilice parámetros de varios valores en expresiones, debe comprender tanto el tratamiento de un solo valor como de toda la matriz de valores. En la tabla siguiente se incluyen ejemplos y descripciones de propiedades de parámetros que tienen establecida la opción de varios valores.

Ejemplo

Descripción

Parameters!<ParameterName>.Value

Matriz de valores de datos Variant del parámetro.

Parameters!<ParameterName>.Label

Matriz de cadenas que son etiquetas del parámetro.

Parameters!<ParameterName>.IsMultiValue

Propiedad booleana que indica si se ha seleccionado la opción Permitir varios valores para el parámetro.

Parameters!<ParameterName>.Count

Número de valores de la matriz.

Parameters!<ParameterName>.Value(0)

Primer valor de una matriz de varios valores.

Parameters!<ParameterName>.Label(0)

Primera etiqueta de una matriz de varios valores.

Parameters!<ParameterName>.Value(Parameters! <ParameterName>.Count-1)

Último valor de una matriz de varios valores.

Parameters!<ParameterName>.Label(Parameters! <ParameterName>.Count-1)

Última etiqueta de una matriz de varios valores.

=Join(Parameters!<ParameterName>.Value,", ")

Expresión que concatena todos los valores de la matriz de un parámetro de varios valores de tipo String en una cadena.

=Split("Value1, Value2, Value3",",")

Selecciona una cadena y crea una matriz de objetos que se puede utilizar para pasar a un subinforme o de obtención de detalles que espera un parámetro de varios valores.

Puede utilizar las funciones SPLIT y JOIN para separar o combinar valores en la matriz de cualquier expresión. Puede utilizar las funciones STRING y CINT para convertir los valores en cadenas o enteros.

Para obtener más información y ejemplos de parámetros de uno y varios valores en expresiones, vea Usar referencias a la colección de parámetros en expresiones (Reporting Services).