2013年9月30日 星期一

[SQL Server 2008R2][SSRS] 參照函數 Lookup、MultiLookup、LookupSet

在 SSRS 中,一張報表內可以包含多個資料集,但在一個資料區域就僅限於一個資料集,如果希望同時參考多個資料表,其概念類似 JOIN 是透過鍵值的對應,以傳回一個值或一組值。
一般會使用這種方式是因為不同的資料集來自不同的資料來源 ( SQL、Oracle....),所以無法在資料集的 SQL 語法中使用 JOIN 方式把要的值合併在同一個資料集中。

查閱函數在 SSRS 中分類在其他函數這個類別中

  • Lookup:從指定之運算式的資料集傳回值
  • MultiLookup:從包含名稱 / 值組的資料集傳回第一組符合某一組名稱的值。
  • LookupSet:從指定之運算式的資料集傳回一組值。

其中 Lookup 函數處理是一對一的關係,而且回傳是一個值。而 MultiLookup 雖然也是一對一,但是它的基礎是基於一個複選的欄位,因此它傳回的是一個一對一的集合。而 LookupSet 則是回傳一對多,只要符合條件的案例都會被傳回。

Lookup 函數
= Lookup ( 原始資料集鍵值欄位 , 參照資料集鍵值欄位 , 參照資料集回傳欄位 , " 參照資料集名稱 " )
例:透過 ProductID 欄位自 Product 資料集傳回產品名稱
= Lookup (Fields!ProductID.Value , Fields!ProductID.Value , Fields!Name.Value , "Product")


MultiLookup 函數
= Join ( MultiLookup ( Split ( 複選欄位 , ", " ) , 參照資料集鍵值欄位 , 參照資料集回傳欄位 , "參照資料集名稱" ) ), ", " )
例:透過複選的 CategoryList.Value 欄位,並利用 CategoryID 欄位自 Category 資料集傳回 CategoryName
= Join ( MultiLookup (Split (Fields!CategoryList.Value , ", ") , Fields!CategoryID.Value , Fields!CategoryName.Value , "Category" ) ) , ", " )


Lookup 函數
= Join ( LookupSet ( 原始資料集鍵值欄位 , 參照資料集鍵值欄位 , 參照資料集回傳欄位 , "參照資料集名稱" ) , ", " )
例:透過 TerritoryGroupID.Value 欄位,並利用 ID 欄位自 Stores 資料集傳回 StoreName
= Join ( LookupSet (Fields!TerritoryGroupID.Value , Fields!ID.Value , Fields!StoreName.Value , "Stores" ) , ", " )


參考:
Lookup(source_expression, destination_expression, result_expression, dataset)
http://technet.microsoft.com/zh-tw/library/ee210531.aspx



Multilookup(source_expression, destination_expression, result_expression, dataset)
http://technet.microsoft.com/zh-tw/library/ee210450.aspx


LookupSet(source_expression, destination_expression, result_expression, dataset)
http://technet.microsoft.com/zh-tw/library/ee240819.aspx

1 則留言:

Curtain 提到...

感謝大大分享~~

終於解掉跨不同資料庫的問題了~~