第 3 課:加入參數以選取清單中的多個值 (報表產生器 2.0)
在這一課,您將學習如何變更參數以接受多個值。這些參數稱為多重值參數。根據預設,一個參數會接受單一值。您在上一課中建立的參數 BusinessPersonID 和 DayoftheWeek 可接受單一值。若要修改參數以接受多個值,您必須知道參數是根據查詢參數自動建立的 (例如 BusinessPersonID),還是使用 [報表資料] 窗格手動建立的 (例如 DayoftheWeek)。
若要修改報表參數以接受多個值,您只需要設定報表參數屬性。如果報表參數是以查詢參數為基礎,您也必須變更查詢。如果您在篩選中使用此參數,就必須變更篩選運算子以指定一組值而非單一值。
若要取代現有的資料集
在 [報表資料] 窗格中,以滑鼠右鍵按一下 DataSet1 資料集,然後按一下 [查詢]。
以文字為基礎的查詢設計工具隨即開啟。
以下列查詢取代文字方塊中的文字:
SELECT SH.OrderDate ,DATENAME(weekday, SH.OrderDate) as Weekday ,SH.SalesOrderNumber ,SD.OrderQty ,SD.LineTotal ,P.Name AS [Product] ,PS.Name AS [Subcategory] FROM Sales.SalesPerson SP INNER JOIN Sales.SalesOrderHeader AS SH ON SP.BusinessEntityID = SH.SalesPersonID INNER JOIN Sales.SalesOrderDetail AS SD ON SH.SalesOrderID = SD.SalesOrderID INNER JOIN Production.Product AS P ON SD.ProductID = P.ProductID INNER JOIN Production.ProductSubcategory AS PS ON PS.ProductSubcategoryID = P.ProductSubcategoryID INNER JOIN Production.ProductCategory AS PC ON PC.ProductCategoryID = PS.ProductCategoryID WHERE PC.Name = 'Clothing' AND (SH.OrderDate BETWEEN (@StartDate) AND (@EndDate)) AND SH.SalesPersonID IN (@BusinessPersonID)
除了條件從等於 = 變更為包含 IN 之外,這與之前的查詢相同:
AND SH.SalesPersonID IN (@BusinessPersonID)
按一下 [執行] (!) 按鈕。提示輸入查詢參數時,請使用下表來輸入值。查詢設計工具不支援測試多重值參數。
@StartDate
20010101
@EndDate
20030101
@BusinessPersonID
290
按一下 [確定]。
結果集會顯示 BusinessPersonID = 290 的銷售人員 Ranjit Varkey Chudukatil。
編輯 BusinessPersonID 報表參數以接受多個值
在 [報表資料] 窗格中,展開 [參數],然後按兩下 <BusinessPersonID> 參數。
選取 [允許多個值] 選項。
按一下 [確定]。
按一下 [預覽]。報表就會自動執行。<BusinessPersonID> 的下拉式清單會顯示所有銷售人員的名稱。
[!附註]
([全選]) 值會提供做為多重值參數的可用值下拉式清單中的第一個值。使用此核取方塊,即可選取或清除所有值。
若要加入新的資料集以擴展報表參數的有效值
切換至 [設計] 檢視。
在 [報表資料] 窗格的工具列中,按一下 [新增],然後按一下 [資料集]。[資料集屬性] 對話方塊隨即開啟。
在 [名稱] 中,輸入 WeekDaysfromQuery。
在 [查詢類型] 中,確認 [文字] 已選取。
按一下 [查詢設計工具],然後按一下 [當成文字編輯]。
在 [查詢] 窗格中,貼上下列查詢:
SET DATEFIRST 1; SELECT DISTINCT DATEPART(weekday, S.OrderDate) as WeekdayNumber, DATENAME(weekday, S.OrderDate) as Weekday FROM Sales.SalesOrderHeader S Order by WeekdayNumber
在查詢設計工具的工具列上,按一下 [執行] (!) 按鈕。結果集會顯示序數和一週的星期幾。
按兩次 [確定],結束 [資料集屬性] 對話方塊。
WeekDaysfromQuery 資料集會出現在 [報表資料] 窗格中。
編輯參數以接受多個值、預設值與有效值
在 [報表資料] 窗格中,展開 [參數],然後按兩下 <DayoftheWeek>。[報表參數屬性] 對話方塊隨即開啟。
選取 [允許多個值]。
按一下 [可用的值]。
選取 [從查詢取得值]。
從 [資料集] 的下拉式清單中,選取 WeekDaysfromQuery。
從 [值欄位] 的下拉式清單中,選取 WeekdayNumber。
從 [標籤欄位] 的下拉式清單中,選取 Weekday。
當使用者選取參數值時,他們會從標籤中選取,但是報表會使用這些值。當您設定預設值或篩選時,這點很重要。WeekdayNumber 欄位的這些值必須是整數值。
按一下 [預設值]。
選取 [指定值]。
按一下 [加入]。
在 [值] 中,將 Friday 取代成 6。因為這些值來自同時提供星期幾編號和星期幾名稱的資料集,所以預設值必須指定星期幾編號。值 6 代表 Saturday。
按一下 [加入]。
在 [值] 中,輸入 7。這個值代表 Sunday。
按一下 [確定]。
您必須先將資料表的篩選運算式變更為使用 IN 運算子,才能預覽報表,因為 DayoftheWeek 參數接受多個值。
若要變更篩選以使用多重值參數
在 [報表資料] 窗格中,以滑鼠右鍵按一下 DataSet1,然後按一下 [資料集屬性]。
按一下 [篩選]。已經有一個從第 1 課針對 DayoftheWeek 加入的篩選。
在 [運算式] 的下拉式清單中,確認此值為 [Weekday]。
將 [運算子] 從等號 (=) 變更為 In。
在 [值] 中,輸入 [@DayoftheWeek.Label]。
指定參數標籤,以便根據標籤欄位 (而非星期幾的數值欄位) 比較星期幾的名稱。
按一下 [確定]。
資料表的篩選現在設定為使用 In 運算子,比較 Weekday 欄位的值與 DayoftheWeek 參數的標籤。選擇報表參數的多個值時,篩選會測試資料表的各個資料列,查看 DayoftheWeek 集合中的 Weekday 欄位是否存在。
按一下 [執行] 預覽報表。報表會顯示具有預設值 Saturday 和 Sunday 的報表參數 DaysoftheWeek,而它們是您指定之預設值的標籤。您可以使用下拉式清單為 DayoftheWeek 參數選取多個值。
後續步驟
您已順利將報表參數屬性從單一值變更為多重值。您已在查詢、篩選和運算式中進行必要的變更,以便使用多重值參數集合。您已學習到如何在運算式中使用多重值參數。在下一課,您將學到如何建立根據先前參數選取之值,有條件地擴展其值的參數。請參閱<第 4 課:加入串聯參數 (報表產生器 2.0)>。