次の方法で共有


LookupSet 関数 (レポート ビルダーおよび SSRS)

名前と値のペアを含むデータセットから、指定した名前の一致する値のセットを返します。

レポート定義 (.rdl) は、レポート ビルダーと SQL Server Data Tools のレポート デザイナーで作成および変更できます。 作成環境ごとに、レポートと関連アイテムを作成、開く、保存するさまざまな方法が用意されています。 詳細については、Web 上の microsoft.com にある レポート デザイナーおよびレポート ビルダー (SSRS) でのレポートのデザイン を参照してください。

構文

  
LookupSet(source_expression, destination_expression, result_expression, dataset)  

パラメーター

source_expression
(Variant) 現在のスコープで評価され、検索する名前またはキーを指定する式。 たとえば、=Fields!ID.Value のようにします。

目的地_表現
(Variant) データセット内の各行に対して評価され、一致する名前またはキーを指定する式。 たとえば、=Fields!CustomerID.Value のようにします。

result_expression
(Variant) データセット内の行について評価される式で、source_expression = とdestination_expressionがある場合に取得する値を指定します。 たとえば、=Fields!PhoneNumber.Value のようにします。

データセット
レポート内のデータセットの名前を指定する定数。 たとえば、"ContactInformation" のように指定します。

帰る

VariantArrayを返します。一致しない場合はNothingを返します。

注釈

LookupSetを使用して、1 対多のリレーションシップがある名前と値のペアについて、指定したデータセットから値のセットを取得します。 たとえば、テーブル内の顧客識別子の場合、 LookupSet を使用して、データ領域にバインドされていないデータセットから、その顧客に関連付けられているすべての電話番号を取得できます。

LookupSet は次の処理を行います。

  • ソースの式を現在のスコープ内で評価します。

  • フィルターを適用した後で、指定されたデータセットの照合順序に基づき、指定されたデータセットの各行に対して変換先の式を評価します。

  • 変換元の式と変換先の式が一致するたびに、データセット内のその行に対して結果式を評価します。

  • 結果式の一連の値を返します。

指定した名前に対応する、名前と値のペアを含むデータセットに 1 対 1 のリレーションシップが存在する場合、このデータセットから 1 つの値を取得するには、Lookup 関数 (レポート ビルダーおよび SSRS) を使用します。 一連の値の Lookup を呼び出すには、 Multilookup 関数 (レポート ビルダーおよび SSRS) を使用します

次の制限が適用されます。

  • LookupSet は、すべてのフィルター式が適用された後に評価されます。

  • 1 レベルの参照のみがサポートされます。 変換元、変換先、または結果の式に、Lookup 関数への参照を含めることはできません。

  • 変換元および変換先の式は、同じデータ型として評価される必要があります。

  • 変換元、変換先、結果の式には、レポート変数またはグループ変数への参照を含めることができません。

  • LookupSet は、次のレポート アイテムの式として使用できません。

    • データ ソースの動的な接続文字列。

    • データセット内の計算フィールド。

    • データセット内のクエリ パラメーター。

    • データセット内のフィルター。

    • レポート パラメーター。

    • Report.Language プロパティ。

詳細については、「集計関数リファレンス (レポート ビルダーおよび SSRS)」および「合計、集計、および組み込みコレクションの式のスコープ (レポート ビルダーおよび SSRS)」を参照してください。

次の例では、テーブルが販売区域識別子 TerritoryGroupID を含むデータセットにバインドされているとします。 別のデータセットである "Stores" には、販売区域の全店舗の一覧が含まれ、販売区域識別子 ID と、店舗名を表す StoreName が含まれています。

次の式では、 LookupSet は、TerritoryGroupID の値を、"Stores" というデータセット内の各行の ID と比較します。 一致するたびに、その行の StoreName フィールドの値が結果セットに追加されます。

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

LookupSetはオブジェクトのコレクションを返すので、結果式をテキスト ボックスに直接表示することはできません。 コレクション内の各オブジェクトの値を文字列として連結することはできます。

Visual Basic 関数を使用 Join 、一連のオブジェクトから区切られた文字列を作成します。 コンマを区切り記号として使用し、オブジェクトを 1 行に結合します。 レンダラーによっては、Visual Basic の改行 (vbCrLF) を区切り記号として使用し、各値を新しい 1 つの行に表示することもできます。

次の式は、テキスト ボックスの Value プロパティとして使用される場合、 Join を使用してリストを作成します。

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

数回しか表示されないテキスト ボックスでは、テキスト ボックスの値を表示する HTML を生成するカスタム コードを追加してもよいでしょう。 テキスト ボックス内に HTML を生成すると追加の処理が必要になるため、数千回も表示されるようなテキスト ボックスの場合、この方法はお勧めできません。

次の Visual Basic 関数をレポート定義の Code ブロックにコピーします。 MakeList では、 result_expression で返されたオブジェクト配列を受け取り、HTML タグを使用して、順序指定されないリストを生成します。 Length は、オブジェクト配列内の項目数を返します。

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  

HTML を生成するには、関数を呼び出す必要があります。 次の式をテキスト ボックスの Value プロパティに貼り付け、テキストのマークアップの種類を HTML に設定します。 詳細については、「レポートへの HTML の追加 (レポート ビルダーおよび SSRS)」を参照してください。

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

こちらもご覧ください

レポートでの式の使用 (レポート ビルダーおよび SSRS)
式の例 (レポート ビルダーおよび SSRS)
式で使用されるデータ型 (レポート ビルダーおよび SSRS)
合計、集計、および組み込みコレクションの式のスコープ (レポート ビルダーおよび SSRS)