レポート デザイナーでカスタム コードやアセンブリを式から参照する (SSRS)
レポート内に埋め込まれたカスタム コードや、ビルドして自分のコンピューターに保存 (またはレポート サーバーに配置) したカスタム アセンブリは、レポート内から参照することができます。 カスタム定数、複雑な関数、または 1 レポート内で何度も使用される関数には、埋め込みコードを使用します。 コードを 1 か所で管理し、そのコードを複数のレポートで共有する場合は、カスタム コード アセンブリを使用します。 カスタム コードには、新しいカスタム定数、変数、関数、またはサブルーチンを含めることができます。 Parameters コレクションなど、組み込みコレクションへの読み取り専用の参照を含めることが可能です。 ただし、レポート データ値セットをカスタム関数に渡すことはできません。特に、カスタム集計はサポートされていません。
セキュリティに関する注意 |
---|
実行時にいったん評価し、レポート処理全体で同じ値を保持しておく必要のある、タイミングに依存するような計算の場合は、レポート変数とグループ変数のどちらを使用するかを検討してください。 詳細については、「レポート変数コレクションとグループ変数コレクションの参照 (レポート ビルダーおよび SSRS)」を参照してください。 |
カスタム コードをレポートに追加するための作成環境としては、レポート デザイナーの使用をお勧めします。 レポート ビルダーでサポートされるのは、有効な式を含んだレポートの処理、またはレポート サーバー上のカスタム アセンブリへの参照を含んだレポートの処理です。 カスタム アセンブリへの参照を追加する手段は、レポート ビルダーには用意されていません。
注 |
---|
カスタム アセンブリに依存しているレポートについては、レポート サーバーのアップグレード時に注意が必要です。アップグレードを完了するまでに、追加の手順が必要となる場合があります。 詳細については、「アップグレード アドバイザーを使用したアップグレードの準備」を参照してください。 |
注 |
---|
SQL Server データ ツールのレポート ビルダーまたはレポート デザイナーを使用して、レポート定義 (.rdl) を作成および変更できます。これらの作成環境では、レポートおよび関連アイテムの作成方法、開く方法、および保存方法が異なります。詳細については、microsoft.com Web サイトの「レポート デザイナーおよびレポート ビルダーを使用したレポートのデザイン (SSRS)」を参照してください。 |
この記事の内容
レポート ビルダーでのカスタム コードの使用
使用頻度の高い関数への参照の追加
使用頻度の低い関数への参照の追加
外部アセンブリへの参照の追加
埋め込みコードの追加
パラメーターへの参照の追加 (コード経由)
コードへの参照の追加 (カスタム アセンブリ経由)
カスタム アセンブリへの組み込みコレクションの引き渡し
レポート ビルダーでのカスタム コードの使用
レポート ビルダーでは、カスタム アセンブリを参照するレポートをレポート サーバーから取得して開くことができます。 たとえば、SQL Server データ ツール (SSDT) のレポート デザイナーを使用して作成、配置されたレポートを編集することができます。 カスタム アセンブリは、レポート サーバーに配置されている必要があります。
次の操作は実行できません。
参照またはクラス メンバーのインスタンスをレポートに追加する。
カスタム アセンブリへの参照を含んだレポートをローカル モードでプレビューする。
トップに戻る
使用頻度の高い関数への参照の追加
[式] ダイアログ ボックスを使用すると、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 参照 (レポート ビルダーおよび 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) |
|
トップに戻る
コードへの参照の追加 (カスタム アセンブリ経由)
レポートでカスタム アセンブリを使用するには、まずアセンブリを作成して、これをレポート デザイナーが利用できるようにし、アセンブリへの参照をレポートに追加してから、レポート内の式を使用してこのアセンブリ内のメソッドを参照します。 レポートがレポート サーバーに配置される場合は、カスタム アセンブリもレポート サーバーに配置する必要があります。
カスタム アセンブリを作成して 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 コレクションの内容は実行時に動的に変更されるので、カスタム アセンブリ内への呼び出し間でそれらを保持することは避けてください (たとえば、メンバー変数内など)。 この推奨事項は、すべての組み込みコレクションについて共通に該当します。