LookupSet 函數 (報表產生器及 SSRS)
從包含名稱/值組的資料集傳回符合指定之名稱的值組。
[!附註]
您可以在報表產生器以及 SQL Server Data Tools 的報表設計師中建立和修改報表定義 (.rdl)。每種撰寫環境都會提供不同的方式來建立、開啟和儲存報表與相關的項目。如需詳細資訊,請參閱 microsoft.com 網站上的<在報表設計師及報表產生器中設計報表 (SSRS)>。
語法
LookupSet(source_expression, destination_expression, result_expression, dataset)
參數
source_expression
(Variant) - 在目前範圍中評估並指定要查閱之名稱或索引鍵的運算式。 例如,=Fields!ID.Value。destination_expression
(Variant) - 針對資料集中的每個資料列評估並指定要比對之名稱或索引鍵的運算式。 例如,=Fields!CustomerID.Value。result_expression
(Variant) - 針對 source_expression = destination_expression 之資料集中的資料列評估,並指定要擷取之值的運算式。 例如,=Fields!PhoneNumber.Value。dataset
指定報表中資料集名稱的常數。 例如,"ContactInformation"。
傳回
傳回 VariantArray 或在沒有相符項目時傳回 Nothing。
備註
使用 LookupSet 可從具有一對多關係之名稱/值組的指定資料集中擷取一組值。 例如,如果是資料表中的客戶識別碼,您可以使用 LookupSet 從未繫結至資料區的資料集中,擷取該客戶的所有相關電話號碼。
LookupSet 會執行下列動作:
評估目前範圍中的來源運算式。
根據指定之資料集的定序,在已經套用篩選之後針對指定之資料集的每一個資料列評估目的地運算式。
在每一個符合來源運算式和目的地運算式的項目上,針對資料集中的該資料列評估結果運算式。
傳回結果運算式值的集合。
若要從具有一對一關聯性之名稱/值組的資料集中,擷取指定之名稱的單一值,請使用 Lookup 函數 (報表產生器及 SSRS)。 若要針對一組值呼叫 Lookup,請使用 Multilookup 函數 (報表產生器及 SSRS)。
系統會套用下列限制:
當套用所有篩選運算式之後,便會評估 LookupSet。
只支援一層的查閱。 來源、目的地或結果運算式不能包含查閱函數的參考。
來源和目的地運算式必須評估為相同的資料類型。
來源、目的地和結果運算式無法包含報表或群組變數的參考。
LookupSet 不能當做下列報表項目的運算式使用:
資料來源的動態連接字串。
資料集中的導出欄位。
資料集中的查詢參數。
資料集中的篩選。
報表參數。
Report.Language 屬性。
如需詳細資訊,請參閱<彙總函式參考 (報表產生器及 SSRS)>和<總計、彙總與內建集合的運算式範圍 (報表產生器及 SSRS)>。
範例
在下列範例中,假設資料表繫結至一個資料集,此資料集包含銷售領域識別碼 TerritoryGroupID。 另一個資料集 "Stores" 包含領域中所有商店的清單,並包含領域識別碼 ID 和 StoreName 商店的名稱。
在下列運算式中,LookupSet 會比較 "Stores" 資料集中每一個資料列的 TerritoryGroupID 值與 ID。 在每次比對中,該資料列的 StoreName 欄位值都會加入至結果集。
=LookupSet(Fields!TerritoryGroupID.Value, Fields!ID.Value, Fields!StoreName.Value, "Stores")
因為 LookupSet 會傳回物件的集合,所以您無法直接在文字方塊中顯示結果運算式。 您可以將集合中每一個物件的值串連起來當做一個字串。
使用 Visual Basic 函數 Join 從一組物件建立分隔的字串。 使用逗號當做分隔符號,在單一行中結合這些物件。 在某些轉譯器中,您可能會使用 Visual Basic 換行字元 (vbCrLF) 當做分隔符號,在新行中列出每一個值。
當下列運算式當做文字方塊的 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"))