報表參數 (報表產生器及 SSRS)
報表參數可讓您控制報表資料、將相關的報表連接在一起,以及變更報表呈現方式。 若要設計有效使用參數的報表,您必須了解參數和資料集查詢之間的關聯、如何在運算式中包含參數,以及如何從報表伺服器或 SharePoint 網站上的報表定義分別管理參數。 發行報表之後,您可以分開管理參數與報表定義。 藉由建立連結報表,您甚至可以針對相同的報表建立多組參數。
當您檢視報表時,報表檢視器工具列會顯示每一個參數,讓使用者能夠以互動的方式指定值。 下圖顯示包含 @StartDate、@EndDate、@Subcategory 和 @ShowAllRows 參數之報表的參數區域。
參數窗格:報表檢視器工具列會顯示每個參數的提示和預設值。 工具列上的參數配置會自動格式化。 其順序是由參數出現在 [報表資料] 窗格內的順序所決定。
@StartDate 和 @EndDate 參數:參數 @StartDate 的資料類型為 DateTime。 [開始日期] 提示會在文字方塊旁邊顯示。 若要修改日期,請在文字方塊中輸入新日期,或是使用行事曆控制項。
@EndDate 參數會出現在 @StartDate 旁邊。
@Subcategory 參數:@Subcategory 參數的資料類型為 Text。 由於 @Subcategory 有可用值的清單,因此有效值會出現在下拉式清單中。 您必須從此清單選擇值。 由於 @Subcategory 會擁有多個值,因此會出現 [全選] 選項,讓您清除或選取清單中全部的值。
@ShowAllRows 參數:@ShowAllRows 參數的資料類型為 Boolean。 使用選項按鈕可指定 True 或 False。
顯示或隱藏參數區域控點:在報表檢視器工具列上,按一下此箭頭可顯示或隱藏參數窗格。
參數按鈕:在 [報表產生器] 預覽中的 [功能區] 上,按一下 [參數] 按鈕即可顯示或隱藏參數窗格。
檢視報表按鈕:在報表檢視器工具列上按一下 [檢視報表],即可在輸入參數之後執行報表。 如果所有參數都有預設值,則報表會在第一次檢視時自動執行。
如需立即使用參數的詳細資訊,請參閱<教學課程:將參數加入至報表 (報表產生器)>或報表範例 (報表產生器和 SSRS)
[!附註]
您可以在報表產生器以及 SQL Server Data Tools 的報表設計師中建立和修改報表定義 (.rdl)。每種撰寫環境都會提供不同的方式來建立、開啟和儲存報表與相關的項目。如需詳細資訊,請參閱 microsoft.com 網站上的<在報表設計師及報表產生器中設計報表 (SSRS)>。
本文內容
參數的一般使用方式
參數的類型
建立參數
報表參數
資料集參數
串聯參數
顯示報表中的參數值
設定鑽研報表的參數
設定子報表的參數
在已發行的報表上管理參數
設定報表 URL 的參數
設定訂閱的參數
設定快照集參數
參數和資料保護
如何主題
本節內容
相關主題
參數的一般使用方式
以下提供部分最常使用參數的方式:
透過撰寫包含查詢變數的資料集查詢,在資料來源篩選報表資料。
篩選共用資料集中的資料。 將共用資料集加入至報表時,無法變更查詢。 在報表中,您可以加入資料集篩選,其中包含您所建立報表參數的參考。
可讓使用者指定值,以自訂報表中的資料。 例如,提供兩個參數,做為銷售資料的開始日期和結束日期。
可讓使用者指定值,協助自訂報表的外觀。 例如,提供 Boolean 參數,指出要展開或摺疊資料表中的所有巢狀資料列群組。
建立可選擇的下拉式值清單,如此使用者就只能選取有效的值。
建立每個參數的預設值,如此報表就會在第一次檢視時自動執行。
建立串聯值,如此某一個參數的下拉式清單就會是依據前一個參數之選取項目的一組有效值。 這樣可讓您後續從數千個值篩選出能夠管理的參數值數目。
使用參數,將主報表與鑽研報表、子報表和連結報表產生關聯。 當您設計一組報表時,可以將每份報表設計為可回答某些問題。 每份報表對於相關資訊都會提供不同的檢視或不同的詳細程度。 若要提供一組相關聯的報表,請針對目標報表上的相關資料建立參數。
為多位使用者自訂參數集。 根據報表伺服器上的銷售報表建立兩個連結的報表。 其中一個連結的報表使用銷售人員的預先定義參數值,另一個連結的報表則使用銷售經理的預先定義參數值。 這兩個報表會使用相同的報表定義。
如果您打算建立報表快照集、記錄或已發行報表的訂閱,則必須了解報表參數如何影響報表的設計需求。
回到頁首
建立參數
您可以利用下列方式建立報表參數:
建立或加入具有包含查詢變數之查詢的資料集 (內嵌或共用)。 如需詳細資訊,請參閱<了解報表資料集與查詢>。
從 [報表資料] 窗格手動建立參數。 如需詳細資訊,請參閱<加入、變更或刪除報表參數 (報表產生器及 SSRS)>。
加入報表組件,其中包含參數的參考或包含變數之共用資料集的參考。
[!附註]
您可以針對與參數具有相依資料集的資料區域,將參數當做個別的報表組件發行。 雖然參數會列為報表組件,不過您無法直接將報表組件參數加入至報表。 請改為加入報表組件,然後系統就會根據報表組件所包含或參考的資料集查詢,自動產生任何必要的報表參數。 如需有關報表組件的詳細資訊,請參閱<報表組件 (報表產生器及 SSRS)>和<報表設計師中的報表組件 (SSRS)>。
參數的類型
報表包括兩種類型的參數:資料集參數和報表參數。
資料集參數:針對資料集查詢命令中的每個查詢變數,會自動建立內嵌資料集或共用資料集的資料集參數。 某些查詢設計工具會提供一個區域,可依據欄位名稱加入套用的篩選,另外還提供一個選項,可依據欄位名稱加入資料集參數。
資料集參數是在您定義資料集查詢之後設定。 您可以分別為每一個資料集參數指定預設值。 當您將共用資料集加入至報表時,不可覆寫報表中標記為內部的資料集參數。 您可以覆寫未標記為內部的資料集參數。 您還可以建立額外的參數。 如需詳細資訊,請參閱本主題中的<資料集參數>。
報表參數:針對每一個資料集參數會自動建立報表參數。 您也可以手動建立報表參數。 您可以設定報表參數,讓使用者能夠以互動的方式輸入值,幫助自訂報表的內容或外觀。 您也可以設定報表參數,讓使用者無法變更預先設定的值。 報表參數可在報表伺服器上與已發佈的報表分開管理。 如需詳細資訊,請參閱本主題中的<報表參數>。
您也可以將報表參數當做報表組件,與報表分開儲存。 報表組件會儲存在報表伺服器上,而且可供其他人在報表中使用。 本身為參數的報表組件無法從報表伺服器管理。 您可以在 [報表組件庫] 中搜尋參數,並且在加入這些參數之後,於報表中進行設定。 如需詳細資訊,請參閱<報表組件 (報表產生器及 SSRS)>。
回到頁首
報表參數
參數最常見的用法是變更資料集查詢所擷取的報表資料。 在此案例中,使用者會在執行報表時接到輸入單一值或多重值的提示,而資料集查詢只會擷取所要求的資料。 資料集查詢包含查詢參數,而報表處理器會自動建立間接連結到這些查詢參數的報表參數。
[!附註]
由於參數是在伺服器上獨立管理,所以使用新的參數設定來重新發行主報表時,將不會覆寫此報表的現有參數設定。
報表參數是透過下列方式建立:
當您定義包含查詢變數的資料集查詢時自動建立。 系統會針對每個查詢變數建立具有相同名稱的對應資料集查詢參數和報表參數。 查詢參數可能是查詢變數的參考,或預存程序之輸入參數的參考。
當您加入包含查詢參數之共用資料集的參考時自動建立。
當您在 [報表資料] 窗格中建立報表參數時手動建立。 報表是您可以在報表的運算式中包含的其中一個內建集合。 運算式是用來定義整個報表定義中的值,因此,您可以使用參數來控制報表外觀,或將值傳遞到也使用參數的相關子報表或報表中。
根據預設,自動建立的參數會使用自動產生的名稱、提示和資料類型。 您可以使用 [報表屬性] 對話方塊,變更 [報表資料] 窗格中的報表參數屬性。 下表摘要說明您可以針對每個參數設定的屬性:
屬性 |
說明 |
||
---|---|---|---|
名稱 |
輸入區分大小寫的參數名稱。 此名稱必須以字母開頭,而且包含字母、數字和底線 (_),但是不可包含空格。 若為自動產生的參數,此名稱須符合資料集查詢中的查詢參數。 根據預設,手動建立的參數與 ReportParameter1 類似。 |
||
提示 |
在報表檢視器工具列上顯示於參數旁邊的文字。 |
||
資料類型 |
報表參數的資料類型必須是下列其中一種:
針對某個參數定義了可用的值之後,使用者就可以從下拉式清單中選擇值,即使資料類型是 DateTime 也一樣。 如需有關報表資料類型的詳細資訊,請參閱<RDL 資料類型>。 |
||
允許空白值 |
如果參數值可為空字串或空白,則選取此選項。 如果您為參數指定有效值,而且希望空白值是其中一個有效值,則必須將它納入做為您指定的其中一個有效值。 選取此選項並不會自動將空白納入做為可用的值。 |
||
允許 null 值 |
如果參數值可為 null,則選取此選項。 如果您為參數指定有效值,而且希望 null 是其中一個有效值,則必須將 null 納入做為您指定的其中一個有效值。 選取此選項並不會自動將 null 納入做為可用的值。 |
||
允許多個值 |
提供可用的值,建立可供使用者選擇的下拉式清單。 這是確保資料集查詢中只會提交有效值的好方法。 如果參數值可以是顯示在下拉式清單中的多個值,則選取此選項。 不允許 Null 值。 選取此選項時,系統會將核取方塊加入到參數下拉式清單內可用值的清單中。 清單的頂端包含 [全選] 核取方塊。 使用者可以檢查想要的值。 如果提供值的資料迅速改變,則使用者看見的清單可能不是最新的。 |
||
可見 |
選取此選項可顯示報表執行時,位於報表頂端的報表參數。 此選項可讓使用者在執行階段選取參數值。 |
||
隱藏 |
選取此選項來隱藏已發行報表中的報表參數。 您仍然可以在報表 URL、訂閱定義或報表伺服器上設定報表參數值。 |
||
內部 |
選取此選項來隱藏報表參數。 已發行報表中的報表參數只能在報表定義中檢視。 |
||
可用的值 |
如果您已為參數指定可用的值,則有效值會固定顯示為下拉式清單。 例如,如果您為 DateTime 參數提供可用的值,則參數窗格中會出現日期的下拉式清單,而不是行事曆控制項。 為確保報表和子報表之間的值清單一致,您可以在資料來源上設定一個選項,針對與資料來源相關聯的資料集中的所有查詢使用單一交易。
|
||
預設值 |
設定來自查詢或靜態清單的預設值。 如果每個參數都有預設值,則報表會在第一次檢視時自動執行。 |
||
進階 |
設定報表定義屬性 UsedInQuery,其值指出此參數直接或間接影響報表中的資料。
|
回到頁首
資料集參數
查詢參數是在您於查詢設計工具中建立查詢時定義。 有些資料延伸模組會提供選取要加入欄位做為參數的方式。 有些資料延伸模組則會識別查詢命令中的查詢變數。 針對每個查詢變數會自動建立查詢參數。
並非所有的資料來源都支援查詢參數。 當您無法篩選來源的資料時,可以使用報表參數讓使用者在擷取報表所需的資料之後加以篩選。 雖然所有的查詢參數都有對應的報表參數,但您仍可以分別定義報表參數。 在擷取資料之後,也可以使用報表參數變更報表的外觀或組織。
若要篩選資料集查詢中的資料,您可以加入限制子句,透過指定結果集中要包含或排除的值限制擷取的資料。
使用與資料來源有關聯的查詢設計工具,可幫助您建立參數化查詢。
如果是 Transact-SQL 查詢,不同的資料來源會支援不同的參數語法。 支援的範圍是查詢中依據位置或名稱識別的參數。 如需詳細資訊,請參閱<將資料加入至報表 (報表產生器及 SSRS)> 中特定外部資料來源類型的主題。 在關聯式查詢設計工具中,您必須為篩選選取參數選項,才能建立參數化查詢。 如需詳細資訊,請參閱<關聯式查詢設計工具使用者介面 (報表產生器)>。
針對依據多維資料來源 (例如 Microsoft SQL Server Analysis Services、SAP NetWeaver BI 或 Hyperion Essbase) 的查詢,您可以指定是否根據您在查詢設計工具中指定的篩選建立參數。 如需詳細資訊,請參閱<查詢設計工具 (報表產生器)> 中對應於資料延伸模組的查詢設計工具主題。
回到頁首
串聯參數
您可以建立串聯參數,讓使用者以特定順序來選擇每一個參數的值,而每一個選擇都會接著限制下一個參數的值。 串聯參數可將上千種可能選擇縮減成可管理的數目。 例如,使用者選擇產品類別目錄,然後從該類別目錄中可用產品的清單進行選擇,再選擇大小和色彩。
如需詳細資訊,請參閱<將串聯參數加入至報表 (報表產生器及 SSRS)>。
回到頁首
顯示報表中的參數
報表參數是您可以從運算式參考的其中一個內建集合。 根據報表參數是接受單一值還是多個值,運算式語法有所不同。 如需詳細資訊,請參閱<常用的篩選 (報表產生器及 SSRS)>和<參數集合參考 (報表產生器及 SSRS)>。
設定鑽研報表的參數
鑽研動作是在報表項目之任何文字方塊的屬性頁面上設定,或在圖表或量測計的各部分上設定。 這些報表參數可能是隱藏的,會使用主報表中的值為連接的報表選取正確資料,或者使用者可能會在執行階段看到這些參數。 您針對鑽研動作設定目標報表名稱的方式會因是否具有報表伺服器的作用中連接而定。 如需詳細資訊,請參閱<指定外部項目的路徑 (報表產生器及 SSRS)>。
您也可以針對任何 URL 定址報表來使用 URL 存取,並將報表參數值當做 URL 語法的一部分來加入。 如需詳細資訊,請參閱<URL 存取 (SSRS)>。
設定子報表的參數
若要設定子報表的參數,請使用 [子報表屬性] 對話方塊的 [參數] 頁面。 您設定子報表名稱的方式會因是否具有報表伺服器的作用中連接而定。 如需詳細資訊,請參閱<指定外部項目的路徑 (報表產生器及 SSRS)>。
[!附註]
如果您在 Tablix 資料區中使用子報表,則會針對每一個資料列來處理子報表和它的參數。 如果存在許多資料列,請考慮是否使用鑽研報表會更適當。
如需詳細資訊,請參閱<加入子報表和參數 (報表產生器及 SSRS)>。
管理報表伺服器或 SharePoint 網站上的參數
當您設計報表時,報表參數會儲存在報表定義中。 當您發行報表時,報表參數會儲存,並且與報表定義分開管理。
在已發行的報表中,可以使用下列項目:
**報表參數屬性:**直接在報表伺服器上,從報表定義個別變更報表參數值。
快取報表:若要建立報表的快取計劃,每一個參數都必須有預設值。 如需詳細資訊,請參閱<快取多個報表 (SSRS)>。
快取共用資料集:若要建立共用資料集的快取計劃,每一個參數都必須有預設值。 如需詳細資訊,請參閱<快取多個報表 (SSRS)>。
連結報表:您可以建立包含預設參數值的連結報表,用來篩選不同使用者的資料。 如需詳細資訊,請參閱<建立連結報表>。
報表訂閱:您可以指定參數值篩選資料,並透過訂閱傳遞報表。 如需詳細資訊,請參閱<訂閱與傳遞 (Reporting Services)>。
URL 存取:您可以在報表的 URL 中指定參數值。 您也可以使用 URL 存取來執行報表及指定參數值。 如需詳細資訊,請參閱<設定報表 URL 的參數>。
如果您重新發行報表定義,則針對已發行報表所設定的參數屬性通常會保留起來。 如果報表定義和報表同樣重新發行,且參數名稱和資料類型保持相同,則會保留屬性設定。 如果您加入或刪除報表定義中的參數,或變更現有參數的資料類型或名稱,您就可能需要變更已發行報表的參數屬性。
並非所有的參數都可以在任何情況下修改。 如果報表參數從查詢取得預設值,無法針對已發行的報表修改該值。 指定為「以查詢為基礎的」預設參數值是在報表定義中定義,且無法在報表伺服器上修改。 以查詢為基礎的參數值並不是常數值。 執行階段使用的值會在查詢執行時決定,如果是以運算式為基礎的參數,則會在評估運算式時決定。
報表執行選項會影響處理參數的方式。 以快照集執行的報表無法使用從查詢所衍生的參數,除非查詢包括參數的預設值。
回到頁首
設定報表 URL 的參數
執行參數化報表另一種方法是透過 URL。 您可以在編碼的名稱與值配對中,指定一個或多個參數,請使用 & 符號字元來分隔多個參數。
**Null 參數:**Null 參數使用特殊語法;您必須為 Null 值指定 isnull。 如果您為參數指定 Null 值,將會忽略為同一參數指定的其他所有值。 下列範例說明 Null 和常數值的多個參數:
http://exampleWebServerName/reportserver?/foldercontainingreports/orders&division=mailorder®ion=west&sales:isnull=true
**具有多個值的參數:**指定多個值的方式是重複參數名稱。 例如:
http://exampleWebServerName/reportserver? %2ffoldercontainingreports%2forders®ion=east®ion=west
**布林:**使用 0 表示 False,使用 1 表示 True。
**浮點數:**包含伺服器地區設定的小數點分隔符號。
**DateTime:**使用格式 YYYY-MM-DDTHH:MM:SS,此格式符合國際標準組織 (ISO) 8601 標準。
設定報表參數值只是使用 URL 存取語法檢視報表的方式之一。 另一個例子是指定 URL 參數,從特定頁碼開始檢視報表。 下列範例會將 AdventureWorks2012 的 Product Catalog 2008 範例報表開啟到第 30 頁:
http://exampleWebServerName/reportserver? %2fAdventureWorks2012+Sample+Reports%2fProduct+Catalog+2008&rs:Command=Render&rc:Section=30
如需詳細資訊,請參閱<URL 存取參數參考>。
回到頁首
設定訂閱的參數
您可以定義視需要或快照集報表的訂閱,並指定在訂閱處理過程中要使用的參數值。
**視需要的報表:**您可以為視需要報表的每個參數指定不同於已發行值的參數值。 例如,假設您有一個呼叫服務報表,使用 Time Period 參數傳回客戶在目前日期、星期、或月份的服務要求。 如果報表的預設參數值設定為 today,您的訂閱可以使用不同的參數值 (例如,week 或 month),以產生包含每週或每月數字的報表。
**快照集:**快照集訂閱必須使用為快照集定義的參數值。 您的訂閱無法覆寫快照集所定義的參數值。 例如,假設您訂閱當成報表快照集執行的西區銷售報表,而快照集指定 [Western] 做為區域參數值。 在此情況下,如果您對此報表建立訂閱,則必須在訂閱中使用參數值 [Western]。 為了提供忽略參數的視覺指示,訂閱頁面上的參數欄位會設定為唯讀欄位。
[!附註]
資料驅動訂閱可以使用從訂閱者資料來源取得的參數值。 如需詳細資訊,請參閱<使用外部資料來源以取得訂閱者資料 (資料驅動訂閱)>。
如果在定義了訂閱之後變更報表快照集內的參數值,報表伺服器就會停用訂閱。 停用訂閱指出已經修改報表。 若要啟動訂閱,請開啟並儲存訂閱。
如需詳細資訊,請參閱<訂閱與傳遞 (Reporting Services)>。
回到頁首
設定快照集參數
報表執行選項會影響處理參數的方式。 當成報表快照集執行的參數化報表,會使用報表快照集所定義的參數值。 參數值是在報表的參數屬性頁面中定義。 以快照集執行的報表無法使用從查詢所衍生的參數,除非查詢包括參數的預設值。
如果變更報表快照集中的參數值,則會停用快照集訂閱。 若要啟動訂閱,請開啟並儲存訂閱。
如需詳細資訊,請參閱<效能、快照、快取 (Reporting Services)>。
回到頁首
參數和資料保護
散發包含機密或敏感資訊的參數化報表時,請特別小心。 使用者可以輕鬆地以其他值取代報表參數,造成您不希望發生的資訊洩露。
使用員工或個人資料之參數的一個安全替代方式,就是根據包含 Users 集合之 UserID 欄位的運算式來選取資料。 Users 集合提供一種方法,來取得執行報表之使用者的識別,並使用該識別來擷取使用者特定資料。
安全性注意事項 |
---|
在任何含有 String 類型之參數的報表中,請務必使用可用的值清單 (也稱為有效值清單),並確認執行報表的任何使用者只具有檢視報表資料所需的權限。 當您將參數定義為 String 類型時,使用者會看到一個可接受任何值的文字方塊。 可用的值清單會限制可輸入的值。 如果報表參數繫結至查詢參數,而且您不要使用可用的值清單,則報表使用者可以在文字方塊中輸入 SQL 語法,如此可能會使您的報表及伺服器暴露在 SQL 資料隱碼攻擊的危險之下。 如果使用者的權限足以執行新的 SQL 陳述式,伺服器可能會出現不良的結果。 如果報表參數未繫結至查詢參數且參數值未包含在報表中,報表使用者就可以輸入運算式語法、指令碼或 URL 到參數值中,將報表轉譯為 Excel 或 HTML。 如果另一個使用者接著檢視報表並按一下轉譯的參數內容,該使用者可能會不小心執行惡意指令碼或連結。 若要減輕不小心執行惡意指令碼的風險,請只從信任的來源開啟轉譯的報表。 如需有關保護報表安全的詳細資訊,請參閱<保護報表和資源的安全>。 |
回到頁首
如何主題
本節列出的程序,為您逐步示範如何使用參數和篩選。
回到頁首
相關章節
回到頁首
請參閱
概念
鑽研、向下鑽研、子報表和巢狀資料區 (報表產生器及 SSRS)