共用方式為


報表設計師中表示式中的自訂程式代碼和元件參考 (SSRS)

您可以加入引用內嵌在報表中的自定義程式碼,或引用您建立並儲存至電腦的自定義元件,並部署至報表伺服器。 針對單一報表中多次使用的自定義常數、複雜函式或函式使用內嵌程序代碼。 使用自定義程式代碼元件在單一位置維護程序代碼,並共用它以供多個報表使用。 自訂程式代碼可以包含新的自定義常數、變數、函式或子程式。 您可以包含對內建集合的唯讀參考,例如參數集合等。 不過,您無法將報表數據值集合傳遞至自定義函式;具體而言,不支援自定義匯總。

這很重要

在執行期間只需要一次評估且希望在報告處理過程中保持相同值的時間敏感型計算,請考慮使用報告變數或群組變數。 如需詳細資訊,請參閱報表和群組變數集合參考 (報表產生器和 SSRS)

報表設計師是慣用的撰寫環境,可用來將自定義程式代碼新增至報表。 報表產生器支持處理具有有效表達式的報表,或包含報表伺服器上自定義元件的參考。 報表產生器不提供加入自定義元件的參考的方法。

備註

請注意,在報表伺服器升級期間,相依於自定義元件的報表可能需要額外的步驟才能完成升級。 如需詳細資訊,請參閱使用 升級建議程式 準備升級

備註

您可以在報表產生器及 SQL Server Data Tools 的報表設計師中建立和修改報表定義 (.rdl)。 每個撰寫環境提供不同的方式來建立、開啟及儲存報表和相關專案。 如需詳細資訊,請至 microsoft.com 網站上查看 報表設計師和報表產生器 (SSRS) 的報表設計

在報表產生器中使用自定義程序代碼

在報表產生器中,您可以從包含自定義元件的參考的報表伺服器開啟報表。 例如,您可以在 SQL Server Data Tools 中編輯使用報表設計師建立和部署的報表。 自訂元件必須部署到報表伺服器。

您無法執行下列動作:

  1. 將參考資料或類別成員實例新增至報表。

  2. 預覽在本機模式中包含自訂組件參照的報表。

包含常用函式的參考

使用 [ 表達式 ] 對話框來檢視 Reporting Services 內建通用函式的分類清單。 當您展開 [通用函式 ] 並按兩下類別時, [專案 ] 窗格會顯示您在表示式中包含的函式清單。 常見的功能包括 .NET Framework Math 命名空間中的類別、Convert Visual Basic 執行階段庫函式。 為了方便起見,您可以在 [ 表達式 ] 對話框中檢視最常使用的函式,其依類別列出:文字、日期和時間、數學、檢查、程式流程、匯總、財務、轉換和其他。 較不常用的函式不會出現在清單中,但仍可在表達式中使用。

若要使用內建函式,請在 [專案] 窗格中按兩下函式名稱。 函式的描述會出現在 [描述] 窗格中,而函數調用的範例會出現在 [範例] 窗格中。 在程式代碼窗格中,當您輸入函式名稱後面接著左括弧 時(IntelliSense 說明會顯示函數調用的每個有效語法。 例如,若要計算數據表中名為 Quantity 的欄位最大值,請將簡單表示式 =Max( 新增至 [程序代碼] 窗格,然後使用智慧標記來檢視函數調用的所有可能有效語法。 若要完成此範例,請輸入 =Max(Fields!Quantity.Value)

如需每個函式的詳細資訊,請參閱 MSDN 上的 MathConvertVisual Basic 執行時期函式庫成員

包含較不常用函式的參考

若要包含其他較不常用 CLR 命名空間的參考,您必須使用完整限定式參考,例如 StringBuilder。 在這些較不常用的函式中,[ 表達式 ] 對話框的程式代碼窗格不支援 IntelliSense。

如需詳細資訊,請參閱 MSDN 上的 Visual Basic 運行時間連結庫成員

包含外部元件的參考

若要在外部組件中包含類別的參考,您必須識別報表處理器的組件。 使用 [報表屬性] 對話框的 [參考] 頁面,即可指定要加入至報表之元件的完整名稱。 在運算式中,您必須使用元件中 類別的完整名稱。 外部元件中的類別不會出現在 [ 表達式 ] 對話框中;您必須提供 類別的正確名稱。 完整名稱包含命名空間、類別名稱和成員名稱。

包含嵌入式程式碼

若要將內嵌程式代碼新增至報表,請使用 [ 報表屬性 ] 對話方塊的 [程序代碼] 索引標籤。 您所建立的程式代碼區塊可以包含多個方法。 內嵌程式代碼中的方法必須以visual Basic Microsoft撰寫,而且必須是以實例為基礎的。 報表處理器會自動新增 System.Convert 和 System.Math 命名空間的參考。 使用 [參考] 頁面的 [報表屬性] 對話框來新增其他組件參考。 如需詳細資訊,請參閱 將元件參考加入至報表 (SSRS)

內嵌程式代碼中的方法可透過全域定義 Code 的成員取得。 您可以藉由參考 Code 成員和方法名稱來存取這些專案。 下列範例會呼叫 方法 ToUSD,此方法會將欄位中的值 StandardCost 轉換成貨幣值:

=Code.ToUSD(Fields!StandardCost.Value)  

若要在您的自訂程式代碼中引用內建集合,請包含對內建Report對象的引用。

=Report.Parameters!Param1.Value  

下列範例示範如何定義一些自定義常數和變數。

Public Const MyNote = "Authored by Bob"  
Public Const NCopies As Int32 = 2  
Public Dim  MyVersion As String = "123.456"  
Public Dim MyDoubleVersion As Double = 123.456  

雖然自定義常數不會出現在 [表達式] 對話框中的 [常數] 類別中(只顯示內建常數),但您可以從任何表達式新增參考,如下列範例所示。 在表示式中,會將自定義常數視為 Variant

=Code.MyNote  
=Code.NCopies  
=Code.MyVersion  
=Code.MyDoubleVersion  

下列範例同時包含函式FixSpelling的程式碼參考和實作,該函式會在SubCategory欄位中將所有出現的文字 “Bike” 替換為文字"Bicycle"

=Code.FixSpelling(Fields!SubCategory.Value)

當下列程式碼嵌入到報表定義的代碼區塊中時,即顯示出FixSpelling方法的實作。 此範例示範如何使用 Microsoft .NET Framework StringBuilder 類別的完全限定名稱。

Public Function FixSpelling(ByVal s As String) As String  
   Dim strBuilder As New System.Text.StringBuilder(s)  
   If s.Contains("Bike") Then  
      strBuilder.Replace("Bike", "Bicycle")  
      Return strBuilder.ToString()  
      Else : Return s  
   End If  
End Function  

如需內建物件集合和初始化的詳細資訊,請參閱 內建的全域和用戶參考(報表產生器及 SSRS)初始化自定義元件物件

在程式碼中加入參數引用

您可以在報表定義的 Code 區塊或您提供的自訂元件中,透過自定義程式代碼參考全域參數集合。 參數集合是只讀的,而且沒有公用反覆運算器。 您無法使用 Visual Basic For Each 結構來遍歷集合。 您必須先知道報表定義中定義的參數名稱,才能在程式代碼中參考它。 不過,您可以逐一查看多重值參數的所有值。

下表包含從自訂程式代碼參考內建集合 Parameters 的範例:

說明 表達式中的參考 自訂程式代碼定義
將整個全域參數集合傳遞至自定義程序代碼。

此函式會傳回特定報表參數 MyParameter 的值。
=Code.DisplayAParameterValue(Parameters) Public Function DisplayAParameterValue(

ByVal parameters as Parameters) as Object

Return parameters("MyParameter").Value

End Function
將個別參數傳遞至自定義程序代碼。

這個範例會傳回傳入的參數值。 如果參數是多重值參數,則傳回字串是所有值的串連。
=Code.ShowParametersValues(Parameters!DayOfTheWeek) Public Function ShowParameterValues(ByVal parameter as Parameter)
as String
Dim s as String
If parameter.IsMultiValue then
s = "Multivalue: "
For i as integer = 0 to parameter.Count-1
s = s + CStr(parameter.Value(i)) + " "
Next
Else
s = "Single value: " + CStr(parameter.Value)
End If
Return s
End Function

包含自訂組件程式碼的參考

若要在報表中使用自定義元件,您必須先建立元件,使其可供報表設計師使用、在報表中加入元件的參考,然後使用報表中的表達式來參考該元件中包含的方法。 當報表部署至報表伺服器時,您也必須將自定義元件部署到報表伺服器。

如需建立自定義元件並將其提供給 Reporting Services 的詳細資訊,請參閱 搭配報表使用自定義元件

若要參考表示式中的自訂程式碼,您必須在元件中呼叫 類別的成員。 執行此動作的方式取決於方法是否為靜態或實例型。 自定義元件內的靜態方法可在報表中全域使用。 您可以藉由指定命名空間、類別和方法名稱,在表達式中存取靜態方法。 下列範例會呼叫 方法 ToGBP,將 StandardCost 值的值從美元轉換為英鎊:

=CurrencyConversion.DollarCurrencyConversion.ToGBP(Fields!StandardCost.Value)  

實例型方法可透過全域範圍內定義的 Code 成員取得。 您可以藉由參考 Code 成員,然後接上實例和方法名稱來存取這些功能。 下列範例會呼叫 實例方法 ToEUR,此方法會將 StandardCost 的值從美元轉換為歐元:

=Code.m_myDollarCoversion.ToEUR(Fields!StandardCost.Value)  

備註

在報表設計師中,自定義元件會載入一次,而且在您關閉 Visual Studio 之前不會卸除。 如果您預覽報表,請變更報表中使用的自定義元件,然後再次預覽報表,變更將不會出現在第二個預覽中。 若要重載元件,請關閉並重新開啟Visual Studio,然後預覽報表。

如需存取程式代碼的詳細資訊,請參閱 透過表達式存取自定義元件

將內建集合傳遞至自定義元件

如果您想要將 GlobalsParameters 集合等內建集合傳遞至自定義元件進行處理,您必須將程式代碼專案中的元件參考新增至定義內建集合的元件,並存取正確的命名空間。 根據您要針對在報表伺服器上執行的報表開發自定義元件(伺服器報表),或是在 .NET 應用程式中本機執行的報表(本機報表),您需要參考的元件不同。 如需詳細資料,請參閱下文。

  • Namespace: Microsoft.ReportingServices.ReportProcessing.ReportObjectModel

  • 組件(本機報告): Microsoft.ReportingServices.ProcessingObjectModel.dll

  • 組件(伺服器報表): Microsoft.ReportViewer.ProcessingObjectModel.dll

由於 FieldsReportItems 集合的內容可以在運行時間動態變更,因此您不應該在對自定義元件的呼叫之間保留這些集合(例如,在成員變數中)。 相同的建議通常會套用至所有內建集合。

另請參閱

將程式代碼加入到報告 (SSRS)
將自訂組件與報表搭配使用
將組件引用新增到報表(SSRS)
Reporting Services 教學指南 (SSRS)
運算式範例 (報表產生器及 SSRS)
報表範例 (報表產生器及 SSRS)