Compartilhar via


Usando parâmetros de valor único e multivalor

Os parâmetros podem ser de valor único ou de vários valores. Um parâmetro de vários valores pode ser definido para mais de um valor. Ao definir uma lista de valores disponíveis para um parâmetro de vários valores, o Reporting Services fornece automaticamente uma opção Selecionar Tudo na lista suspensa da barra de ferramentas do relatório. É possível usar essa opção para selecionar e limpar todos os valores na lista.

Nas caixas de texto na superfície de design, os parâmetros de valor único ou de vários valores são exibidos como expressões simples que começam com o símbolo @. Por exemplo, um parâmetro denominado Armazenamento é exibido como [@Store]. Para obter mais informações, consulte Compreendendo expressões simples e complexas (Reporting Services).

Para definir a propriedade de vários valores para um parâmetro, selecione a opção Permitir vários valores na caixa de diálogo Propriedades de Parâmetros do Relatório. Qualquer tipo de parâmetro pode ser definido para vários valores, exceto Boolean.

O principal uso de parâmetros de vários valores é permitir que uma cláusula de restrição de consulta, por exemplo, a cláusula WHERE do Transact-SQL ou a cláusula Filtro do MDX, teste a inclusão em um conjunto de valores em vez da igualdade a um valor único. Para obter mais informações sobre como criar parâmetros de vários valores, consulte Tutorial: Adicionando parâmetros a um relatório e Criando parâmetros de relatório e configurando propriedades de parâmetros de relatório.

Observação sobre segurançaObservação sobre segurança

Em qualquer relatório que inclua um parâmetro do tipo String, tenha certeza de usar uma lista de valores disponíveis (também conhecida como uma lista de valores válidos) e verifique se todos os usuários que executam o relatório têm somente as permissões necessárias para exibir os dados do relatório. Ao definir um parâmetro do tipo Cadeia de caracteres, uma caixa de texto que pode utilizar qualquer valor é exibida ao usuário. Uma lista de valores disponíveis limita os valores que podem ser inseridos. Se o parâmetro do relatório estiver associado a um parâmetro de consulta e uma lista de valores disponíveis não for usada, um usuário do relatório poderá digitar sintaxe SQL na caixa de texto, abrindo potencialmente o relatório e o servidor a um ataque de injeção SQL. Se o usuário tiver permissões suficientes para executar a nova instrução SQL, resultados indesejados podem ser produzidos no servidor.

Se um parâmetro de relatório não estiver associado a um parâmetro de consulta e os valores de parâmetro forem incluídos no relatório, um usuário do relatório poderá digitar sintaxe de expressão ou uma URL no valor do parâmetro e renderizar o relatório em Excel ou HTML. Se outro usuário exibir o relatório e clicar no conteúdo do parâmetro renderizado, o usuário poderá executar acidentalmente o script ou link mal-intencionado.

Para reduzir o risco de execução acidental de scripts mal-intencionados, abra somente relatórios renderizados por fontes confiáveis. Para obter mais informações sobre como proteger relatórios, consulte Protegendo relatórios e recursos.

Escrevendo consultas para parâmetros de vários valores para relatórios

É possível definir um parâmetro de vários valores para qualquer parâmetro de relatório criado. No entanto, se você desejar passar vários valores do parâmetro novamente para uma fonte de dados usando a consulta, os seguintes requisitos devem ser atendidos:

  • A fonte de dados deve ser SQL Server, Oracle, Analysis Services, SAP BI NetWeaver ou Hyperion Essbase.

  • A fonte de dados não pode ser um procedimento armazenado. O Reporting Services não oferece suporte à passagem da matriz de um parâmetro de vários valores para um procedimento armazenado.

  • A consulta deve usar uma cláusula IN para especificar o parâmetro.

O exemplo a seguir ilustra o uso de uma palavra-chave IN na cláusula WHERE de uma instrução Transact-SQL. Para obter mais informações sobre a palavra-chave IN ou os resultados retornados por essa consulta, consulte 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 testar isso em um relatório, defina um conjunto de dados usando essa consulta. Altere as propriedades do parâmetro do relatório Título, criado automaticamente da seguinte maneira:

  • Selecione a opção Multivalor.

  • Em Valores Disponíveis, selecione a opção Não-consultado. Digite a lista a seguir na coluna Valor (deixe a coluna Rótulo em branco): Engenheiro de design, Comprador, Assistente de marketing.

  • Em Valores padrão, digite Comprador.

  • Visualização da execução. Selecione combinações diferentes de valores para Título e verifique se obteve os resultados esperados.

ObservaçãoObservação

O servidor de relatório reescreve as consultas das fontes de dados que não podem processar parâmetros como uma matriz. É necessário reescrever a consulta para produzir o resultado pretendido. Uma consulta reescrita é disparada quando um parâmetro é definido como multivalor e a consulta usa uma instrução IN para especificar o parâmetro. Ao criar uma consulta que não inclui a instrução IN, entenda que você está evitando a lógica que o servidor de relatório fornece para oferecer suporte a parâmetros multivalor.

Expressões de filtro para conjuntos de dados, regiões de dados e grupos são definidos na página Filtro da caixa de diálogo Propriedades correspondente. Se você definiu uma expressão de filtro que faz referência a um parâmetro de vários valores, deverá usar o operador IN na expressão de filtro. Expressões de filtro que usam operadores diferentes de IN resultam em erros de processamento. Para obter mais informações, consulte Como adicionar um filtro (Reporting Services).

Escrevendo expressões que fazem referência a parâmetros de vários valores

Ao fazer referência a um parâmetro em uma expressão, use a coleção de Parameters internos. Ao usar parâmetros de vários valores em expressões, é necessário saber como lidar com um valor único e com toda a matriz de valores. A tabela a seguir fornece exemplos e descrições de propriedades de parâmetros que estão definidos para permitir vários valores.

Exemplo

Descrição

Parameters!<ParameterName>.Value

Uma matriz de valores de dados variant para o parâmetro.

Parameters!<ParameterName>.Label

Uma matriz de cadeias de caracteres que são rótulos para o parâmetro.

Parameters!<ParameterName>.IsMultiValue

Propriedade booleana que indica se a opção Permitir vários valores do parâmetro foi selecionada.

Parameters!<ParameterName>.Count

O número de valores na matriz.

Parameters!<ParameterName>.Value(0)

O primeiro valor em uma matriz de vários valores.

Parameters!<ParameterName>.Label(0)

O primeiro rótulo em uma matriz de vários valores.

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

O último valor em uma matriz de vários valores.

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

O último rótulo em uma matriz de vários valores.

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

Uma expressão que concatena todos os valores na matriz de um parâmetro de vários valores do tipo String em uma cadeia de caracteres.

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

Utiliza uma cadeia de caracteres e cria uma matriz de objetos que podem ser usados para passar para um sub-relatório ou relatório de detalhamento que espera um parâmetro de vários valores.

É possível usar as funções SPLIT e JOIN para separar ou combinar valores na matriz em qualquer expressão. É possível usar as funções STRING e CINT para converter os valores em cadeias de caracteres ou inteiros.

Para obter mais informações e exemplos de parâmetros de valor único e de multivalor em expressões, consulte Usando referências de coleções de parâmetros em expressões (Reporting Services).