レポート デザイナーの式でのカスタム コード参照とアセンブリ参照 (SSRS)

レポートに埋め込まれたカスタム コードへの参照、またはビルドしてコンピューターに保存し、レポート サーバーに配置したカスタム アセンブリへの参照を追加できます。カスタム定数、複雑な関数、または 1 レポート内で何度も使用される関数には、埋め込みコードを使用します。コードを 1 か所で管理し、複数のレポートで共有する場合は、カスタム コード アセンブリを使用します。カスタム コードには、新しいカスタム定数、変数、関数、またはサブルーチンを含めることができます。Parameters コレクションなど、組み込みコレクションへの読み取り専用の参照を含めることが可能です。ただし、レポート データ値セットをカスタム関数に渡すことはできません。特に、カスタム集計はサポートされていません。

セキュリティに関する注意セキュリティに関する注意

実行時に 1 度評価し、レポート処理全体で同じ値を保持しておく必要のある、タイミングに依存する計算の場合は、レポート変数とグループ変数のどちらを使用するかを検討してください。詳細については、「レポート変数コレクションとグループ変数コレクションの参照の使用 (レポート ビルダー 3.0 および SSRS)」を参照してください。

レポートにカスタム コードを追加する場合は、レポート作成環境としてレポート デザイナーを使用することをお勧めします。レポート ビルダー 3.0 では、有効な式が含まれたレポート、またはレポート サーバー上のカスタム アセンブリへの参照が含まれたレポートの処理をサポートしています。ただし、レポート ビルダーでは、カスタム アセンブリへの参照を追加することはできません。

注意

レポート サーバーのアップグレード時に、カスタム アセンブリに依存するレポートには、アップグレードを完了するための追加の手順が必要になる場合があります。詳細については、「アップグレード アドバイザーを使用したアップグレードの準備」を参照してください。

注意

レポート定義 (.rdl) は、Business Intelligence Development Studio のレポート ビルダー 3.0 およびレポート デザイナーで作成および変更できます。これらの作成環境では、レポートおよび関連アイテムの作成方法、開く方法、および保存方法が異なります。詳細については、microsoft.com Web サイトの「レポート デザイナーとレポート ビルダー 3.0 でのレポートのデザイン (SSRS)」を参照してください。

この記事の内容

レポート ビルダー 3.0 でのカスタム コードの使用

使用頻度の高い関数への参照の追加

使用頻度の低い関数への参照の追加

外部アセンブリへの参照の追加

埋め込みコードの追加

コードからのパラメーター参照の追加

カスタム アセンブリからのコード参照の追加

レポート ビルダー 3.0 でのカスタム コードの使用

レポート ビルダーでは、カスタム アセンブリへの参照が含まれたレポートをレポート サーバーから開くことができます。たとえば、Business Intelligence Development Studio のレポート デザイナーを使用して作成し、配置したレポートを編集できます。カスタム アセンブリは、レポート サーバーに配置する必要があります。

次の操作は実行できません。

  1. 参照またはクラス メンバー インスタンスをレポートに追加する。

  2. カスタム アセンブリへの参照が含まれたレポートをローカル モードでプレビューする。

[トップに戻る] リンクで使用される矢印アイコントップに戻る

使用頻度の高い関数への参照の追加

[式] ダイアログ ボックスを使用すると、Reporting Services に組み込まれている共通の関数の一覧がカテゴリ別に表示されます。[共通の関数] を展開してカテゴリをクリックすると、式に含める関数の一覧が [アイテム] ペインに表示されます。共通の関数には、.NET Framework の System..::..Math 名前空間と System..::..Convert 名前空間のクラス、および Visual Basic ランタイム ライブラリ関数が含まれています。便宜上、最もよく使用される関数が [式] ダイアログ ボックスで表示されます。このダイアログ ボックスでは、これらの関数は、テキスト、日付と時刻、数学、検査、プログラム フロー、集計、財務、変換、およびその他というカテゴリごとに表示されます。使用頻度の低い関数は、一覧に表示されませんが、式で使用することはできます。

組み込み関数を使用するには、[アイテム] ペインで関数名をダブルクリックします。説明ペインに関数の説明が表示され、サンプル ペインに関数呼び出しの例が表示されます。コード ペインで、関数名の後に左かっこ "(" を入力すると、IntelliSense により、関数呼び出しの有効な各構文が表示されます。たとえば、テーブルの Quantity という名前のフィールドの最大値を計算するには、=Max( という単純な式をコード ペインに追加した後、スマート タグを使用して、関数呼び出しに使用できる有効な構文をすべて表示します。この例を完成させるには、「=Max(Fields!Quantity.Value)」と入力します。 

各関数の詳細については、MSDN の「System..::..Math」、「System..::..Convert」、および「Visual Basic ランタイム ライブラリのメンバー」を参照してください。

[トップに戻る] リンクで使用される矢印アイコントップに戻る

使用頻度の低い関数への参照の追加

使用頻度の低い、その他の CLR 名前空間への参照を含めるには、System.Text..::..StringBuilder など、完全修飾参照を使用する必要があります。このような使用頻度の低い関数については、[式] ダイアログ ボックスのコード ペインで IntelliSense がサポートされていません。

詳細については、MSDN の「Visual Basic ランタイム ライブラリのメンバー」を参照してください。

外部アセンブリへの参照の追加

外部アセンブリ内のクラスへの参照を含めるには、レポート プロセッサのアセンブリを特定する必要があります。レポートに追加するアセンブリの完全修飾名を指定するには、[レポートのプロパティ] ダイアログ ボックスの [参照] ページを使用します。式では、アセンブリ内のクラスの完全修飾名を使用する必要があります。外部アセンブリ内のクラスは、[式] ダイアログ ボックスに表示されません。そのため、クラスの正しい名前を指定する必要があります。完全修飾名には、名前空間、クラス名、およびメンバー名が含まれます。

[トップに戻る] リンクで使用される矢印アイコントップに戻る

埋め込みコードの追加

埋め込みコードをレポートに追加するには、[レポートのプロパティ] ダイアログ ボックスの [コード] タブを使用します。作成したコード ブロックでは、複数のメソッドを使用できます。埋め込みコード内のメソッドは、Microsoft Visual Basic で記述し、インスタンス ベースである必要があります。レポート プロセッサによって、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

組み込みオブジェクトのコレクションと初期化の詳細については、「組み込み Globals および Users 参照の使用 (レポート ビルダー 3.0 および SSRS)」および「カスタム アセンブリ オブジェクトの初期化」を参照してください。

[トップに戻る] リンクで使用される矢印アイコントップに戻る

コードからのパラメーター参照の追加

レポート定義のコード ブロックまたはユーザーが指定したカスタム アセンブリのカスタム コードを経由してグローバル パラメーター コレクションを参照できます。パラメーター コレクションは読み取り専用で、パブリック反復子がありません。コレクションのステップ実行に 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 を終了するまでアンロードされません。レポートをプレビューして、レポートで使用するカスタム アセンブリに変更を加え、その後再びレポートをプレビューした場合、2 回目のプレビューでは行った変更が表示されません。アセンブリを再度読み込むには、Visual Studio を終了してから再起動し、レポートをプレビューします。

コードへのアクセスの詳細については、「式を使用したカスタム アセンブリへのアクセス」を参照してください。

[トップに戻る] リンクで使用される矢印アイコントップに戻る

カスタム アセンブリへの組み込みコレクションの引き渡し

組み込みコレクション (Globals コレクションや Parameters コレクションなど) をカスタム アセンブリに渡して処理したい場合は、コード プロジェクト内のアセンブリ参照を、組み込みコレクションを定義するアセンブリに追加し、正しい名前空間にアクセスする必要があります。開発しているカスタム アセンブリが、レポート サーバー上で実行されるレポート (サーバー レポート) 用のものなのか、それとも .NET アプリケーション内でローカルに実行されるレポート (ローカル レポート) 用のものなのかによって、参照する必要があるアセンブリは異なります。詳細については、以下を参照してください。

  • 名前空間: Microsoft.ReportingServices.ReportProcessing.ReportObjectModel

  • アセンブリ (ローカル レポート): Microsoft.ReportingServices.ProcessingObjectModel.dll

  • アセンブリ (サーバー レポート): Microsoft.ReportViewer.ProcessingObjectModel.dll

Fields および ReportItems コレクションの内容は実行時に動的に変更されるので、カスタム アセンブリ内への呼び出し間でそれらを保持することは避けてください (たとえば、メンバー変数内など)。この推奨事項は、すべての組み込みコレクションについて共通に該当します。