LookupSet-Funktion (Report Builder 3.0 und SSRS)

Gibt die Menge der übereinstimmenden Werte für den angegebenen Namen aus einem Dataset mit Name-Wert-Paaren zurück.

HinweisHinweis

Sie können Berichtsdefinitionen (RDL) in Berichts-Generator 3.0 und im Berichts-Designer in Business Intelligence Development Studio erstellen und ändern. Jede Erstellungsumgebung bietet verschiedene Methoden zum Erstellen, Öffnen und Speichern von Berichten und verwandten Elementen. Weitere Informationen finden Sie unter Entwerfen von Berichten in Berichts-Designer und Berichts-Generator 3.0 (SSRS) im Web auf microsoft.com.

Syntax

LookupSet(source_expression, destination_expression, result_expression, dataset)

Parameter

  • source_expression
    (Variant) Ein Ausdruck, der im aktuellen Bereich ausgewertet wird und der den zu suchenden Namen oder Schlüssel angibt. Beispiel: =Fields!ID.Value.

  • destination_expression
    (Variant) Ein Ausdruck, der für jede Zeile in einem Dataset ausgewertet wird und der den Namen oder den Schlüssel für die Übereinstimmung angibt. Beispiel: =Fields!CustomerID.Value.

  • result_expression
    (Variant) Ein Ausdruck, der für die Zeile im Dataset ausgewertet wird, für die gilt source_expression = destination_expression, und der den abzurufenden Wert angibt. Beispiel: =Fields!PhoneNumber.Value.

  • dataset
    Eine Konstante, die den Namen eines Datasets im Bericht angibt. Beispiel: "ContactInformation".

Return

Gibt einen Wert vom Typ VariantArray zurück; gibt Nothing zurück, wenn keine Übereinstimmung vorhanden ist.

Hinweise

Rufen Sie für ein Name-Wert-Paar, für das eine 1:n-Beziehung vorhanden ist, einen Satz von Werten mithilfe von LookupSet aus dem angegebenen Dataset ab. Beispiel: Für einen Kundenbezeichner in einer Tabelle können Sie alle zugeordneten Telefonnummern dieses Kunden aus einem Dataset, das nicht an den Datenbereich gebunden ist, mithilfe von LookupSet abrufen.

Mit LookupSet wird Folgendes ausgeführt:

  • Der Quellausdruck wird im aktuellen Bereich ausgewertet.

  • Der Zielausdruck wird für jede Zeile des angegebenen Datasets ausgewertet, nachdem Filter angewendet wurden, und zwar anhand der Sortierung des angegebenen Datasets.

  • Für jede Übereinstimmung von Quellausdruck und Zielausdruck wird der Ergebnisausdruck für diese Zeile im Dataset ausgewertet.

  • Der Satz von Ergebnisausdruckswerten wird zurückgegeben.

Um einen einzelnen Wert aus einem Dataset mit Name-Wert-Paaren für einen angegebenen Namen abzurufen, wenn eine 1:1-Beziehung vorhanden ist, verwenden Sie Suchfunktion (Report Builder 3.0 und SSRS). Um Lookup für einen Satz von Werten aufzurufen, verwenden Sie Multilookup-Funktion (Berichts-Generator 3.0 und SSRS).

Es gelten folgende Einschränkungen:

  • LookupSet wird ausgewertet, nachdem alle Filterausdrücke angewendet wurden.

  • Nur eine Suchebene wird unterstützt. Ein Quell-, Ziel- oder Ergebnisausdruck kann keinen Verweis auf eine Suchfunktion einschließen.

  • Quell- und Zielausdrücke müssen den gleichen Datentyp ergeben.

  • Quell-, Ziel- und Ergebnisausdrücke können keine Verweise auf Berichts- oder Gruppenvariablen einschließen.

  • LookupSet kann nicht als Ausdruck für die folgenden Berichtselemente verwendet werden:

    • Dynamische Verbindungszeichenfolgen für eine Datenquelle.

    • Berechnete Felder in einem Dataset.

    • Abfrageparameter in einem Dataset.

    • Filter in einem Dataset.

    • Berichtsparameter.

    • Die Report.Language-Eigenschaft.

Weitere Informationen finden Sie unter Aggregatfunktionsreferenz (Report Builder 3.0 und SSRS) und Grundlegendes zum Ausdrucksbereich für Gesamtwerte, Aggregate und integrierte Auflistungen (Report Builder 3.0 und SSRS).

Beispiel

Nehmen Sie im folgenden Beispiel an, dass die Tabelle an ein Dataset gebunden ist, das einen Vertriebsgebietsbezeichner vom Typ TerritoryGroupID enthält. Ein separates Dataset mit dem Namen "Stores" enthält die Liste aller Läden in einem Gebiet und schließt den Gebietsbezeichner ID sowie den Namen des Ladens StoreName ein.

Im folgenden Ausdruck vergleicht LookupSet für jede Zeile im Dataset "Stores" den Wert TerritoryGroupID mit ID. Für jede Übereinstimmung wird dem Resultset der Wert des Felds StoreName für diese Zeile hinzugefügt.

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

Da LookupSet eine Sammlung von Objekten zurückgibt, können Sie den Ergebnisausdruck nicht direkt in einem Textfeld anzeigen. Sie können die Werte der Objekte in der Sammlung als Zeichenfolge verketten.

Verwenden Sie die Visual Basic-Funktion Join, um aus einem Satz von Objekten eine Zeichenfolge mit Trennzeichen zu erstellen. Verwenden Sie ein Komma als Trennzeichen, um die Objekte an einer einzelnen Zeile zu kombinieren. In einigen Renderern könnten Sie einen Visual Basic-Zeilenvorschub (vbCrLF) als Trennzeichen verwenden, um jeden Wert auf einer neuen Zeile aufzulisten.

Wenn der folgende Ausdruck für ein Textfeld als Value-Eigenschaft verwendet wird, wird mit Join eine Liste erstellt.

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

Für Textfelder, die nur wenige Male gerendert werden, könnten Sie wahlweise benutzerdefinierten Code hinzufügen, um HTML-Code zum Anzeigen von Werten in einem Textfeld zu generieren. HTML-Code in einem Textfeld erfordert zusätzliche Verarbeitung, deshalb ist dies nicht empfehlenswert für ein Textfeld, das Tausende Male gerendert wird.

Kopieren Sie die folgenden Visual Basic-Funktionen in einen Code-Block in einer Berichtsdefinition. MakeList erstellt aus dem Objektarray, das in result_expression zurückgegeben wird, mithilfe von HTML-Tags eine ungeordnete Liste. Length gibt die Anzahl der Elemente im Objektarray zurück.

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

Um den HTML-Code zu generieren, müssen Sie die Funktion aufrufen. Fügen Sie den folgenden Ausdruck in die Value-Eigenschaft für das Textfeld ein, und legen Sie den Markuptyp für den Text auf HTML fest. Weitere Informationen finden Sie unter Vorgehensweise: Hinzufügen von HTML in einem Bericht (Report Builder 3.0 und SSRS).

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