Função LookupSet (Construtor de Relatórios 3.0 e SSRS)

Retorna o conjunto de valores correspondentes para o nome especificado de um conjunto de dados que contém pares de nome/valor.

ObservaçãoObservação

É possível criar e modificar definições de relatórios (.rdl) no Report Builder 3.0 e no Designer de Relatórios no Business Intelligence Development Studio. Cada ambiente de criação fornece diferentes maneiras de criar, abrir e salvar relatórios e itens relacionados. Para obter mais informações, consulte Projetando e implementando relatórios usando o Designer de Relatórios (Reporting Services) na Web em microsoft.com.

Sintaxe

LookupSet(source_expression, destination_expression, result_expression, dataset)

Parâmetros

  • source_expression
    (Variant) Uma expressão que é avaliada no escopo atual e que especifica o nome ou chave para procurar. Por exemplo, =Fields!ID.Value.

  • destination_expression
    (Variant) Uma expressão que é avaliada para cada linha em um conjunto de dados e que especifica o nome ou a chave para correspondência. Por exemplo, =Fields!CustomerID.Value.

  • result_expression
    (Variant) Uma expressão que é avaliada para a linha no conjunto de dados em que source_expression = destination_expression e que especifica o valor a ser recuperado. Por exemplo, =Fields!PhoneNumber.Value.

  • dataset
    Uma constante que especifica o nome do conjunto de dados no relatório. Por exemplo, "ContactInformation".

Retorno

Retorna VariantArray ou Nothing se não houver correspondência.

Comentários

Use LookupSet para recuperar um conjunto de valores do conjunto de dados especificado para um par de nome/valor onde há uma relação de 1 para muitos. Por exemplo, para um identificador de cliente em uma tabela, você pode usar LookupSet para recuperar todos os números de telefone associados àquele cliente de um conjunto de dados que não esteja associado à região de dados.

LookupSet faz o seguinte:

  • Avalia a expressão de origem no escopo atual.

  • Avalia a expressão de destino para cada linha do conjunto de dados especificado depois que foram aplicados filtros, com base no agrupamento do conjunto de dados especificado.

  • Para cada correspondência da expressão de origem e destino, avalia a expressão resultante para aquela linha no conjunto de dados.

  • Retorna o conjunto de valores de expressão resultante.

Para recuperar um valor único de um conjunto de dados com pares de nome/valor para um nome especificado em que exista uma relação de 1 para 1, use Função Lookup (Construtor de Relatórios 3.0 e SSRS). Para chamar Lookup para um conjunto de valores, use Função Multilookup (Construtor de Relatórios 3.0 e SSRS).

As seguintes restrições são aplicadas:

  • LookupSet é avaliado depois que todas as expressões de filtro são aplicadas.

  • Só um nível de pesquisa tem suporte. Uma expressão de origem, destino ou resultado não pode incluir uma referência a uma função de pesquisa.

  • Expressões de origem e destino devem ser avaliadas como o mesmo tipo de dados.

  • Expressões de origem, destino e resultado não podem incluir referências a variáveis de relatório ou grupo.

  • LookupSet não pode ser usado como uma expressão para os seguintes itens de relatório:

    • Cadeias de conexão dinâmicas para uma fonte de dados.

    • Campos calculados em um conjunto de dados.

    • Parâmetros de consulta em um conjunto de dados.

    • Filtros em um conjunto de dados.

    • Parâmetros de relatório.

    • A propriedade Report.Language.

Para obter mais informações, consulte Referência de funções de agregação (Construtor de Relatórios 3.0 e SSRS) e Compreendendo o escopo das expressões para totais, agregações e coleções internas (Construtor de Relatórios 3.0 e SSRS).

Exemplo

No exemplo a seguir, digamos que a tabela esteja associada a um conjunto de dados que inclua um identificador de território de vendas TerritoryGroupID. Um conjunto de dados separado denominado "Repositórios" contém a lista de todos os repositórios em um território e inclui o identificador de território ID e o nome do repositório StoreName.

Na expressão a seguir, LookupSet compara o valor TerritoryGroupID com ID para cada linha no conjunto de dados denominado "Repositórios". Para cada correspondência, o valor do campo StoreName para aquela linha é adicionado ao conjunto de resultados.

=LookupSet(Fields!TerritoryGroupID.Value, Fields!ID.Value, Fields!StoreName.Value, "Stores")

Como LookupSet retorna uma coleção de objetos, você não pode exibir a expressão de resultado diretamente em uma caixa de texto. Você pode concatenar o valor de cada objeto na coleção como uma cadeia de caracteres.

Use a função Join do Visual Basic e crie uma cadeia delimitada a partir de um conjunto de objetos. Use vírgula como separador combinar os objetos em uma única linha. Em alguns renderizadores, você pode usar uma alimentação de linha (vbCrLF) do Visual Basic como um separador para listar cada valor em uma nova linha.

A expressão seguinte, quando usada como a propriedade Value para uma caixa de texto, usa Join para criar uma lista.

=Join(LookupSet(Fields!TerritoryGroupID.Value, Fields!ID.Value, Fields!StoreName.Value, "Stores"),",")

Para caixas de texto que só renderizam algumas vezes, você pode escolher adicionar código personalizado para gerar HTML para exibir valores em uma caixa de texto. O HTML em uma caixa de texto requer processamento extra; portanto, não é uma boa escolha para uma caixa de texto que é renderizada milhares de vezes.

Copiar as seguintes funções do Visual Basic para um bloco Code em uma definição de relatório. MakeList considera a matriz de objetos que é retornada em result_expression e compila uma lista não ordenada usando marcas HTML. Length retorna o número de itens em uma matriz de objetos.

Function MakeList(ByVal items As Object()) As String
   If items Is Nothing Then
      Return Nothing
   End If

   Dim builder As System.Text.StringBuilder = 
      New System.Text.StringBuilder()
   builder.Append("<ul>")

   For Each item As Object In items
      builder.Append("<li>")
      builder.Append(item)
   Next
   builder.Append("</ul>")

   Return builder.ToString()
End Function

Function Length(ByVal items as Object()) as Integer
   If items is Nothing Then
      Return 0
   End If
   Return items.Length
End Function

Para gerar o HTML, você deve chamar a função. Cole a expressão seguinte na propriedade Value para a caixa de texto e defina o tipo de marcação para texto como HTML. Para obter mais informações, consulte Como adicionar um HTML a um relatório (Construtor de Relatórios 3.0 e SSRS).

=Code.MakeList(LookupSet(Fields!TerritoryGroupID.Value, Fields!ID.Value, Fields!StoreName.Value, "Stores"))