第 2 課:在報表中加入串聯參數
新增: 2006 年 7 月 17 日
串聯參數提供一種方式,可在一組具有自然關聯性的參數中,為各個參數篩選可用的值。例如,在 AdventureWorks 資料庫中,每個轉售商在城市中都有特定位置的地址 (欄位 City). 眾多城市便組成省份 (欄位 StateProvince)。省份再組成國家 (地區) 或地區 (欄位 CountryRegion)。國家 (地區) 或地區組成銷售領域 (欄位 TerritoryGroup)。您可以為這些具有相依順序的欄位 (從最廣泛的類別目錄 TerritoryGroup 開始到最明確的類別目錄 City) 建立四個串聯參數。
當串聯參數顯示在報表工具列上時,報表讀者會從第一個參數選取值,這會決定下一個參數的可用值並依此類推。透過這種方式,您可以盡可能將上千種選擇篩選縮減到各個串聯參數的可管理數目。
串聯參數具有隱含的順序。在報表設計師中檢視報表參數時,參數窗格會依序列出參數。清單中的第一個參數不相依於任何其他參數。清單中的第二個參數若作為串聯參數,則會相依於前一個參數。您可以使用報表參數對話方塊中的上下箭頭按鈕,重新排列參數的順序。
在這一課,您會將四個串聯參數 (TerritoryGroup、CountryRegion、StateProvince 和 City) 加入至上一個教學課程中建立的「銷售訂單」報表。您將為各個參數建立資料庫,以擴展其可用的值清單。使用有效值資料集的查詢參數建立查詢時,會自動建立報表參數。由於是從最廣泛 (TerritoryGroup) 到最明確 (Cities) 建立有效值清單的資料集,您將會以正確的相依順序建立報表參數。對於最後的有效值資料集 (Cities),您將會學習如何手動建立報表參數,並將它與對應的查詢參數相關聯。
建立所有資料集之後,您將修改各個報表參數的預設屬性,並設定有效值和預設值屬性,以指向適當的資料集和欄位。
最後,您將修改原始資料集查詢,以加入每個報表參數的查詢參數。執行報表時,您將輪流選取每個串聯參數的值,並看到下一個參數的可用值只會列出選取第一個參數之後有效的值。
程序
開啟 Resellers Worldwide 報表
在 SQL Server Business Intelligence Development Studio 中,開啟上一課中建立的 AdvancedParametersTutorial 報表伺服器專案。
在 [方案總管] 中,按兩下 [Resellers Worldwide] 報表。報表隨即在 [配置] 檢視中開啟。
按一下 [資料] 索引標籤。
為參數 TerritoryGroup 加入可用值的資料集
從 [資料集] 下拉式清單中,按一下 [<新增資料集>]。[資料集] 對話方塊隨即開啟。
在 [查詢] 索引標籤的 [名稱] 文字方塊中,輸入 ValidValuesforTerritoryGroup。
確認 [資料來源] 是 [轉售商]。
確認 [命令類型] 是 [文字]。
將下列查詢貼入查詢窗格中。
SELECT distinct [Group] as SalesTerritory FROM [AdventureWorks].[Sales].[SalesTerritory]
按一下 [執行](!),以檢視結果集。資料行 SalesTerritory 隨即與三個資料列一起出現:Europe、North America 和 Pacific。
為參數 CountryRegion 加入可用值的資料集
從 [資料集] 下拉式清單中,按一下 [<新增資料集>]。[資料集] 對話方塊隨即開啟。
在 [查詢] 索引標籤的 [名稱] 文字方塊中,輸入 ValidValuesforCountryRegion。
確認 [資料來源] 是 [轉售商]。
確認 [命令類型] 是 [文字]。
將下列查詢貼入查詢窗格中。
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
按一下 [執行] (!)。[定義查詢參數] 對話方塊隨即開啟。
輸入 Pacific。
結果集隨即與 CountryRegion 資料行,以及一個值為 Australia 的資料列一起出現。
定義查詢參數 @TerritoryGroup 時,就會建立名為 TerritoryGroup 的新報表參數。
(選擇性) 在 [資料集] 下拉式清單的旁邊,按一下 [編輯選取的資料集] (…) 按鈕,然後按一下 [參數] 索引標籤。確認查詢參數 @TerritoryGroup 繫結至報表參數 TerritoryGroup 的值 (
=Parameters!TerritoryGroup.Value
)。
為參數 StateProvince 加入可用值的資料集
從 [資料集] 下拉式清單中,按一下 [<新增資料集>]。[資料集] 對話方塊隨即開啟。
在 [查詢] 索引標籤的 [名稱] 文字方塊中,輸入 ValidValuesforStateProvince。
確認 [資料來源] 是 [轉售商]。
確認 [命令類型] 是 [文字]。
將下列查詢貼入查詢窗格中。
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
按一下 [執行](!),以檢視結果集。[定義查詢參數] 對話方塊隨即開啟。
在 [參數值] 文字方塊中,輸入 Australia。按一下 [確定]。
資料行 StateProvince 隨即與四個資料列一起出現:New South Wales、Queensland、South Australia 和 Victoria。
為參數 City 加入可用值的資料集
從 [資料集] 下拉式清單中,按一下 [<新增資料集>]。[資料集] 對話方塊隨即開啟。
在 [查詢] 索引標籤的 [名稱] 文字方塊中,輸入 ValidValuesforCity。
確認 [資料來源] 是 [轉售商]。
確認 [命令類型] 是 [文字]。
將下列查詢貼入查詢窗格中。
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
按一下 [執行](!),以檢視結果集。[定義查詢參數] 對話方塊隨即開啟。
在 [參數值] 文字方塊中,使用下表為每個查詢參數輸入值。
參數名稱 | 參數值 |
---|---|
@TerritoryGroup |
Pacific |
@CountryRegion |
Australia |
@StateProvince |
Victoria |
- 按一下 [確定]。
資料行 City 隨即與三個資料列一起出現:Melbourne、Seaford 和 South Melbourne。
現在,您已建立四個串聯參數。下一步,您將為已建立對應至查詢參數的報表參數編輯屬性。您將設定每個參數使用適當的資料集,以便擷取可用的值集合。
為 TerritoryGroup 報表參數設定可用的值
在 [報表] 功能表上,按一下 [報表參數]。[報表參數] 對話方塊隨即開啟,顯示 [參數] 窗格中已選取 TerritoryGroup。
確認 [資料類型] 是 String。
在 [提示] 文字方塊中,輸入 Select a Territory Group:。
確認已取消選取所有核取方塊。
在 [可用的值] 區段中,選取 [從查詢]。
從 [資料集] 下拉式清單中,選取 [ValidValuesforTerritoryGroup]。
在 [值欄位] 下拉式清單中,選取 [SalesTerritory]。
在 [標籤欄位] 下拉式清單中,選取 [SalesTerritory]。
在 [預設值] 區段中選取 [非查詢的]。
在文字方塊中,輸入 North America。
您可以將預設值設定為特定值或資料集欄位的預設值。由於此參數的類型為 String,因此,您可以直接在文字方塊中輸入值。對於其他資料類型,您可以輸入以等號 (=) 開頭的運算式。
按一下 [確定]。
(選擇性) 按一下 [預覽] 索引標籤。TerritoryGroup 參數隨即與預設值 Europe,以及 ValidValuesforTerritoryGroup 資料集之 SalesTerritory 欄位的有效值一起出現。
在您變更本課最後程序中的 Resellers 資料集查詢以前,報表資料不會出現任何變更。
為 CountryRegion 報表參數設定可用的值
在 [報表] 功能表上,按一下 [報表參數]。[報表參數] 對話方塊隨即開啟。
在 [參數] 窗格中,選取 [CountryRegion]。
確認 [資料類型] 是 String。
在 [提示] 文字方塊中,輸入 Select a Country/Region:。
確認已取消選取所有核取方塊。
在 [可用的值] 區段中,選取 [從查詢]。
從 [資料集] 下拉式清單中,選取 [ValidValuesforCountryRegion]。
在 [值欄位] 下拉式清單中,選取 [CountryRegion]。
在 [標籤欄位] 下拉式清單中,選取 [CountryRegion]。
在 [預設值] 區段中,選取 [從查詢]。
在 [資料集] 下拉式清單上,選取 [ValidValuesforCountryRegion]。
在 [值欄位] 下拉式清單中,選取 [CountryRegion]。
按一下 [確定]。
(選擇性) 按一下 [預覽] 索引標籤。選取 TerritoryGroup 的值。選取 CountryRegion 參數的值。確認您看到的 CountryRegion 值對所選取的 Territory 群組是有效的。
為 StateProvince 報表參數設定可用的值
在 [報表] 功能表上,按一下 [報表參數]。[報表參數] 對話方塊隨即開啟。
在 [參數] 窗格中,選取 [StateProvince]。
確認 [資料類型] 是 String。
在 [提示] 文字方塊中,輸入 Select a State/Province:。
確認已取消選取所有核取方塊。
在 [可用的值] 區段中,選取 [從查詢]。
從 [資料集] 下拉式清單中,選取 [ValidValuesforStateProvince]。
在 [值欄位] 下拉式清單中,選取 [StateProvince]。
在 [標籤欄位] 下拉式清單中,選取 [StateProvince]。
在 [預設值] 區段中,選取 [從查詢]。
在 [資料集] 下拉式清單上,選取 [ValidValuesforStateProvince]。
在 [值欄位] 下拉式清單中,選取 [StateProvince]。
按一下 [確定]。
(選擇性) 按一下 [預覽] 索引標籤。選取 TerritoryGroup 的值。選取 CountryRegion 參數的值。選取 StateProvince 參數的值。確認您看到的 StateProvince 值對所選取的 TerritoryGroup 和 CountryRegion 是有效的。
建立 City 報表參數並設定其屬性
在 [報表] 功能表上,按一下 [報表參數]。[報表參數] 對話方塊隨即開啟。
請注意,在 [參數] 窗格中,沒有名稱為 City 的報表參數。
為資料集定義包含參數的查詢時,就會自動建立報表參數。到目前為止所建立的資料集查詢中,沒有一個包含 @City 查詢參數。您可以建立名稱為 City 的報表參數,如此,當您定義未包含 @City 查詢參數的查詢時,若有對應的名稱 (沒有查詢參數指示項 "@"),查詢參數將會自動繫結至報表參數。
按一下 [加入]。隨即建立含有預設屬性的報表參數。
在 [屬性] 區段的 [名稱] 文字方塊中,輸入 City。
確認 [資料類型] 是 String。
在 [提示] 文字方塊中,輸入 Select a City:。
確認已取消選取所有核取方塊。
在 [可用的值] 區段中,選取 [從查詢]。
從 [資料集] 下拉式清單中,選取 [ValidValuesforCity]。
在 [值欄位] 下拉式清單中,選取 [City]。
在 [標籤欄位] 下拉式清單中,選取 [City]。
在 [預設值] 區段中,選取 [從查詢]。
在 [資料集] 下拉式清單上,選取 [ValidValuesforCity]。
在 [值欄位] 下拉式清單中,選取 [City]。
按一下 [確定]。
(選擇性) 按一下 [預覽] 索引標籤。選取 TerritoryGroup、CountryRegion 和 StateProvince 參數的值。確認您看到的 City 參數值對所選擇的選取項目是有效的。
到目前為止,您已建立串聯參數值。現在,您必須將這些值包含在資料表資料區域的資料集查詢中,以便讓所選取的參數包含在可擷取資料表資料的查詢中。
修改轉售商銷售訂單資料集的查詢,以加入現有的查詢參數
在 [資料] 檢視的 [資料集] 下拉式清單中,選取 [轉售商]。上一課中建立的原始查詢字串隨即出現在查詢窗格中。
以下列查詢取代查詢窗格中的文字:
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
查詢現在包含了使用報表參數值的查詢參數。
按一下 [執行](!),以檢視結果集。[定義查詢參數] 對話方塊隨即開啟。
在 [參數值] 資料行中,使用下表為每個查詢參數輸入值。
參數名稱 | 參數值 |
---|---|
@TerritoryGroup |
Pacific |
@CountryRegion |
Australia |
@StateProvince |
Victoria |
@City |
Melbourne |
- 按一下 [確定]。
結果集包含墨爾本城市的轉售商銷售額。
在 Resellers 資料集的查詢定義加入查詢參數時,參數會自動設定為從對應的報表參數值取得其值。 - (選擇性) 在 [資料集] 下拉式清單的旁邊,按一下 [編輯選取的資料集] (…) 按鈕,然後按一下 [參數] 索引標籤。確認查詢參數 @TerritoryGroup、@CountryRegion、@StateProvince 和 @City 都繫結至對應之報表參數的值。
設定 NoRows 值
按一下 [配置] 索引標籤,以切換到 [配置] 檢視。
按一下資料表,資料表控點隨即顯示。按一下資料表的角控點,以選取此資料表。資料表隨即以灰色外框出現。
在 [屬性] 視窗中,找出 NoRows 屬性。將下列文字貼入相鄰的文字方塊中。
There are no resellers in this area.
建立主報表標題和參數值文字方塊
按一下 [配置] 索引標籤,以切換到 [配置] 檢視。
以滑鼠右鍵按一下包含報表處理時間戳記的文字方塊,並選取 [運算式]。
按一下 [值] 文字方塊旁邊的運算式 ([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
按一下 [預覽]。嘗試選取不同的參數值。請注意,當您選取每個連續的參數時,下一個參數的下拉式清單只會根據您所選取的項目顯示可用的值。即使您選取新參數,報表資料也不會變更。若要以新選取的參數重新處理報表,請按一下 [檢視報表]。
後續的步驟
您已順利建立具有依領域顯示轉售商銷售額之串聯參數的報表。在下一課,您將學習如何使用參數,變更資料表詳細資料列和資料表群組的排序方式。請參閱<第 3 課:使用參數變更初始排序和互動式排序>。
請參閱
其他資源
在 Reporting Services 中使用參數
使用參數來控制報表資料