Share via


改ページ対応レポート内のデータセット Fields コレクションの参照 (Report Builder)

適用対象: Microsoft レポート ビルダー (SSRS) Power BI Report Builder SQL Server Data Tools のレポート デザイナー

改ページ対応レポート内の各データセットには、1 つの [フィールド] コレクションが含まれます。 [フィールド] コレクションは、データセット クエリによって指定されるフィールドと、ユーザーが作成する追加の計算フィールドのセットです。 データセットを作成すると、フィールド コレクションが [レポート データ] ペインに表示されます。

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

Note

ページ分割されたレポートの定義ファイル (.rdl) は、Microsoft レポート ビルダー、Power BI レポート ビルダー、または SQL Server Data Tools のレポート デザイナーを使用して作成および変更できます。

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

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

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

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

[式] ダイアログを使用して単純なフィールド参照を定義する場合は、[カテゴリ] ペインで [フィールド] コレクションを選択すると、使用可能なフィールドの一覧を [フィールド] ペインに表示できます。 各フィールドには、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 コレクションのアイテムには 2 つのプロパティがあります。ValueIsMissing です。 IsMissing プロパティは、デザイン時にデータセットに対して定義されているフィールドが、実行時に取得されたフィールドに存在するかどうかを示します。 たとえば、クエリには、入力パラメーターによって結果セットの異なるストアド プロシージャを呼び出すものや、テーブル定義が変更された場合に SELECT * FROM <table> を照会するものがあります。

Note

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

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

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

データセット内のフィールドを表示する列の表示および非表示を制御する式を設定するには、まずカスタム コード関数を定義する必要があります。 この関数は、ブール値を返します。 この値は、フィールドが見つからないかどうかに基づいています。 たとえば、次のカスタム コード関数では、フィールドが存在しない場合に 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) に評価されます。 データ プロバイダーが拡張フィールド プロパティをサポートしていない場合や、クエリ実行時にフィールドが見つからなかった場合、文字列型とオブジェクト型のプロパティの値は null (Visual Basic では Nothing) に、整数型のプロパティの値はゼロ (0) になります。 データ処理拡張機能は、この構文を含むクエリを最適化することにより、定義済みのプロパティを利用する場合があります。

式の例 (Report Builder)
レポート データセット