보고서 디자이너의 식에 포함된 사용자 지정 코드 및 어셈블리 참조(SSRS)Custom Code and Assembly References in Expressions in Report Designer (SSRS)

보고서에 포함된 사용자 지정 코드 또는 직접 작성한 사용자 지정 어셈블리에 대한 참조를 추가한 다음 컴퓨터에 저장하고 보고서 서버로 배포할 수 있습니다.You can add references to custom code embedded in a report or to custom assemblies that you build and save to your computer and deploy to the report server. 단일 보고서에서 여러 번 사용된 함수, 사용자 지정 상수 또는 복잡한 함수에는 포함 코드를 사용합니다.Use embedded code for custom constants, complex functions or functions that are used multiple times in a single report. 코드를 한 위치에서 관리하면서 여러 보고서에서 사용할 수 있도록 공유하려면 사용자 지정 코드 어셈블리를 사용합니다.Use custom code assemblies to maintain code in a single place and share it for use by multiple reports. 사용자 지정 코드에는 새로운 사용자 지정 상수, 변수, 함수 또는 서브루틴이 포함될 수 있습니다.Custom code can include new custom constants, variables, functions, or subroutines. Parameters 컬렉션과 같은 기본 제공 컬렉션에 대한 읽기 전용 참조를 포함할 수 있습니다.You can include read-only references to built-in collections such as the Parameters collection. 그러나 사용자 지정 함수에 보고서 데이터 값 집합을 전달할 수 없으며 특히 사용자 지정 집계는 지원되지 않습니다.However, you cannot pass sets of report data values to custom functions; specifically, custom aggregates are not supported.

중요

런타임에 한 번 계산되고 보고서 처리 과정에서 같은 값을 유지해야 하는 시간적 제한을 받는 계산의 경우 보고서 변수 또는 그룹 변수 사용을 고려하십시오.For time-sensitive calculations that are evaluated once at run-time and that you want to remain the same value throughout report processing, consider whether to use a report variable or group variable. 자세한 내용은 보고서 및 그룹 변수 컬렉션 참조(보고서 작성기 및 SSRS)를 참조하세요.For more information, see Report and Group Variables Collections References (Report Builder and SSRS).

기본적으로는 보고서 디자이너를 제작 환경으로 사용하여 보고서에 사용자 지정 코드를 추가합니다.Report Designer is the preferred authoring environment to use to add custom code to a report. 보고서 작성기에서는 유효한 식을 포함하거나 보고서 서버에 있는 사용자 지정 어셈블리에 대한 참조를 포함하는 보고서를 처리할 수 있습니다.Report Builder supports processing reports that have valid expressions, or that include references to custom assemblies on a report server. 그러나 보고서 작성기에서 사용자 지정 어셈블리에 대한 참조를 추가할 수는 없습니다.Report Builder does not provide a way to add a reference to a custom assembly.

참고

보고서 서버를 업그레이드하는 동안 사용자 지정 어셈블리를 사용하는 보고서의 경우에는 업그레이드를 완료하려면 추가 단계를 수행해야 할 수 있습니다.Be aware that during an upgrade of a report server, reports that depend on custom assemblies might require additional steps to complete the upgrade.

참고

SQL Server Data Tools의 보고서 작성기 및 보고서 디자이너에서 페이지를 매긴 보고서 정의(.rdl) 파일을 만들고 수정할 수 있습니다.You can create and modify paginated report definition (.rdl) files in Report Builder and in Report Designer in SQL Server Data Tools. 각 제작 환경에서는 보고서 및 관련 항목을 만들고, 열고, 저장할 수 있는 여러 방법을 제공합니다.Each authoring environment provides different ways to create, open, and save reports and related items.

보고서 작성기에서 사용자 지정 코드 작업Working with Custom Code in Report Builder

보고서 작성기에서는 사용자 지정 어셈블리에 대한 참조를 포함하는 보고서 서버의 보고서를 열 수 있습니다.In Report Builder, you can open a report from a report server that includes references to custom assemblies. 예를 들어 보고서 디자이너를 사용하여 만들고 배포한 보고서를 SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT)에서 편집할 수 있습니다.For example, you can edit reports that are created and deployed by using Report Designer in SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT). 사용자 지정 어셈블리는 보고서 서버에 배포해야 합니다.The custom assemblies must be deployed to the report server.

다음 작업은 수행할 수 없습니다.You cannot do the following:

  1. 보고서에 대한 참조 또는 클래스 멤버 인스턴스 추가Add references or class member instances to a report.

  2. 로컬 모드에서 사용자 지정 어셈블리에 대한 참조가 포함된 보고서 미리 보기Preview a report with references to custom assemblies in local mode.

일반적으로 사용되는 함수에 대한 참조 포함Including References to Commonly Used Functions

대화 상자를 사용하여 Reporting ServicesReporting Services에 기본 제공되는 일반적으로 사용되는 함수 목록을 범주별로 볼 수 있습니다.Use the Expression dialog box to view a categorized list of common functions built-in to Reporting ServicesReporting Services. 일반 함수 를 확장하고 범주를 클릭하면 식에 포함할 수 있는 함수 목록이 항목 창에 표시됩니다.When you expand Common Functions and click a category, the Item pane displays the list of functions that you include in an expression. 일반 함수에는 .NET Framework.NET Framework MathConvert 네임스페이스의 클래스와 Visual BasicVisual Basic 런타임 라이브러리 함수가 포함됩니다.The common functions include classes from the .NET Framework.NET Framework Math and Convert namespaces and Visual BasicVisual Basic run-time library functions. 편의상 대화 상자에서 범주별로 나열된 가장 일반적으로 사용되는 함수 목록을 볼 수 있습니다. 범주는 텍스트, 날짜 및 시간, 수치 연산, 검사, 프로그램 흐름, 집계, 재무, 변환 및 기타입니다.For convenience, you can view the most commonly used functions in the Expression dialog box, where they are listed by category: Text, Date and Time, Math, Inspection, Program Flow, Aggregate, Financial, Conversion, and Miscellaneous. 자주 사용되지 않는 함수는 목록에 표시되지 않지만 식에 사용할 수 있습니다.Less commonly used functions do not appear in the list but can still be used in an expression.

기본 제공 함수를 사용하려면 항목 창에서 함수 이름을 두 번 클릭합니다.To use a built-in function, double-click the function name in the Item pane. 함수 설명이 설명 창에 표시되고 함수 호출 예가 예제 창에 표시됩니다.A description of the function appears in the Description pane and an example of the function call appears in the Example pane. 코드 창에서 함수 이름을 입력하고 왼쪽 괄호 (를 입력하면 IntelliSense 도움말을 통해 해당 함수 호출에 적합한 각 구문이 표시됩니다.In the code pane, when you type the function name followed by a left parenthesis (, the IntelliSense help displays each valid syntax for the function call. 예를 들어 테이블의 Quantity 라는 필드에 대한 최대값을 계산하려면 코드 창에 =Max( 라는 간단한 식을 입력하고 스마트 태그를 사용하여 해당 함수 호출에 대해 유효한 모든 구문 목록을 확인합니다.For example, to calculate the maximum value for a field named Quantity in a table, add the simple expression =Max( to the Code pane, and then use the smart tags to view all possible valid syntaxes for the function call. 이 예를 완료하려면 =Max(Fields!Quantity.Value)를 입력합니다.To complete this example, type =Max(Fields!Quantity.Value).

각 함수에 대한 자세한 내용은 Math, Convert및 MSDN의 Visual Basic 런타임 라이브러리 멤버 를 참조하세요.For more information about each function, see Math, Convert, and Visual Basic Runtime Library Members on MSDN.

일반적으로 사용되지 않는 함수에 대한 참조 포함Including References to Less Commonly Used Functions

일반적으로 사용되지 않는 다른 CLR 네임스페이스에 대한 참조를 포함하려면 StringBuilder를 참조하세요.To include a reference to other less commonly used CLR namespaces, you must use a fully qualified reference, for example, StringBuilder. 일반적으로 사용되지 않는 이러한 함수의 경우 대화 상자의 코드 창에서 IntelliSense가 지원되지 않습니다.IntelliSense is not supported in the code pane of the Expression dialog box for these less commonly used functions.

자세한 내용은 MSDN의 Visual Basic 런타임 라이브러리 멤버 를 참조하세요.For more information, see Visual Basic Runtime Library Members on MSDN.

외부 어셈블리에 대한 참조 포함Including References to External Assemblies

외부 어셈블리의 클래스에 대한 참조를 포함하려면 보고서 처리기에 대한 어셈블리를 확인해야 합니다.To include a reference to a class in an external assembly, you must identify the assembly for the report processor. 보고서 속성 대화 상자의 참조 페이지를 사용하여 보고서에 추가할 어셈블리의 정규화된 이름을 지정할 수 있습니다.Use the References page of the Report Properties dialog box to specify the fully qualified name of the assembly to add to the report. 식에서 어셈블리의 클래스에 대한 정규화된 이름을 사용해야 합니다.In your expression, you must use the fully qualified name for the class in the assembly. 외부 어셈블리의 클래스는 대화 상자에 표시되지 않으므로 정확한 클래스 이름을 입력해야 합니다.Classes in an external assembly do not appear in the Expression dialog box; you must provide the correct name for the class. 정규화된 이름에는 네임스페이스, 클래스 이름 및 멤버 이름이 포함됩니다.A fully qualified name includes the namespace, the class name, and the member name.

포함 코드 포함Including Embedded Code

보고서에 포함 코드를 추가하려면 보고서 속성 대화 상자의 코드 탭을 사용합니다.To add embedded code to a report, use the Code tab of the Report Properties dialog box. 만드는 코드 블록에는 여러 메서드가 포함될 수 있습니다.The code block you create can contain multiple methods. 포함 코드의 메서드는 MicrosoftMicrosoft Visual BasicVisual Basic 으로 작성되고 인스턴스를 기반으로 해야 합니다.Methods in embedded code must be written in MicrosoftMicrosoft Visual BasicVisual Basic and must be instance-based. 보고서 처리기는 System.Convert 및 System.Math 네임스페이스에 대한 참조를 자동으로 추가합니다.The report processor automatically adds references for the System.Convert and System.Math namespaces. 보고서 속성 대화 상자의 참조 페이지를 사용하여 다른 어셈블리 참조를 추가할 수 있습니다.Use the References page of the Report Properties dialog box to add additional assembly references. 자세한 내용은 보고서에 어셈블리 참조 추가(SSRS)를 참조하세요.For more information, see Add an Assembly Reference to a Report (SSRS).

포함 코드의 메서드는 전역적으로 정의된 Code 멤버를 통해 사용할 수 있습니다.Methods in embedded code are available through a globally defined Code member. Code 멤버와 메서드 이름을 참조하여 이러한 메서드에 액세스합니다.You access these by referring to the Code member and the method name. 다음 예에서는 필드 값을 달러 값으로 변환하는ToUSD StandardCost 메서드를 호출합니다.The following example calls the method ToUSD, which converts the value in the StandardCost field to a dollar value:

=Code.ToUSD(Fields!StandardCost.Value)  

사용자 지정 코드에서 기본 제공 컬렉션을 참조하려면 기본 제공 Report 개체에 대한 참조를 포함합니다.To reference built-in collections in your custom code, include a reference to the built-in Report object:

=Report.Parameters!Param1.Value  

다음 예에서는 몇 가지 사용자 지정 상수 및 변수를 정의하는 방법을 보여 줍니다.The following examples show how to define some custom constants and variables.

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  

대화 상자의 상수 범주에서는 기본 제공 상수만 표시되고 사용자 지정 상수는 표시되지 않지만 아래 예와 같이 식에서 사용자 지정 상수에 대한 참조를 추가할 수 있습니다.Although custom constants do not appear in the Constants category in the Expression dialog box (which only displays built-in constants), you can add references to them from any expression, as shown in the following examples. 식에서 사용자 지정 상수는 Variant로 처리됩니다.In an expression, a custom constant is treated as a Variant.

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

다음 예에는 필드에 있는 모든 "Bike" 텍스트를텍스트로 대체하는 "Bicycle" FixSpelling SubCategory 함수의 코드 참조와 코드 구현이 모두 들어 있습니다.The following example includes both the code reference and the code implementation of the function FixSpelling, which substitutes the text "Bicycle" for all occurrences of the text "Bike" in the SubCategory field.

=Code.FixSpelling(Fields!SubCategory.Value)

다음 코드를 보고서 정의 코드 블록에 포함하면 FixSpelling 메서드의 구현을 볼 수 있습니다.The following code, when embedded in a report definition code block, shows an implementation of the FixSpelling method. 이 예에서는 MicrosoftMicrosoft .NET Framework.NET Framework StringBuilder 클래스에 대한 정규화된 참조를 사용하는 방법을 보여 줍니다.This example shows you how to use a fully qualified reference to the MicrosoftMicrosoft .NET Framework.NET Framework StringBuilder class.

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  

기본 제공 개체 컬렉션 및 초기화에 대한 자세한 내용은 기본 제공 Globals 및 Users 참조(보고서 작성기 및 SSRS)사용자 지정 어셈블리 개체 초기화를 참조하세요.For more information about built-in object collections and initialization, see Built-in Globals and Users References (Report Builder and SSRS) and Initializing Custom Assembly Objects.

코드에서 매개 변수에 대한 참조 포함Including References to Parameters from Code

보고서 정의의 코드 블록 또는 사용자가 제공하는 사용자 지정 어셈블리에서 사용자 지정 코드를 통해 전역 매개 변수 컬렉션을 참조할 수 있습니다.You can reference the global parameters collection via custom code in a Code block of the report definition or in a custom assembly that you provide. 매개 변수 컬렉션은 읽기 전용이며 공개 반복기는 없습니다.The parameters collection is read-only and has no public iterators. Visual BasicVisual Basic For Each 구조를 사용하여 컬렉션을 단계별로 실행할 수 없습니다.You cannot use a Visual BasicVisual Basic For Each construct to step through the collection. 보고서 정의에 정의된 매개 변수 이름을 알아야 사용자의 코드에서 해당 매개 변수를 참조할 수 있습니다.You need to know the name of the parameter defined in the report definition before you can reference it in your code. 하지만 다중값 매개 변수의 모든 값을 반복할 수 있습니다.You can, however, iterate through all the values of a multi value parameter.

다음 표에는 사용자 지정 코드에서 기본 제공 컬렉션 Parameters 를 참조하는 예가 들어 있습니다.The following table includes examples of referencing the built-in collection Parameters from custom code:

전체 전역 매개 변수 컬렉션을 사용자 지정 코드에 전달.이 함수는 특정 보고서 매개 변수 MyParameter의 값을 반환합니다.Passing an entire global parameter collection to custom code.This function returns the value of a specific report parameter MyParameter.

식에서의 참조 =Code.DisplayAParameterValue(Parameters)Reference in Expression =Code.DisplayAParameterValue(Parameters)

사용자 지정 코드 정의Custom Code definition

Public Function DisplayAParameterValue(ByVal parameters as Parameters) as Object  
Return parameters("MyParameter").Value  
End Function  

개별 매개 변수를 사용자 지정 코드에 전달.Passing an individual parameter to custom code.

식에서의 참조 =Code.ShowParametersValues(Parameters!DayOfTheWeek)Reference in Expression =Code.ShowParametersValues(Parameters!DayOfTheWeek)

이 예에서는 전달된 매개 변수의 값을 반환합니다.This example returns the value of the parameter passed in. 매개 변수가 다중값 매개 변수일 경우 반환 문자열은 모든 값을 연결한 것입니다.If the parameter is a multivalue parameter, the return string is a concatenation of all the values.

사용자 지정 코드 정의Custom Code definition

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  

사용자 지정 어셈블리에서 코드에 대한 참조 포함Including References to Code from Custom Assemblies

보고서에 사용자 지정 어셈블리를 사용하려면 먼저 어셈블리를 만들고 보고서 디자이너에서 사용할 수 있게 한 다음 보고서에 어셈블리에 대한 참조를 추가하고 보고서에서 식을 사용하여 해당 어셈블리에 포함된 메서드를 참조해야 합니다.To use custom assemblies in a report, you must first create the assembly, make it available to Report Designer, add a reference to the assembly in the report, and then use an expression in the report to refer to the methods contained in that assembly. 보고서가 보고서 서버에 배포될 때 사용자 지정 어셈블리도 보고서 서버에 배포해야 합니다.When the report is deployed to the report server, you must also deploy the custom assembly to the report server.

사용자 지정 어셈블리를 만들고 Reporting ServicesReporting Services에서 사용할 수 있도록 설정하는 방법에 대한 자세한 내용은 보고서에서 사용자 지정 어셈블리 사용을 참조하세요.For information about creating a custom assembly and making it available to Reporting ServicesReporting Services, see Using Custom Assemblies with Reports.

식의 사용자 지정 코드를 참조하려면 어셈블리 내에서 클래스의 멤버를 호출해야 합니다.To refer to custom code in an expression, you must call the member of a class within the assembly. 이 방법은 메서드가 정적인지 아니면 인스턴스 기반인지에 따라 달라집니다.How you do this depends on whether the method is static or instance-based. 사용자 지정 어셈블리 내의 정적 메서드는 보고서 내에서 전체적으로 사용할 수 있습니다.Static methods within a custom assembly are available globally within the report. 식에서 네임스페이스, 클래스 및 메서드 이름을 지정하여 정적 메서드에 액세스할 수 있습니다.You can access static methods in expressions by specifying the namespace, class, and method name. 다음 예에서는 StandardCost값을 달러에서 파운드로 변환하는 ToGBP 메서드를 호출합니다.The following example calls the method ToGBP, which converts the value of the StandardCost value from dollar to pounds sterling:

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

인스턴스 기반 메서드는 전역적으로 정의된 Code 멤버를 통해 사용할 수 있습니다.Instance-based methods are available through a globally defined Code member. Code 멤버를 참조한 다음 인스턴스와 메서드 이름을 참조하여 이러한 메서드에 액세스합니다.You access these by referring to the Code member, followed by the instance and method name. 다음 예에서는 StandardCost값을 달러에서 유로로 변환하는 인스턴스 메서드 ToEUR 을 호출합니다.The following example calls the instance method ToEUR, which converts the value of StandardCost from dollar to euro:

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

참고

보고서 디자이너에 사용자 지정 어셈블리를 로드하면 Visual StudioVisual Studio를 닫을 때까지 언로드되지 않습니다.In Report Designer, a custom assembly is loaded once and is not unloaded until you close Visual StudioVisual Studio. 보고서 미리 보기를 수행할 경우 보고서에 사용된 사용자 지정 어셈블리를 변경한 다음 다시 보고서 미리 보기를 수행하면 변경 내용이 적용되어 나타나지 않습니다.If you preview a report, make changes to a custom assembly used in the report, and then preview the report again, the changes will not appear in the second preview. 어셈블리를 다시 로드하려면 Visual StudioVisual Studio 를 닫고 다시 연 다음 보고서 미리 보기를 수행하세요.To reload the assembly, close and reopen Visual StudioVisual Studio and then preview the report.

코드에 액세스하는 방법은 Accessing Custom Assemblies Through Expressions를 참조하세요.For more information about accessing your code, see Accessing Custom Assemblies Through Expressions.

사용자 지정 어셈블리에 기본 제공 컬렉션 전달Passing Built-in Collections into Custom Assemblies

처리 작업을 위해 전역 또는 매개 변수 컬렉션과 같은 기본 제공 컬렉션을 사용자 지정 어셈블리에 전달하려는 경우 기본 제공 컬렉션을 정의하고 올바른 네임스페이스에 액세스하는 어셈블리에 코드 프로젝트의 어셈블리 참조를 추가해야 합니다.If you want to pass built-in collections, such as the Globals or Parameters collection, into a custom assembly for processing, you must add an assembly reference in your code project to the assembly that defines the built-in collections and access the correct namespace. 보고서 서버에서 실행되는 보고서(서버 보고서)에 대한 사용자 지정 어셈블리를 개발하는지, 아니면 .NET 응용 프로그램에서 로컬로 실행되는 보고서(로컬 보고서)에 대한 사용자 지정 어셈블리를 개발하는지에 따라 다른 어셈블리를 참조해야 합니다.Depending on whether you are developing the custom assembly for a report that is run on a report server (server report) or a report that is run locally in a .NET application (local report), the assembly you need to reference is different. 자세한 내용은 아래를 참조하세요.See below for details.

  • 네임스페이스: Microsoft.ReportingServices.ReportProcessing.ReportObjectModelNamespace: Microsoft.ReportingServices.ReportProcessing.ReportObjectModel

  • 어셈블리(로컬 보고서): Microsoft.ReportingServices.ProcessingObjectModel.dllAssembly (local report): Microsoft.ReportingServices.ProcessingObjectModel.dll

  • 어셈블리(서버 보고서): Microsoft.ReportViewer.ProcessingObjectModel.dllAssembly (server report): Microsoft.ReportViewer.ProcessingObjectModel.dll

    FieldsReportItems 컬렉션의 내용은 런타임에 동적으로 변경될 수 있으므로 사용자 지정 어셈블리에 대한 호출에서(예: 멤버 변수) 해당 컬렉션을 유지해서는 안 됩니다.Since the content of the Fields and ReportItems collections can change dynamically at runtime, you should not hold onto them across calls into the custom assembly (for example, in a member variable). 일반적으로 모든 기본 제공 컬렉션에 같은 권장 사항이 적용됩니다.The same recommendation applies generally to all built-in collections.

관련 항목:See Also

보고서에 코드 추가(SSRS) Add Code to a Report (SSRS)
보고서에서 사용자 지정 어셈블리 사용 Using Custom Assemblies with Reports
보고서에 어셈블리 참조 추가(SSRS) Add an Assembly Reference to a Report (SSRS)
Reporting Services 자습서 (SSRS) Reporting Services Tutorials (SSRS)
식 예(보고서 작성기 및 SSRS) Expression Examples (Report Builder and SSRS)
보고서 예제(보고서 작성기 및 SSRS)Report Samples (Report Builder and SSRS)