Función LookupSet (Generador de informes 3.0 y SSRS)

Devuelve el conjunto de valores coincidentes para el nombre especificado de un conjunto de datos que contiene pares nombre/valor.

Nota

Puede crear y modificar las definiciones de informe (.rdl) en el Generador de informes 3.0 y en el Diseñador de informes en Business Intelligence Development Studio. Cada entorno de creación proporciona varias maneras de crear, abrir y guardar informes y elementos relacionados. Para obtener más información, vea la información sobre el diseño de informes en el Generador de informes 3.0 y el Administrador de informes (SSRS) en el sitio web microsoft.com.

Sintaxis

LookupSet(source_expression, destination_expression, result_expression, dataset)

Parámetros

  • source_expression
    (Variant) Una expresión que se evalúa en el ámbito actual y que especifica el nombre o la clave que se buscará. Por ejemplo, =Fields!ID.Value.

  • destination_expression
    (Variant) Una expresión que se evalúa para cada fila de un conjunto de datos y que especifica el nombre o la clave que se hará coincidir. Por ejemplo, =Fields!CustomerID.Value.

  • result_expression
    (Variant) Una expresión que se evalúa para la fila del conjunto de datos donde source_expression = destination_expression y que especifica el valor que se recuperará. Por ejemplo, =Fields!PhoneNumber.Value.

  • dataset
    Una constante que especifica el nombre de un conjunto de datos del informe. Por ejemplo, "ContactInformation".

Devolución

Devuelve VariantArray o Nothing si no hay ninguna coincidencia.

Comentarios

Use LookupSet para recuperar un conjunto de valores del conjunto de datos especificado correspondiente a un par de nombre/valor donde hay una relación de uno a varios. Por ejemplo, para un identificador de cliente en una tabla, puede usar LookupSet para recuperar todos los números de teléfono asociados a ese cliente de un conjunto de datos que no está enlazado a la región de datos.

LookupSet realiza las operaciones siguientes:

  • Evalúa la expresión de origen en el ámbito actual.

  • Evalúa la expresión de destino para cada fila del conjunto de datos especificado una vez aplicados los filtros, según la intercalación del conjunto de datos especificado.

  • Por cada coincidencia de las expresiones de origen y de destino, evalúa la expresión de resultado para dicha fila del conjunto de datos.

  • Devuelve el conjunto de valores de expresión de resultado.

Para recuperar un único valor de un conjunto de datos con pares de nombre/valor para un nombre especificado donde hay una relación de uno a uno, use Función Lookup (Generador de informes 3.0 y SSRS). Para llamar a Lookup para un conjunto de valores, use Función Multilookup (Generador de informes 3.0 y SSRS).

Se aplican las siguientes restricciones:

  • Se evalúa LookupSet después de aplicar todas las expresiones de filtro.

  • Solo se admite un nivel de búsqueda. Un origen, un destino o una expresión de resultado no pueden incluir una referencia a una función de búsqueda.

  • Las expresiones de origen y de destino deben dar el mismo tipo de datos.

  • Las expresiones de origen, destino y resultado no pueden incluir referencias a variables de informe o de grupo.

  • LookupSet no se puede usar como una expresión para los siguientes elementos de informe:

    • Cadenas de conexión dinámicas para un origen de datos.

    • Campos calculados de un conjunto de datos.

    • Parámetros de consulta de un conjunto de datos.

    • Filtros de un conjunto de datos.

    • Parámetros de informe.

    • Propiedad Report.Language.

Para obtener más información, vea Referencia a funciones de agregado (Generador de informes 3.0 y SSRS) y Descripción del ámbito de expresión para totales, agregados y colecciones integradas (Generador de informes 3.0 y SSRS).

Ejemplo

En el siguiente ejemplo se supone que la tabla está enlazada a un conjunto de datos que incluye un identificador de territorio de ventas TerritoryGroupID. Un conjunto de datos independiente denominado "Stores" contiene la lista de todas las tiendas de un territorio e incluye el identificador de territorio ID y el nombre de la tienda StoreName.

En la siguiente expresión, LookupSet compara el valor de TerritoryGroupID con el de ID para cada fila del conjunto de datos denominado "Stores". Para cada coincidencia, el valor del campo StoreName de dicha fila se agrega al conjunto de resultados.

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

Dado que LookupSet devuelve una colección de objetos, no se puede mostrar la expresión de resultado directamente en un cuadro de texto. Puede concatenar el valor de cada objeto de la colección como una cadena.

Use la función Join de Visual Basic para crear una cadena delimitada a partir de un conjunto de objetos. Use la coma como separador para combinar los objetos en una sola línea. En algunos representadores, puede usar un salto de línea de Visual Basic (vbCrLF) como separador para enumerar cada valor en una nueva línea.

La siguiente expresión, cuando se usa como la propiedad Value para un cuadro de texto, utiliza Join para crear una lista.

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

Para los cuadros de texto que solo se representan pocas veces, puede agregar código personalizado para generar el código HTML para mostrar valores en un cuadro de texto. El código HTML en un cuadro de texto requiere procesamiento adicional, por lo que no es una buena opción para un cuadro de texto que se representa miles de veces.

Copie las siguientes funciones Visual Basic en un bloque Code en una definición de informe. MakeList toma la matriz de objetos que se devuelve en result_expression y genera una lista no ordenada mediante etiquetas HTML. Length devuelve el número de elementos en la 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 generar el código HTML, debe llamar a la función. Pegue la siguiente expresión en la propiedad Value del cuadro de texto y establezca el tipo de marcado del texto en HTML. Para obtener más información, vea Agregar HTML a un informe (Generador de informes 3.0 y SSRS).

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