Share via


使用單一值和多重值參數

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

在設計介面的文字方塊中,單一值和多重值參數都會顯示為以符號 @ 開始的簡單運算式。例如,名為 Store 的參數會顯示為 [@Store]。如需詳細資訊,請參閱<了解簡單和複雜運算式 (Reporting Services)>。

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

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

安全性注意事項安全性注意事項

在任何含有 String 類型參數的報表中,請務必使用可用的值清單 (也稱為有效值清單),並且確認執行報表的任一使用者只具有檢視報表資料的必要權限。當您將參數定義為 String 類型時,使用者會看到一個可接受任何值的文字方塊。可用的值清單會限制可輸入的值。如果報表參數繫結至查詢參數,而且您不要使用可用的值清單,則報表使用者可以在文字方塊中輸入 SQL 語法,如此可能會使您的報表及伺服器暴露在 SQL 資料隱碼攻擊的危險之下。如果使用者的權限足以執行新的 SQL 陳述式,伺服器可能會出現不良的結果。

如果報表參數未繫結至查詢參數且參數值未包含在報表中,報表使用者就可以輸入運算式語法、指令碼或 URL 到參數值中,將報表轉譯為 Excel 或 HTML。如果另一個使用者接著檢視報表並按一下轉譯的參數內容,該使用者可能會不小心執行惡意指令碼或連結。

若要減輕不小心執行惡意指令碼的風險,請只從信任的來源開啟轉譯的報表。如需有關如何確保報表安全性的詳細資訊,請參閱<保護報表和資源的安全>。

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

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

  • 資料來源必須為 SQL Server、Oracle、Analysis Services、SAP BI NetWeaver 或 Hyperion Essbase。

  • 資料來源不能是預存程序。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。

  • 執行預覽。為 [標題] 選取不同的值組合,並驗證您有得到預期的結果。

[!附註]

報表伺服器會針對無法以陣列來處理參數的資料來源,重新撰寫查詢。必須要重新撰寫查詢,才能產生所要的結果。參數定義為多重數值而且查詢使用 IN 陳述式來指定參數時,就會觸發查詢重新撰寫。如果您建立不包含 IN 陳述式的查詢,請了解您將因而規避報表伺服器提供於支援多重數值參數的邏輯。

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

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

在運算式中參考參數時,您會使用內建的 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,", ")

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

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

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

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

如需有關運算式中單一值和多重值參數的詳細資訊和範例,請參閱<使用運算式中的參數集合參考 (Reporting Services)>。