식에 사용자 지정 코드 참조 사용(Reporting Services)

업데이트: 2006년 4월 14일

보고서에 사용자 지정 함수를 추가하거나 외부 어셈블리에 있는 함수에 대한 참조를 추가할 수 있습니다. 보고서 서버에서는 Microsoft.VisualBasic, System.ConvertSystem.Math 어셈블리에 대한 참조를 자동으로 추가합니다. 보고서 속성 대화 상자나 보고서 정의의 CodeModules 요소를 사용하면 다른 어셈블리를 참조할 수 있습니다.

보고서 속성 대화 상자를 사용하여 새 사용자 지정 함수를 정의할 수도 있습니다. 보고서 정의에 사용자 지정 함수를 정의하려면 Code 요소를 사용합니다. 그러나 함수에 데이터 값 집합을 전달할 수는 없으며 특히 사용자 지정 집계는 지원되지 않습니다.

보고서 전체에서 식에 사용되는 사용자 지정 코드를 작성할 수 있습니다. 이 작업은 보고서 내에 코드를 포함하거나 사용자 지정 어셈블리 내에 있는 메서드를 참조하여 수행할 수 있습니다. 단일 보고서에서 여러 번 사용된 복합 함수에 대해 포함 코드를 사용합니다. 여러 보고서에서 공유하는 코드를 한 위치에서 관리하려면 코드 어셈블리를 사용합니다.

포함 코드

보고서 내에서 코드를 사용하려면 보고서에 코드 블록을 추가합니다. 이 코드 블록은 여러 메서드를 포함할 수 있습니다. 포함 코드의 메서드는 Microsoft Visual Basic으로 작성되고 인스턴스를 기반으로 해야 합니다.

보고서에 코드를 추가하는 방법은 방법: 보고서에 코드 추가(보고서 디자이너)를 참조하십시오.

포함 코드의 메서드는 전역적으로 정의된 Code 멤버를 통해 사용할 수 있습니다. Code 멤버와 메서드 이름을 참조하여 이러한 메서드에 액세스합니다. 다음 예에서는 StandardCost 필드 값을 달러 값으로 변환하는 ToUSD 메서드를 호출합니다.

=Code.ToUSD(Fields!StandardCost.Value)

사용자 지정 코드에서 전역 컬렉션을 참조하려면 기본 제공 Report 개체에 대한 참조를 포함합니다.

=Report.Parameters!Param1

다음 예에서는 몇 가지 사용자 지정 상수 및 변수를 정의하는 방법을 보여 줍니다.

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

다음 예에는 SubCategory 필드의 값에 대한 텍스트 Bike를 모두 Bicycle로 대체하는 FixSpelling 함수의 코드 참조와 코드 구현이 모두 들어 있습니다.

=Code.FixSpelling(Fields!SubCategory.Value)

다음 코드를 보고서 정의에 포함하면 FixSpelling 메서드의 구현을 볼 수 있습니다. 이 사용자 지정 코드를 처음으로 실행하면 메시지 상자에 대체된 텍스트가 표시됩니다. 이 예에서는 Microsoft .NET Framework StringBuilder 클래스와 System.Windows.Forms.MessageBox 클래스를 참조하는 방법을 보여 줍니다. System.Windows.Forms에 대한 보고서 속성에 참조를 추가해야 합니다. 자세한 내용은 방법: 보고서에 코드 추가(보고서 디자이너)방법: 보고서에 어셈블리 참조 추가(보고서 디자이너)를 참조하십시오.

Dim firstTime As Boolean = True 
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")
      If firstTime Then
        System.Windows.Forms.MessageBox.Show(strBuilder.ToString())
'       or MsgBox(strBuilder.ToString())
        firstTime = False
      End If
      Return strBuilder.ToString()
      Else : Return s
   End If
End Function

전역 개체 컬렉션 및 초기화에 대한 자세한 내용은 식에 전역 컬렉션 사용Initializing Custom Assembly Objects를 참조하십시오.

사용자 지정 어셈블리

보고서에 사용자 지정 어셈블리를 사용하려면 먼저 어셈블리를 만들고 보고서 디자이너에서 사용할 수 있게 한 다음 보고서에 어셈블리에 대한 참조를 추가하고 보고서에서 식을 사용하여 해당 어셈블리에 포함된 메서드를 참조해야 합니다. 보고서가 보고서 서버에 배포될 때 사용자 지정 어셈블리도 보고서 서버에 배포해야 합니다.

사용자 지정 어셈블리를 만들고 Reporting Services에서 사용할 수 있게 하는 방법에 대한 자세한 내용은 Using Custom Assemblies with Reports을 참조하십시오. 보고서에 참조를 추가하는 방법은 방법: 보고서에 어셈블리 참조 추가(보고서 디자이너)을 참조하십시오.

식의 사용자 지정 코드를 참조하려면 어셈블리 내에서 클래스의 멤버를 호출해야 합니다. 이 방법은 메서드가 정적인지 아니면 인스턴스 기반인지에 따라 달라집니다. 사용자 지정 어셈블리 내의 정적 메서드는 보고서 내에서 전체적으로 사용할 수 있습니다. 식에서 네임스페이스, 클래스 및 메서드 이름을 지정하여 정적 메서드에 액세스할 수 있습니다. 다음 예에서는 StandardCost 값을 달러에서 파운드로 변환하는 ToGBP 메서드를 호출합니다.

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

인스턴스 기반 메서드는 전역적으로 정의된 Code 멤버를 통해 사용할 수 있습니다. Code 멤버를 참조한 다음 인스턴스와 메서드 이름을 참조하여 이러한 메서드에 액세스합니다. 다음 예에서는 StandardCost 값을 달러에서 유로로 변환하는 인스턴스 메서드 ToEUR을 호출합니다.

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

[!참고] 보고서 디자이너에 사용자 지정 어셈블리를 로드하면 Visual Studio를 닫을 때까지 언로드되지 않습니다. 보고서 미리 보기를 수행할 경우 보고서에 사용된 사용자 지정 어셈블리를 변경한 다음 다시 보고서 미리 보기를 수행하면 변경 내용이 적용되어 나타나지 않습니다. 어셈블리를 다시 로드하려면 Visual Studio를 닫고 다시 연 다음 보고서 미리 보기를 수행하십시오.

참고 항목

관련 자료

Reporting Services에서 식 사용

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 4월 14일

새로운 내용
  • 예를 추가했습니다.

2005년 12월 5일

새로운 내용
  • 전역 컬렉션의 보고서 개체에 대한 참조를 추가했습니다.