第 2 課:在報表中加入串聯參數

新增: 2006 年 7 月 17 日

串聯參數提供一種方式,可在一組具有自然關聯性的參數中,為各個參數篩選可用的值。例如,在 AdventureWorks 資料庫中,每個轉售商在城市中都有特定位置的地址 (欄位 City). 眾多城市便組成省份 (欄位 StateProvince)。省份再組成國家 (地區) 或地區 (欄位 CountryRegion)。國家 (地區) 或地區組成銷售領域 (欄位 TerritoryGroup)。您可以為這些具有相依順序的欄位 (從最廣泛的類別目錄 TerritoryGroup 開始到最明確的類別目錄 City) 建立四個串聯參數。

當串聯參數顯示在報表工具列上時,報表讀者會從第一個參數選取值,這會決定下一個參數的可用值並依此類推。透過這種方式,您可以盡可能將上千種選擇篩選縮減到各個串聯參數的可管理數目。

串聯參數具有隱含的順序。在報表設計師中檢視報表參數時,參數窗格會依序列出參數。清單中的第一個參數不相依於任何其他參數。清單中的第二個參數若作為串聯參數,則會相依於前一個參數。您可以使用報表參數對話方塊中的上下箭頭按鈕,重新排列參數的順序。

在這一課,您會將四個串聯參數 (TerritoryGroup、CountryRegion、StateProvince 和 City) 加入至上一個教學課程中建立的「銷售訂單」報表。您將為各個參數建立資料庫,以擴展其可用的值清單。使用有效值資料集的查詢參數建立查詢時,會自動建立報表參數。由於是從最廣泛 (TerritoryGroup) 到最明確 (Cities) 建立有效值清單的資料集,您將會以正確的相依順序建立報表參數。對於最後的有效值資料集 (Cities),您將會學習如何手動建立報表參數,並將它與對應的查詢參數相關聯。

建立所有資料集之後,您將修改各個報表參數的預設屬性,並設定有效值和預設值屬性,以指向適當的資料集和欄位。

最後,您將修改原始資料集查詢,以加入每個報表參數的查詢參數。執行報表時,您將輪流選取每個串聯參數的值,並看到下一個參數的可用值只會列出選取第一個參數之後有效的值。

程序

開啟 Resellers Worldwide 報表

  1. SQL Server Business Intelligence Development Studio 中,開啟上一課中建立的 AdvancedParametersTutorial 報表伺服器專案。

  2. 在 [方案總管] 中,按兩下 [Resellers Worldwide] 報表。報表隨即在 [配置] 檢視中開啟。

  3. 按一下 [資料] 索引標籤。

為參數 TerritoryGroup 加入可用值的資料集

  1. [資料集] 下拉式清單中,按一下 [<新增資料集>][資料集] 對話方塊隨即開啟。

  2. [查詢] 索引標籤的 [名稱] 文字方塊中,輸入 ValidValuesforTerritoryGroup

  3. 確認 [資料來源][轉售商]

  4. 確認 [命令類型][文字]

  5. 將下列查詢貼入查詢窗格中。

    SELECT distinct [Group] as SalesTerritory
       FROM [AdventureWorks].[Sales].[SalesTerritory]
    
  6. 按一下 [執行](!),以檢視結果集。資料行 SalesTerritory 隨即與三個資料列一起出現:Europe、North America 和 Pacific。

為參數 CountryRegion 加入可用值的資料集

  1. [資料集] 下拉式清單中,按一下 [<新增資料集>][資料集] 對話方塊隨即開啟。

  2. [查詢] 索引標籤的 [名稱] 文字方塊中,輸入 ValidValuesforCountryRegion

  3. 確認 [資料來源][轉售商]

  4. 確認 [命令類型][文字]

  5. 將下列查詢貼入查詢窗格中。

    SELECT Distinct CR.Name AS CountryRegion
    FROM Sales.Store AS S
        JOIN Sales.CustomerAddress AS CA ON CA.CustomerID = S.CustomerID
        JOIN Person.Address AS A ON A.AddressID = CA.AddressID
        JOIN Person.StateProvince SP ON 
            SP.StateProvinceID = A.StateProvinceID
        JOIN Person.CountryRegion CR ON 
            CR.CountryRegionCode = SP.CountryRegionCode
        JOIN Sales.Customer C on S.CustomerID = C.CustomerID
        JOIN Sales.SalesTerritory T on C.TerritoryID = T.TerritoryID
    WHERE (T.[Group] = (@TerritoryGroup))
    Order by CR.Name
    
  6. 按一下 [執行] (!)。[定義查詢參數] 對話方塊隨即開啟。

  7. 輸入 Pacific

    結果集隨即與 CountryRegion 資料行,以及一個值為 Australia 的資料列一起出現。

    定義查詢參數 @TerritoryGroup 時,就會建立名為 TerritoryGroup 的新報表參數。

  8. (選擇性) 在 [資料集] 下拉式清單的旁邊,按一下 [編輯選取的資料集] () 按鈕,然後按一下 [參數] 索引標籤。確認查詢參數 @TerritoryGroup 繫結至報表參數 TerritoryGroup 的值 (=Parameters!TerritoryGroup.Value)。

為參數 StateProvince 加入可用值的資料集

  1. [資料集] 下拉式清單中,按一下 [<新增資料集>][資料集] 對話方塊隨即開啟。

  2. [查詢] 索引標籤的 [名稱] 文字方塊中,輸入 ValidValuesforStateProvince

  3. 確認 [資料來源][轉售商]

  4. 確認 [命令類型][文字]

  5. 將下列查詢貼入查詢窗格中。

    SELECT Distinct SP.Name AS StateProvince
    FROM Sales.Store AS S
        JOIN Sales.CustomerAddress AS CA ON CA.CustomerID = S.CustomerID
        JOIN Person.Address AS A ON A.AddressID = CA.AddressID
        JOIN Person.StateProvince SP ON 
            SP.StateProvinceID = A.StateProvinceID
        JOIN Person.CountryRegion CR ON 
            CR.CountryRegionCode = SP.CountryRegionCode
    WHERE (CR.Name = @CountryRegion)
    Order by SP.Name
    
  6. 按一下 [執行](!),以檢視結果集。[定義查詢參數] 對話方塊隨即開啟。

  7. [參數值] 文字方塊中,輸入 Australia。按一下 [確定]

    資料行 StateProvince 隨即與四個資料列一起出現:New South Wales、Queensland、South Australia 和 Victoria。

為參數 City 加入可用值的資料集

  1. [資料集] 下拉式清單中,按一下 [<新增資料集>][資料集] 對話方塊隨即開啟。

  2. [查詢] 索引標籤的 [名稱] 文字方塊中,輸入 ValidValuesforCity

  3. 確認 [資料來源][轉售商]

  4. 確認 [命令類型][文字]

  5. 將下列查詢貼入查詢窗格中。

    SELECT Distinct A.City 
    FROM Sales.Store AS S
        JOIN Sales.CustomerAddress AS CA ON CA.CustomerID = S.CustomerID
        JOIN Person.Address AS A ON A.AddressID = CA.AddressID
        JOIN Person.StateProvince SP ON 
            SP.StateProvinceID = A.StateProvinceID
        JOIN Person.CountryRegion CR ON 
            CR.CountryRegionCode = SP.CountryRegionCode
        JOIN Sales.Customer C on S.CustomerID = C.CustomerID
        JOIN Sales.SalesTerritory T on C.TerritoryID = T.TerritoryID
    WHERE (
        T.[Group] = (@TerritoryGroup) AND
        CR.[Name] = (@CountryRegion) AND
        SP.[Name] = (@StateProvince)
        )
    Order by A.City
    
  6. 按一下 [執行](!),以檢視結果集。[定義查詢參數] 對話方塊隨即開啟。

  7. [參數值] 文字方塊中,使用下表為每個查詢參數輸入值。

參數名稱 參數值

@TerritoryGroup

Pacific

@CountryRegion

Australia

@StateProvince

Victoria

  1. 按一下 [確定]
    資料行 City 隨即與三個資料列一起出現:Melbourne、Seaford 和 South Melbourne。

現在,您已建立四個串聯參數。下一步,您將為已建立對應至查詢參數的報表參數編輯屬性。您將設定每個參數使用適當的資料集,以便擷取可用的值集合。

為 TerritoryGroup 報表參數設定可用的值

  1. [報表] 功能表上,按一下 [報表參數][報表參數] 對話方塊隨即開啟,顯示 [參數] 窗格中已選取 TerritoryGroup

  2. 確認 [資料類型]String

  3. [提示] 文字方塊中,輸入 Select a Territory Group:

  4. 確認已取消選取所有核取方塊。

  5. [可用的值] 區段中,選取 [從查詢]

  6. [資料集] 下拉式清單中,選取 [ValidValuesforTerritoryGroup]

  7. [值欄位] 下拉式清單中,選取 [SalesTerritory]。

  8. [標籤欄位] 下拉式清單中,選取 [SalesTerritory]。

  9. [預設值] 區段中選取 [非查詢的]

  10. 在文字方塊中,輸入 North America

    您可以將預設值設定為特定值或資料集欄位的預設值。由於此參數的類型為 String,因此,您可以直接在文字方塊中輸入值。對於其他資料類型,您可以輸入以等號 (=) 開頭的運算式。

  11. 按一下 [確定]

  12. (選擇性) 按一下 [預覽] 索引標籤。TerritoryGroup 參數隨即與預設值 Europe,以及 ValidValuesforTerritoryGroup 資料集之 SalesTerritory 欄位的有效值一起出現。

    在您變更本課最後程序中的 Resellers 資料集查詢以前,報表資料不會出現任何變更。

為 CountryRegion 報表參數設定可用的值

  1. [報表] 功能表上,按一下 [報表參數][報表參數] 對話方塊隨即開啟。

  2. [參數] 窗格中,選取 [CountryRegion]

  3. 確認 [資料類型]String

  4. [提示] 文字方塊中,輸入 Select a Country/Region:

  5. 確認已取消選取所有核取方塊。

  6. [可用的值] 區段中,選取 [從查詢]

  7. [資料集] 下拉式清單中,選取 [ValidValuesforCountryRegion]

  8. [值欄位] 下拉式清單中,選取 [CountryRegion]。

  9. [標籤欄位] 下拉式清單中,選取 [CountryRegion]。

  10. [預設值] 區段中,選取 [從查詢]

  11. [資料集] 下拉式清單上,選取 [ValidValuesforCountryRegion]

  12. [值欄位] 下拉式清單中,選取 [CountryRegion]。

  13. 按一下 [確定]

  14. (選擇性) 按一下 [預覽] 索引標籤。選取 TerritoryGroup 的值。選取 CountryRegion 參數的值。確認您看到的 CountryRegion 值對所選取的 Territory 群組是有效的。

為 StateProvince 報表參數設定可用的值

  1. [報表] 功能表上,按一下 [報表參數][報表參數] 對話方塊隨即開啟。

  2. [參數] 窗格中,選取 [StateProvince]

  3. 確認 [資料類型]String

  4. [提示] 文字方塊中,輸入 Select a State/Province:

  5. 確認已取消選取所有核取方塊。

  6. [可用的值] 區段中,選取 [從查詢]

  7. [資料集] 下拉式清單中,選取 [ValidValuesforStateProvince]

  8. [值欄位] 下拉式清單中,選取 [StateProvince]。

  9. [標籤欄位] 下拉式清單中,選取 [StateProvince]。

  10. [預設值] 區段中,選取 [從查詢]

  11. [資料集] 下拉式清單上,選取 [ValidValuesforStateProvince]

  12. [值欄位] 下拉式清單中,選取 [StateProvince]。

  13. 按一下 [確定]

  14. (選擇性) 按一下 [預覽] 索引標籤。選取 TerritoryGroup 的值。選取 CountryRegion 參數的值。選取 StateProvince 參數的值。確認您看到的 StateProvince 值對所選取的 TerritoryGroupCountryRegion 是有效的。

建立 City 報表參數並設定其屬性

  1. [報表] 功能表上,按一下 [報表參數][報表參數] 對話方塊隨即開啟。

  2. 請注意,在 [參數] 窗格中,沒有名稱為 City 的報表參數。

    為資料集定義包含參數的查詢時,就會自動建立報表參數。到目前為止所建立的資料集查詢中,沒有一個包含 @City 查詢參數。您可以建立名稱為 City 的報表參數,如此,當您定義未包含 @City 查詢參數的查詢時,若有對應的名稱 (沒有查詢參數指示項 "@"),查詢參數將會自動繫結至報表參數。

  3. 按一下 [加入]。隨即建立含有預設屬性的報表參數。

  4. [屬性] 區段的 [名稱] 文字方塊中,輸入 City

  5. 確認 [資料類型]String

  6. [提示] 文字方塊中,輸入 Select a City:

  7. 確認已取消選取所有核取方塊。

  8. [可用的值] 區段中,選取 [從查詢]

  9. [資料集] 下拉式清單中,選取 [ValidValuesforCity]

  10. [值欄位] 下拉式清單中,選取 [City]。

  11. [標籤欄位] 下拉式清單中,選取 [City]。

  12. [預設值] 區段中,選取 [從查詢]

  13. [資料集] 下拉式清單上,選取 [ValidValuesforCity]

  14. [值欄位] 下拉式清單中,選取 [City]。

  15. 按一下 [確定]

  16. (選擇性) 按一下 [預覽] 索引標籤。選取 TerritoryGroupCountryRegionStateProvince 參數的值。確認您看到的 City 參數值對所選擇的選取項目是有效的。

到目前為止,您已建立串聯參數值。現在,您必須將這些值包含在資料表資料區域的資料集查詢中,以便讓所選取的參數包含在可擷取資料表資料的查詢中。

修改轉售商銷售訂單資料集的查詢,以加入現有的查詢參數

  1. 在 [資料] 檢視的 [資料集] 下拉式清單中,選取 [轉售商]。上一課中建立的原始查詢字串隨即出現在查詢窗格中。

  2. 以下列查詢取代查詢窗格中的文字:

    SELECT S.CustomerID, SO.SalesOrderNumber, SO.OrderDate, SO.TotalDue,
        S.Name AS Store, A.City, SP.Name AS State, CR.Name
        AS CountryRegion, 
        SC.ContactID As StoreContactID, T.[Group] As TerritoryGroup
    FROM Sales.Store AS S
        JOIN Sales.CustomerAddress AS CA ON CA.CustomerID = S.CustomerID
        JOIN Person.Address AS A ON A.AddressID = CA.AddressID
        JOIN Person.StateProvince SP ON 
            SP.StateProvinceID = A.StateProvinceID
        JOIN Person.CountryRegion CR ON 
            CR.CountryRegionCode = SP.CountryRegionCode
        JOIN Sales.SalesOrderHeader AS SO ON 
        S.CustomerID = SO.CustomerID
        JOIN Sales.StoreContact SC ON  S.CustomerID = SC.CustomerID
        JOIN Sales.Customer C on S.CustomerID = C.CustomerID
        JOIN Sales.SalesTerritory T on C.TerritoryID = T.TerritoryID
    WHERE(
        (T.[Group] = (@TerritoryGroup))
        AND
        (CR.Name = (@CountryRegion))
         AND
         (SP.Name = (@StateProvince))
        AND
        (A.City = (@City))
       )
    ORDER BY S.CustomerID 
    

    查詢現在包含了使用報表參數值的查詢參數。

  3. 按一下 [執行](!),以檢視結果集。[定義查詢參數] 對話方塊隨即開啟。

  4. [參數值] 資料行中,使用下表為每個查詢參數輸入值。

參數名稱 參數值

@TerritoryGroup

Pacific

@CountryRegion

Australia

@StateProvince

Victoria

@City

Melbourne

  1. 按一下 [確定]
    結果集包含墨爾本城市的轉售商銷售額。
    在 Resellers 資料集的查詢定義加入查詢參數時,參數會自動設定為從對應的報表參數值取得其值。
  2. (選擇性) 在 [資料集] 下拉式清單的旁邊,按一下 [編輯選取的資料集] () 按鈕,然後按一下 [參數] 索引標籤。確認查詢參數 @TerritoryGroup@CountryRegion@StateProvince@City 都繫結至對應之報表參數的值。

設定 NoRows 值

  1. 按一下 [配置] 索引標籤,以切換到 [配置] 檢視。

  2. 按一下資料表,資料表控點隨即顯示。按一下資料表的角控點,以選取此資料表。資料表隨即以灰色外框出現。

  3. 在 [屬性] 視窗中,找出 NoRows 屬性。將下列文字貼入相鄰的文字方塊中。

    There are no resellers in this area.

建立主報表標題和參數值文字方塊

  1. 按一下 [配置] 索引標籤,以切換到 [配置] 檢視。

  2. 以滑鼠右鍵按一下包含報表處理時間戳記的文字方塊,並選取 [運算式]

  3. 按一下 [值] 文字方塊旁邊的運算式 ([Fx]) 按鈕。[編輯運算式] 對話方塊隨即開啟。以下列內容取代時間戳記運算式:

    ="Report Processed Date: " & 
      Globals!ExecutionTime.ToShortDateString() & " " & 
      Globals!ExecutionTime.ToShortTimeString() & vbCrLf & 
      "Sales Territory for: " 
    & Parameters!TerritoryGroup.Value & ", " 
    & Parameters!CountryRegion.Value & ", "
    & Parameters!StateProvince.Value & ", "
    & Parameters!City.Value
    
  4. 按一下 [預覽]。嘗試選取不同的參數值。請注意,當您選取每個連續的參數時,下一個參數的下拉式清單只會根據您所選取的項目顯示可用的值。即使您選取新參數,報表資料也不會變更。若要以新選取的參數重新處理報表,請按一下 [檢視報表]

後續的步驟

您已順利建立具有依領域顯示轉售商銷售額之串聯參數的報表。在下一課,您將學習如何使用參數,變更資料表詳細資料列和資料表群組的排序方式。請參閱<第 3 課:使用參數變更初始排序和互動式排序>。

請參閱

其他資源

在 Reporting Services 中使用參數
使用參數來控制報表資料

說明及資訊

取得 SQL Server 2005 協助