共用方式為


使用單一值和多重值參數

更新: 2006 年 12 月 12 日

參數可以是單一值,也可以是多重值。多重值參數可設定為一個以上的值。當您為多重值參數定義可用值清單時,Reporting Services 會自動在報表工具列下拉式清單中提供 [全選] 選項。您可以使用這個選項來選取及取消選取此清單中的所有值。

Aa337292.note(zh-tw,SQL.90).gif附註:
SQL Server 2005 Service Pack 1 停用 [全選] 選項,但是 SQL Server 2005 Service Pack 2 已還原此選項。

若要為某個參數設定多重值屬性,您可在 [報表參數] 對話方塊上選擇 [多重值] 選項。除了「布林」以外,您可以將任何參數類型設定為多重值。

多重值參數的主要用途是要讓查詢限制子句 (如 Transact-SQL WHERE 子句或 MDX Filter 子句) 測試是否有包含在一組值當中,而不等於單一值。如需有關建立多重值參數的詳細資訊,請參閱<教學課程:在基本表格式報表中加入參數>和<建立報表參數及設定報表參數屬性>。

Aa337292.security(zh-tw,SQL.90).gif安全性注意事項:
在任何含有 String 類型參數的報表中,請務必使用可用的值清單 (也稱為有效值清單),並且確認可執行報表的任一使用者只具有檢視報表資料的必要權限。當您將參數定義為 String 類型時,使用者會看到一個可接受任何值的文字方塊。可用的值清單會限制可輸入的值。如果報表參數繫結至查詢參數,而且您不要使用可用的值清單,則報表使用者可以在文字方塊中輸入 SQL 語法,如此可能會使您的報表及伺服器暴露在 SQL 資料隱碼攻擊的危險之下。如果使用者的權限足以執行新的 SQL 陳述式,伺服器可能會出現不良的結果。 如果報表參數未繫結至查詢參數且參數值未包含在報表中,報表使用者就可以輸入運算式語法、指令碼或 URL 到參數值中,將報表轉譯為 Excel 或 HTML。如果另一個使用者接著檢視報表並按一下轉譯的參數內容,該使用者可能會不小心執行惡意指令碼或連結。 若要減輕不小心執行惡意指令碼的風險,請只從信任的來源開啟轉譯的報表。如需有關保護報表安全的詳細資訊,請參閱<保護報表和資源的安全>。

撰寫對應至多重數值報表參數的查詢

您可以為自己建立的任何報表參數,定義多重數值參數。但是,如果您要將多個參數值傳回查詢,就必須滿足下列需求:

  • 資料來源必須是 SQL Server、Oracle 或 Analysis Services。
  • 資料來源不能是預存程序。Reporting Services 不支援將多重數值參數陣列傳遞至預存程序。
  • 查詢必須使用 IN 子句來指定參數。

下列範例說明在 Transact-SQL 陳述式的 WHERE 子句中,使用 IN 關鍵字。如需有關 IN 關鍵字或此查詢傳回之結果的詳細資訊,請參閱<IN (Transact-SQL)>。

SELECT FirstName, LastName, e.Title
FROM HumanResources.Employee AS e
    JOIN Person.Contact AS c 
    ON e.ContactID = c.ContactID
WHERE e.Title IN (@Title)

若要在報表中進行實驗,請使用這個查詢定義資料集。使用以下方式針對自動建立的報表參數 Title 變更屬性:

  • 選取 [多重值] 選項。
  • 在可用值中,選取 [非查詢的] 選項。在 [值] 一欄中輸入下列清單 (將 [標籤] 一欄留白):Design Engineer、Buyer、Marketing Assistant。
  • [預設值] 中輸入 Buyer
  • 執行預覽。為 [標題] 選取不同的值組合,並驗證您有得到預期的結果。
Aa337292.note(zh-tw,SQL.90).gif附註:
報表伺服器會針對無法以陣列來處理參數的資料來源,重新撰寫查詢。必須要重新撰寫查詢,才能產生所要的結果。參數定義為多重數值而且查詢使用 IN 陳述式來指定參數時,就會觸發查詢重新撰寫。如果您建立不包含 IN 陳述式的查詢,請注意您將因而規避報表伺服器提供於支援多重數值參數的邏輯。

資料集、資料群組和資料區域的篩選運算式是定義在對應屬性頁面的 [篩選] 索引標籤上。如果您已經定義會參考多重值參數的篩選運算式,您必須在此篩選運算式中使用 IN 運算子。如果篩選運算式使用非 IN 的運算子,將會產生處理錯誤。如需詳細資訊,請參閱<如何:加入篩選 (報表設計師)>。

撰寫參考多重值參數的運算式

當您參考運算式中的參數時,您會使用 Parameters 全域集合。當您在運算式中使用多重值參數時,您需要瞭解如何針對單一值及整個值陣列。下表針對已設定 [多重值] 選項的參數提供參數屬性的範例和描述。

範例 描述

Parameters!<ParameterName>.Value

參數的變數資料值陣列。

Parameters!<ParameterName>.Label

參數標籤的字串陣列。

Parameters!<ParameterName>.IsMultiValue

指出是否已選取參數 [多重值] 選項的布林屬性。

Parameters!<ParameterName>.Count

陣列中的值數目。

Parameters!<ParameterName>.Value(0)

多重值陣列中的第一個值。

Parameters!<ParameterName>.Label(0)

多重值陣列中的第一個標籤。

Parameters!<ParameterName>.Value(Parameters! <ParameterName>.Count-1)

多重值陣列中的最後一個值。

Parameters!<ParameterName>.Label(Parameters! <ParameterName>.Count-1)

多重值陣列中的最後一個標籤。

=Join(Parameters!<ParameterName>.Value,", ")

將「字串」類型之多重值參數陣列中的所有值串連成一個字串的運算式。

=Split("Value1, Value2, Value3",",")

會接受一個字串,並建立可用來傳遞給預期多重值參數之子報表或鑽研報表的物件陣列。

您可以使用 SPLIT 和 JOIN 函數,在任何運算式中分隔或結合陣列中的值。您可以使用 STRING 和 CINT 函數,將值轉換為字串或整數。

如需有關運算式中單一值和多重值參數的詳細資訊和範例,請參閱<在運算式中使用參數>。

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

變更的內容:
  • SP2 中已還原 [全選]。

請參閱

工作

如何:加入、編輯或刪除報表參數 (報表設計師)

概念

設定已發行報表的參數屬性
在運算式中使用參數
在運算式中使用參數

其他資源

教學課程:在基本表格式報表中加入參數
教學課程:使用參數的進階功能
報表參數 (報表設計師)

說明及資訊

取得 SQL Server 2005 協助