共用方式為


第 3 課:加入參數以選取清單中的多個值 (報表產生器 2.0)

在這一課,您將學習如何變更參數以接受多個值。這些參數稱為多重值參數。根據預設,一個參數會接受單一值。您在上一課中建立的參數 BusinessPersonID 和 DayoftheWeek 可接受單一值。若要修改參數以接受多個值,您必須知道參數是根據查詢參數自動建立的 (例如 BusinessPersonID),還是使用 [報表資料] 窗格手動建立的 (例如 DayoftheWeek)。

若要修改報表參數以接受多個值,您只需要設定報表參數屬性。如果報表參數是以查詢參數為基礎,您也必須變更查詢。如果您在篩選中使用此參數,就必須變更篩選運算子以指定一組值而非單一值。

若要取代現有的資料集

  1. 在 [報表資料] 窗格中,以滑鼠右鍵按一下 DataSet1 資料集,然後按一下 [查詢]

    以文字為基礎的查詢設計工具隨即開啟。

  2. 以下列查詢取代文字方塊中的文字:

    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)
    
  3. 按一下 [執行] (!) 按鈕。提示輸入查詢參數時,請使用下表來輸入值。查詢設計工具不支援測試多重值參數。

    @StartDate

    20010101

    @EndDate

    20030101

    @BusinessPersonID

    290

  4. 按一下 [確定]。 

    結果集會顯示 BusinessPersonID = 290 的銷售人員 Ranjit Varkey Chudukatil。

編輯 BusinessPersonID 報表參數以接受多個值

  1. 在 [報表資料] 窗格中,展開 [參數],然後按兩下 <BusinessPersonID> 參數。

  2. 選取 [允許多個值] 選項。

  3. 按一下 [確定]。 

  4. 按一下 [預覽]。報表就會自動執行。<BusinessPersonID> 的下拉式清單會顯示所有銷售人員的名稱。

[!附註]

([全選]) 值會提供做為多重值參數的可用值下拉式清單中的第一個值。使用此核取方塊,即可選取或清除所有值。

若要加入新的資料集以擴展報表參數的有效值

  1. 切換至 [設計] 檢視。

  2. 在 [報表資料] 窗格的工具列中,按一下 [新增],然後按一下 [資料集][資料集屬性] 對話方塊隨即開啟。

  3. [名稱] 中,輸入 WeekDaysfromQuery。

  4. [查詢類型] 中,確認 [文字] 已選取。

  5. 按一下 [查詢設計工具],然後按一下 [當成文字編輯]

  6. 在 [查詢] 窗格中,貼上下列查詢:

    SET DATEFIRST 1;
    SELECT DISTINCT 
       DATEPART(weekday, S.OrderDate) as WeekdayNumber,
       DATENAME(weekday, S.OrderDate) as Weekday
       FROM Sales.SalesOrderHeader S
    Order by WeekdayNumber
    
  7. 在查詢設計工具的工具列上,按一下 [執行] (!) 按鈕。結果集會顯示序數和一週的星期幾。

  8. 按兩次 [確定],結束 [資料集屬性] 對話方塊。

    WeekDaysfromQuery 資料集會出現在 [報表資料] 窗格中。

編輯參數以接受多個值、預設值與有效值

  1. 在 [報表資料] 窗格中,展開 [參數],然後按兩下 <DayoftheWeek>。[報表參數屬性] 對話方塊隨即開啟。

  2. 選取 [允許多個值]

  3. 按一下 [可用的值]

  4. 選取 [從查詢取得值]

  5. [資料集] 的下拉式清單中,選取 WeekDaysfromQuery。

  6. [值欄位] 的下拉式清單中,選取 WeekdayNumber。

  7. [標籤欄位] 的下拉式清單中,選取 Weekday。

當使用者選取參數值時,他們會從標籤中選取,但是報表會使用這些值。當您設定預設值或篩選時,這點很重要。WeekdayNumber 欄位的這些值必須是整數值。

  1. 按一下 [預設值]

  2. 選取 [指定值]

  3. 按一下 [加入]

  4. [值] 中,將 Friday 取代成 6。因為這些值來自同時提供星期幾編號和星期幾名稱的資料集,所以預設值必須指定星期幾編號。值 6 代表 Saturday。

  5. 按一下 [加入]

  6. [值] 中,輸入 7。這個值代表 Sunday。

  7. 按一下 [確定]。 

    您必須先將資料表的篩選運算式變更為使用 IN 運算子,才能預覽報表,因為 DayoftheWeek 參數接受多個值。

若要變更篩選以使用多重值參數

  1. 在 [報表資料] 窗格中,以滑鼠右鍵按一下 DataSet1,然後按一下 [資料集屬性]

  2. 按一下 [篩選]。已經有一個從第 1 課針對 DayoftheWeek 加入的篩選。

  3. [運算式] 的下拉式清單中,確認此值為 [Weekday]。

  4. [運算子] 從等號 (=) 變更為 In

  5. [值] 中,輸入 [@DayoftheWeek.Label]。

    指定參數標籤,以便根據標籤欄位 (而非星期幾的數值欄位) 比較星期幾的名稱。

  6. 按一下 [確定]。 

    資料表的篩選現在設定為使用 In 運算子,比較 Weekday 欄位的值與 DayoftheWeek 參數的標籤。選擇報表參數的多個值時,篩選會測試資料表的各個資料列,查看 DayoftheWeek 集合中的 Weekday 欄位是否存在。

  7. 按一下 [執行] 預覽報表。報表會顯示具有預設值 Saturday 和 Sunday 的報表參數 DaysoftheWeek,而它們是您指定之預設值的標籤。您可以使用下拉式清單為 DayoftheWeek 參數選取多個值。

後續步驟

您已順利將報表參數屬性從單一值變更為多重值。您已在查詢、篩選和運算式中進行必要的變更,以便使用多重值參數集合。您已學習到如何在運算式中使用多重值參數。在下一課,您將學到如何建立根據先前參數選取之值,有條件地擴展其值的參數。請參閱<第 4 課:加入串聯參數 (報表產生器 2.0)>。