第 3 課:利用可用的值清單加入單一值參數
新增: 2006 年 7 月 17 日
可用值 (或有效值) 提供報表讀者一份報表參數的可能值清單。身為報表作者,您可以從特別設計來擷取資料來源中一組值的查詢提供有效值,也可以提供一組預先定義的值。透過將一組可用的值繫結至報表處理時所執行的資料集查詢,您就可以確保從下拉式清單只能選擇資料庫中現有的值。
在這一課,您將修改 Sales Orders 報表,以便從 AdventureWorks 資料庫提供一份可用銷售人員姓名的下拉式清單。您將會設定資料表屬性,在所選取參數值的結果集中沒有資料列時顯示訊息。當您選擇姓名並檢視報表時,報表只會顯示該銷售人員的銷售額。
開啟銷售訂單報表
在 [SQL Server Business Intelligence Development Studio] 中,開啟上一課中所建立的 Tutorial Report Server 專案。
在 [方案總管] 中,按兩下 [Sales Orders] 報表。報表隨即在 [配置] 檢視中開啟。
按一下 [資料] 索引標籤。
在 AdventureWorks 資料集查詢中加入查詢參數
在 [資料] 索引標籤上,從 [資料集] 下拉式清單中選擇 [AdventureWorks]。
在查詢中加入新的查詢參數 @SalesPersonID。在查詢中,擴充 WHERE 子句以加入下列比較:
AND S.SalesPersonID = (@SalesPersonID)
。以下列文字取代現有查詢:
SELECT S.OrderDate, DATENAME(weekday, S.OrderDate) as Weekday, S.SalesOrderNumber, S.TotalDue, C.FirstName, C.LastName, C.ContactID FROM HumanResources.Employee E INNER JOIN Person.Contact C ON E.ContactID = C.ContactID INNER JOIN Sales.SalesOrderHeader S ON E.EmployeeID = S.SalesPersonID WHERE ( S.OrderDate BETWEEN (@StartDate) AND (@EndDate) AND S.SalesPersonID = (@SalesPersonID) )
附註: 查詢參數兩邊的括號是查詢語法中的重要部分。 按一下 [執行] (!) 按鈕。提示輸入查詢參數時,請使用下表來輸入值。
@StartDate
20010101
@EndDate
20030101
@SalesPersonID
286
按一下 [確定]。結果集顯示銷售人員 Ranjit Varkey Chudakatil 的 SalesPersonID = 286。
(選擇性) 確認查詢參數 @SalesPersonID 具有值:
=Parameters!SalesPersonID.Value
。按一下 [編輯選取的資料集] (…) 按鈕,並選取 [參數] 索引標籤。(選擇性) 確認報表參數 SalesPersonID 已自動為您建立。從 [報表] 功能表中,選取 [報表參數]。[報表參數] 對話方塊隨即開啟。確認 SalesPersonID 是在 [參數] 窗格中。您將在本主題稍後的程序中編輯此參數。
在下一個程序中,您將另外建立資料集,為報表參數 SalesPersonID 提供可用的值下拉式清單的值。
為可用的值建立 SalesPersons 資料集
從 [資料集] 下拉式清單中,選取 [<新增資料集>]。[資料集] 對話方塊隨即開啟。
提供新資料集的名稱。在 [名稱] 欄位中,輸入 SalesPersons。此資料集將用來作為有效值清單的輸入。
將下列 Transact-SQL 查詢貼入查詢窗格中:
SELECT SP.SalesPersonID, C.FirstName, C.LastName FROM Sales.SalesPerson AS SP INNER JOIN HumanResources.Employee AS E ON E.EmployeeID = SP.SalesPersonID INNER JOIN Person.Contact AS C ON C.ContactID = E.ContactID
按一下 [執行] (!) 按鈕。SalesPersonID、FirstName 和 LastName 資料行會出現在結果集中,並作為資料集 SalesPersons 中的欄位。
您可以在查詢中加入導出欄位 (例如,在 SELECT 陳述式中加入
LastName + N' ' + FirstName as Name
作為其他資料行),不過,Reporting Services 提供一種方式,可以從現有的資料集欄位建立新的導出欄位。當查詢使用預存程序來擷取一組預先定義的資料行時,您就可以使用這個功能。在下一個程序中,您將建立新的資料集欄位來結合兩個現有欄位。
加入新的導出資料集欄位
在 [資料集] 視窗中,以滑鼠右鍵按一下 SalesPersons 資料集,然後選取 [加入]。
如果 [資料集] 視窗尚未開啟,請按 ALT+CTRL+D。
在 [名稱] 文字方塊中,輸入 Name。
選取 [導出欄位] 選項。
將下列運算式貼入文字方塊中:
=Fields!LastName.Value + ", " + Fields!FirstName.Value
按一下 [確定]。
從資料工具列中,按一下 [重新整理欄位]。新欄位 Name 隨即出現在資料集 SalesPersons 的欄位集合中。
在下一個程序中,您將設定資料表資料區域屬性 NoRows。當為資料表相關的資料集所擷取的資料沒有包含結果時,就會顯示此屬性中的文字。
在資料表中加入 NoRows 訊息
按一下 [配置] 索引標籤,以切換到 [配置] 檢視。
從 [檢視] 功能表中,選取 [屬性] 視窗。
從 [屬性] 視窗的物件下拉式清單中,選取資料表。依預設,資料表名稱為 table1。
在 [屬性] 視窗中捲動至 [NoRows]。
按一下 [NoRows] 旁邊的文字方塊,然後輸入下列文字:
此參數組合沒有可用的結果。
當特定查詢參數的結果集沒有產生任何資料列時,就會顯示這個訊息。
(選擇性) 按一下 [預覽]。在 SalesPersonID 參數中,輸入 1。[NoRows] 訊息會顯示在資料表資料區域的位置。
在下一個程序中,您將編輯自動產生的報表參數 SalesPersonID。您將會設定報表參數,以顯示可用的值下拉式清單中的銷售人員姓名,而不是資料庫識別碼。
設定報表參數 SalesPersonID 的屬性
在 [報表] 功能表上,選取 [報表參數]。[報表參數] 對話方塊隨即開啟。SalesPersonID 參數會出現在 [參數] 窗格中。
從 [資料類型] 下拉式清單中,選取 [整數]。
在 [提示] 文字方塊中,輸入 Select Sales Person:。
在 [可用的值] 區段中,選取 [從查詢]。
從 [資料集] 下拉式清單中,選取 [SalesPersons]。
對 [值] 欄位,選取 [SalesPersonID]。
對 [標籤] 欄位,選取 [姓名]。
SalesPersonID 參數有效值的下拉式清單現在將會顯示每個銷售人員的姓名,而不是 SalesPersonID。
在 [預設值] 區段中,選取 [從查詢]。
從 [資料集] 下拉式清單中,選取 [SalesPersons]。
對 [值] 欄位,選取 [SalesPersonID]。
按一下 [確定]。
按一下 [預覽] 索引標籤。報表會顯示列有銷售人員姓名的下拉式清單。
後續的步驟
您已順利在現有報表中加入單一值參數。下一步,您會將 DayoftheWeek 和 SalesOrderID 參數修改成多重值。請參閱<第 4 課:加入具有全選的多重值參數>。
請參閱
其他資源
在 Reporting Services 中使用參數
使用單一值和多重值參數
在運算式中使用參數