式におけるデータセット フィールド コレクションの参照の使用 (Reporting Services)
レポート内の各データセットには、単一の Fields コレクションが格納されます。Fields コレクションは、データセット クエリによって指定されるフィールドのセットに、ユーザーが作成する追加の計算フィールドを加えたものです。データセットを作成すると、フィールド コレクションがレポート データ ペインに表示されます。
式内の単純なフィールド参照は、デザイン画面に単純な式として表示されます。たとえば、フィールド Sales をレポート データ ペインからデザイン画面のテーブル セルにドラッグすると、Reporting Services によって [Sales] が表示されます。この式は、テキスト ボックスの Value プロパティに対して設定されている基本となる式 =Fields!Sales.Value を表しています。レポートが実行されると、レポート プロセッサによってこの式が評価され、テーブル セルのテキスト ボックスにデータ ソースの実際のデータが表示されます。詳細については、「単純式と複合式について (Reporting Services)」および「レポート データセット内のフィールドの操作」を参照してください。
データセットのフィールド コレクションの表示
フィールド コレクションの個々の値を表示するには、各フィールドをテーブル詳細行にドラッグして、レポートを実行します。フィールド参照がテーブル データ領域または一覧データ領域の詳細行に含まれている場合は、データセットの行ごとの値が表示されます。
フィールドの集約値を表示するには、各数値フィールドをマトリックスのデータ領域にドラッグします。行の総数を計算する既定の集計関数は、=Sum(Fields!Sales.Value) などの Sum 関数です。既定の関数を変更して、別の合計を計算することもできます。詳細については、「式での組み込みのレポート関数と集計関数の使用 (Reporting Services)」を参照してください。
テキスト ボックス内のフィールド コレクションに関する集約値を (データ領域の一部ではなく) デザイン画面に直接表示するには、集計関数のスコープとしてデータセット名を指定する必要があります。たとえば、SalesData という名前のデータセットの場合は、=Sum(Fields!Sales,"SalesData") という式によってフィールド Sales のすべての値の合計が指定されます。
[式] ダイアログ ボックスを使用して単純なフィールド参照を定義する場合は、カテゴリ ペインで Fields コレクションを選択して、使用可能なフィールドの一覧をフィールド ペインに表示できます。各フィールドには、Value や IsMissing などのいくつかのプロパティがあります。残りのプロパティは、データ ソースの種類によってはデータセットで使用できる場合がある、定義済みの拡張フィールド プロパティです。
値が 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")
テキスト ボックスには、フィールド値または指定した文字列が表示されます。
拡張フィールド プロパティの使用
拡張フィールド プロパティは、データ処理拡張機能によってフィールドに定義された追加プロパティであり、データセットのデータ ソースの種類に基づいて決定されます。拡張フィールド プロパティには、定義済みのものと、データ ソースの種類に固有のものがあります。
定義済みのプロパティは、Key や UniqueName など、一般的に使用されるフィールド プロパティです。Reporting Services では、データ ソースに対して使用可能なプロパティがこれらの定義済みフィールドにマップされます。定義済みプロパティは、[式] ダイアログ ボックスの [IntelliSense] ボックスに表示されます。フィールド コレクション構文を使用してフィールドの名前を入力すると、使用可能なプロパティのドロップダウン リストが表示されます。定義済みプロパティには、=Fields!Sales.Value などの単純なフィールド参照構文を使用します。
データ ソースの種類に固有のプロパティは、[式] ダイアログ ボックスに表示されませんが、関連付けられたクエリ デザイナを使用してデータ ソースを探索することによって特定できます。拡張フィールド プロパティはすべて、=Fields!FieldName("Property") のコレクション構文を使用して参照できます。拡張フィールド プロパティの例については、「Analysis Services データセットに対する拡張フィールド プロパティの使用」を参照してください。拡張フィールド プロパティをサポートするプロバイダについては、「SQL Server Analysis Services からのレポート データセットの作成」、「SAP NetWeaver BI データ ソースからのレポート データセットの作成」、および「Hyperion Essbase データ ソースからのレポート データセットの作成」を参照してください。
そのフィールドでサポートされていないプロパティを指定した場合、式は null (Visual Basic では Nothing) に評価されます。データ プロバイダが拡張フィールド プロパティをサポートしていない場合や、クエリ実行時にフィールドが見つからなかった場合、String 型と Object 型のプロパティの値は null (Visual Basic では Nothing) に、Integer 型のプロパティの値はゼロ (0) になります。データ処理拡張機能は、定義済みのプロパティを利用することによって、この構文を含んでいるクエリを最適化する場合があります。