Share via


使用參數來控制報表資料

報表參數一般會篩選從資料來源所擷取的報表資料。篩選資料來源的資料可以改進處理及檢視報表時的效能。當您無法篩選來源的資料時,可以利用參數在擷取報表資料之後加以篩選。也可以根據報表參數在報表中排序及分組資料。

篩選資料來源的資料

若要篩選資料來源的資料,請在資料集查詢中使用查詢參數。Reporting Services 會針對每個查詢參數建立相對應的報表參數。當使用者選取報表參數的時,這些值會傳遞給查詢。在資料來源上執行查詢時,只會為報表擷取使用者所指定的值。使用者提示和預設值之類的屬性會套用至報表參數。

查詢參數

當您定義查詢參數時,系統會自動建立報表參數。在「報表產生器」中,當您設定篩選子句的提示時,會自動建立報表參數。

您在定義資料集時,會指定特定的資料來源類型,例如 MicrosoftSQL Server。報表設計師會開啟專為搭配該種資料來源類型所設計的查詢設計工具。當您針對每個資料集定義查詢時,查詢設計工具會識別查詢命令文字內的變數,並針對每一個變數建立查詢參數。並非所有的資料來源和資料提供者組合都支援使用變數的查詢。如需有關資料來源所預期之查詢語法的詳細資訊,請參閱<搭配特定資料來源使用查詢參數 (Reporting Services)>。

如果是 SQL Server 資料來源,查詢通常會在 Transact-SQL 陳述式的 WHERE 子句中包含變數,以限制在執行查詢時所傳回的資料範圍。同樣地,Analysis Services 資料來源查詢通常會包含用於 FILTER 子句中的 MDX 變數。查詢也可以包含以輸入形式傳遞給預存程序或使用者自訂函數的變數。

每當您修改資料集的查詢時,就會重新處理該查詢。如果您移除或重新命名變數來變更查詢,查詢參數將會反映這些變更。

您可以在 [資料集屬性] 對話方塊的 [參數] 頁面上建立其他的資料集參數。當查詢變更時,您建立的參數並不會變更。

每一個查詢參數的預設值都會設定為一個運算式,此運算式會評估為對應的報表參數。若要變更預設值,請使用 [資料集屬性] 對話方塊的 [參數] 頁面。例如,對於 SQL Server 資料來源,如果查詢參數為 @MyParameter,則報表參數會是 MyParameter,且 @MyParameter 的值會設定為運算式 [@MyParameter]。如需詳細資訊,請參閱<資料集屬性對話方塊、參數>。您可以手動編輯查詢參數及設定查詢參數的預設值。如需詳細資訊,請參閱<如何:將查詢參數與報表參數產生關聯>。

自動建立的報表參數會使用下列預設值:

  • 單一值

  • Text 資料類型

  • 提示設定為參數的名稱

  • 無預設值

  • 無可用的值

您可能需要根據查詢參數所代表的資料類型來變更這些屬性。如需詳細資訊,請參閱<建立報表參數及設定報表參數屬性>。

[!附註]

當您移除或變更查詢參數的名稱時,並不會自動移除或變更對應的報表參數。如果將查詢參數移除而不再需要對應的報表參數,則必須手動將其刪除。如果變更查詢參數的名稱,則在儲存查詢時會建立與變更名稱對應的新報表參數。您可以將報表參數重新命名以符合新的查詢參數名稱,並且更新資料集參數屬性以將查詢參數連結到報表參數。

相依或串聯式參數

當您建立使用多重查詢參數的查詢時,可以建立一組串聯參數。串聯參數可提供方法來將非常大量的參數值篩選為可管理的值數目。例如,假設查詢包含 @Category、@Subcategory@Product 參數,其中子類別目錄的清單是依 @Category 而定,產品清單則是依 @Subcategory 而定。當使用者為 Category 報表參數選擇值時,Subcategory 的值會限制為所選類別目錄的有效值。在使用者選取 Subcategory 的值之後,Product 的選擇會經過類別目錄和子類別目錄選擇的篩選。利用這項技巧,您可以將參數的有效選擇縮減為合理的值數目。

若要設計串聯參數,您必須在報表中包含下列項目:

  • 主資料集查詢,具有多個相關的查詢參數。

  • 報表參數的排序清單,每個參數都繫結至查詢參數。一般而言,這些參數是從主查詢自動建立。每個相依的參數都必須接在其相依參數的後面。您可以在 [報表資料] 窗格中變更參數的次序,您可以在此窗格中將參數在集合中上下移動。如需詳細資訊,請參閱<如何:變更報表參數的順序 (Reporting Services)>。

  • 為每個報表參數提供其可用值的個別資料集。對於每個查詢參數使用相同的區分大小寫拼字很重要,如此查詢參數和報表參數才能正確地連結。每個報表參數的每個可用值組的查詢,必須只會提供在主查詢內容中有意義的值。

範例中的報表參數 Product 相依於 Subcategory,後者則相依於 Category。Category 必須排在前面,後接 Subcategory,然後再接 Product。針對為 Category 提供可用值的資料集所做的查詢,必須顯示對主查詢有效的所有類別目錄。會在您選擇類別目錄後立即提供 Subcategory 可用值的查詢,應該會提供對給定 Category 有效的值,外加主查詢中存在的任何條件約束。

如需詳細資訊,請參閱<如何:將串聯參數加入到報表中 (Reporting Services)>。

在執行查詢之後篩選報表資料

您也可以建立報表參數,並在篩選運算式中使用這些參數來篩選報表資料集、資料區域或 Tablix 群組中的資料。如需詳細資訊,請參閱<篩選報表中的資料>和<如何:加入篩選 (Reporting Services)>。

當您撰寫報表時,報表參數是報表定義的一部分,但是當報表發行之後,便可以獨立管理報表參數。在發行報表定義之後,您可以使用「報表管理員」修改參數屬性。如需詳細資訊,請參閱<設定已發行報表上的屬性>。

使用快速變更的參數有效值

您指定的可用值具有快速變更的特性時,這些值可能會在執行報表前就變成過時。這可能造成使用者所選取的清單值,在提交值和執行報表時,就不再是有效的值。若要避免此狀況的發生,請撰寫查詢來傳回有效值清單的資料集,此資料集在一般使用者選取值及執行報表所需的時間內將不會變更。

另外,請避免快速變更非查詢的值。例如,您若是提供目前日期做為可用的值,請撰寫使用 DateTime.Today 屬性而非使用 DateTime.Now 屬性的運算式。這會排除時間值快速變更的特性。您也可以利用報表變數或群組變數,在計算過值一次後,在處理報表期間保持該值不變。如需詳細資訊,請參閱<使用運算式中的報表和群組變數集合參考 (Reporting Services)>。