データセット フィールド コレクションの参照の使用 (レポート ビルダー 3.0 および SSRS)

レポート内の各データセットには、単一の Fields コレクションが格納されます。Fields コレクションは、データセット クエリによって指定されるフィールドのセットに、ユーザーが作成する補足の計算フィールドを追加したものです。データセットを作成すると、フィールド コレクションがレポート データ ペインに表示されます。

式内の単純なフィールド参照は、デザイン画面に単純な式として表示されます。たとえば、フィールド Sales をレポート データ ペインからデザイン画面のテーブル セルにドラッグすると、[Sales] が表示されます。この式は、テキスト ボックスの Value プロパティに対して設定されている基本となる式 =Fields!Sales.Value を表しています。レポートが実行されると、レポート プロセッサによってこの式が評価され、テーブル セルのテキスト ボックスにデータ ソースの実際のデータが表示されます。詳細については、「式 (レポート ビルダー 3.0 および SSRS)」および「レポート データセット内のフィールドの操作 (レポート ビルダー 3.0 および SSRS)」を参照してください。

注意

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

データセットのフィールド コレクションの表示

フィールド コレクションの個々の値を表示するには、各フィールドをテーブル詳細行にドラッグして、レポートを実行します。フィールド参照がテーブル データ領域または一覧データ領域の詳細行に含まれている場合は、データセットの行ごとの値が表示されます。

フィールドの集約値を表示するには、各数値フィールドをマトリックスのデータ領域にドラッグします。行の総数を計算する既定の集計関数は、=Sum(Fields!Sales.Value) などの Sum 関数です。既定の関数を変更して、別の合計を計算することもできます。詳細については、「集計関数リファレンス (レポート ビルダー 3.0 および SSRS)」を参照してください。

テキスト ボックス内のフィールド コレクションに関する集約値を (データ領域の一部ではなく) デザイン画面に直接表示するには、集計関数のスコープとしてデータセット名を指定する必要があります。たとえば、SalesData という名前のデータセットの場合は、=Sum(Fields!Sales,"SalesData") という式によってフィールド Sales のすべての値の合計が指定されます。

[式] ダイアログ ボックスを使用して単純なフィールド参照を定義する場合は、カテゴリ ペインで Fields コレクションを選択して、使用可能なフィールドの一覧をフィールド ペインに表示できます。各フィールドには、ValueIsMissing などのいくつかのプロパティがあります。残りのプロパティは、データ ソースの種類によってはデータセットで使用できる場合がある、定義済みの拡張フィールド プロパティです。

値が NULL であるデータセット フィールドの検出

NULL (Visual Basic では Nothing) であるフィールド値を検出するには、関数 IsNothing を使用します。次の式をテーブル詳細行のテキスト ボックスに配置すると、フィールド MiddleName がテストされ、値が NULL の場合は "No Middle Name" という文字列、値が NULL 以外の場合はフィールド値そのもので置き換えられます。

=IIF(IsNothing(Fields!MiddleName.Value),"No Middle Name",Fields!MiddleName.Value)

実行時の動的クエリにおける存在しないフィールドの検出

既定では、Fields コレクションのアイテムには、Value および IsMissing という 2 つのプロパティがあります。IsMissing プロパティは、デザイン時にデータセットに対して定義されているフィールドが、実行時に取得されたフィールドに存在するかどうかを示します。たとえば、クエリには、入力パラメーターによって結果セットの異なるストアド プロシージャを呼び出すものや、テーブル定義が変更された場合に SELECT * FROM <table> を照会するものがあります。

注意

IsMissing は、任意の種類のデータ ソースに関して、デザイン時と実行時の間にデータセット スキーマに加えられた変更を検出します。IsMissing は、多次元キューブで空のメンバーを検出するために使用することはできません。また、EMPTY および NON EMPTY という MDX クエリ言語の概念とは関連していません。

IsMissing プロパティをカスタム コードでテストすると、結果セットにフィールドが含まれているかどうかを特定できます。Visual Basic 関数では、関数の呼び出しに含まれているすべてのパラメーターが評価されるので、存在しないパラメーターへの参照が評価されたときにエラーが返されます。そのため、Visual Basic 関数の呼び出しで IIF や SWITCH などの式を使用してフィールドの有無をテストすることはできません。

存在しないフィールド用の動的列の表示を制御する例

データセット内のフィールドを表示する列の表示を制御するための式を設定するには、まず、フィールドの有無に基づいてブール値を返すカスタム コード関数を定義しておく必要があります。たとえば、次のカスタム コード関数では、フィールドが存在しない場合に true、フィールドが存在する場合に false が返されます。

Public Function IsFieldMissing(field as Field) as Boolean
 If (field.IsMissing) Then
 Return True
  Else 
  Return False
 End If
End Function

この関数を使用して列の表示を制御するには、列の Hidden プロパティを次の式に設定します。

=Code.IsFieldMissing(Fields!FieldName)

フィールドが存在しない場合、列は非表示になります。

存在しないフィールドのテキスト ボックス値を制御する例

指定した文字列で存在しないフィールドの値を置き換えるには、カスタム コードを作成して、フィールドが存在しない場合にそのフィールド値の代わりに使用できる文字列が返されるようにする必要があります。たとえば、次のカスタム コード関数を実行すると、フィールドが存在する場合はフィールドの値が返され、フィールドが存在しない場合は 2 番目のパラメーターとして指定したメッセージが返されます。

Public Function IsFieldMissingThenString(field as Field, strMessage as String) as String
 If (field.IsMissing) Then
  Return strMessage
 Else 
  Return field.Value
  End If
End Function

この関数をテキスト ボックスで使用するには、次の式を Value プロパティに追加します。

=Code.IsFieldMissingThenString(Fields!FieldName,"Missing")

テキスト ボックスには、フィールド値または指定した文字列が表示されます。

拡張フィールド プロパティの使用

拡張フィールド プロパティは、データ処理拡張機能によってフィールドに定義された追加プロパティであり、データセットのデータ ソースの種類に基づいて決定されます。拡張フィールド プロパティには、定義済みのものと、データ ソースの種類に固有のものがあります。詳細については、「Analysis Services データベースに対する拡張フィールド プロパティ (SSRS)」を参照してください。

そのフィールドでサポートされていないプロパティを指定した場合、式は null (Visual Basic では Nothing) に評価されます。データ プロバイダーが拡張フィールド プロパティをサポートしていない場合や、クエリ実行時にフィールドが見つからなかった場合、String 型と Object 型のプロパティの値は null (Visual Basic では Nothing) に、Integer 型のプロパティの値はゼロ (0) になります。データ処理拡張機能は、定義済みのプロパティを利用することによって、この構文を含んでいるクエリを最適化する場合があります。