式でのグローバル コレクションの使用 (Reporting Services)

更新 : 2006 年 4 月 14 日

Reporting Services では、式から参照できるグローバル コレクションとして、DataSourcesDataSetsFieldsGlobalsParametersReportItems、および User を提供しています。式からコレクションを参照するには、コレクション内のアイテムに対して、標準の Visual Basic 構文を使用できます。次の一覧はこの構文の例です。

  • Collection!ObjectName.Property または Collection!ObjectName("Property")
    =Fields!Sales.Value
    =Fields!Sales("Value")
  • Collection("ObjectName").Property
    =Fields("Sales").Value
  • Collection("Member")
    =User("Language")
  • Collection.Member
    =User.Language

グローバル コレクションの概要

次の表では、各グローバル コレクションと、式からコレクションが参照可能になる条件を説明します。各グローバル コレクションについては、これ以降の別のトピックで説明します。

グローバル コレクション 説明

Fields

=Fields!Sales.Value

レポートで使用可能なデータセットのフィールドのコレクションを表します。データをデータ ソースからデータセットに取得した後で使用可能です。

ReportItems

=ReportItems("Textbox1").Value

テーブル データ領域、ページ ヘッダー、またはページ フッター内のテキスト ボックスなど、レポート アイテム用のテキスト ボックスのコレクションを表します。レポート処理時に使用可能です。

Globals

=Globals.ReportName

レポート名またはページ番号など、レポートで役立つグローバル変数を表します。常に使用可能です。

Parameters

=Parameters("ReportMonth").Value

または

=Parameters!ReportYear.Value

レポート パラメータのコレクションを表します。各パラメータは単一値または複数値にできます。初期化処理が完了するまで使用できません。クエリ パラメータを作成すると、自動的にレポート パラメータ コレクションに追加されます。

User

=User.UserID

または

User.Language

言語設定やユーザー ID など、レポートを実行しているユーザーに関するデータのコレクションを表します。常に使用可能です。User!UserID は、レポートで結果をフィルタする場合に頻繁に使用されます。

DataSources

=DataSources("AdventureWorks").Type

レポートの本文内から参照されるデータ ソースのコレクションを表します。ページ ヘッダーまたはページ フッターでのみ使用されるデータ ソースは含まれません。ローカル プレビューでは使用できません。

DataSets

=DataSets("TopEmployees").CommandText

レポート定義の本文から参照されるデータセットのコレクションを表します。ページ ヘッダーまたはページ フッターでのみ使用されるデータ ソースは含まれません。ローカル プレビューでは使用できません。

Globals コレクションおよび Users コレクションのメンバからは、Variant 値が返されます。特定のデータ型を必要とするグローバル変数を式に使用する場合は、最初に変数をキャストする必要があります。たとえば、バリアント型の実行時間を Date 形式に変換するには、CDate(Globals!ExecutionTime) を使用します。その他の例については、「Reporting Services の式の例」を参照してください。

Fields

レポート内の各データセットには、単一の Fields コレクションが格納されます。これは、[データセット] ウィンドウでデータセット ノードを展開したときに表示されるフィールドのコレクションです。Fields コレクションは、一般にレポートのテキスト ボックスにデータを表示するために使用されますが、他のレポート アイテム、プロパティ、および関数でも使用できます。各フィールド名はコレクション内で一意でなければなりませんが、同じフィールド名が複数のコレクションに存在していてもかまいません。

一部のデータ処理拡張機能では、データセットに定義されているクエリから、フィールド コレクションが自動的に取得されます。ツール バーの [フィールドの更新] ボタンをクリックすると、変更内容がレポート定義に保存され、[データセット] ウィンドウに変更が反映されます。フィールド定義を編集するには、レポート デザイナの [データ] ビューでデータセットを選択し、[データセット] ダイアログ ボックスを開いて、[フィールド] タブをクリックします。集計フィールドを追加するには、[データセット] ウィンドウで目的のデータセットを右クリックして [新しいフィールドの追加] ダイアログ ボックスを開き、名前を入力します。次に、[集計フィールド] をクリックして式を入力します。

レポートの処理中、各レポート アイテムの処理が次々と行われる際に、現在のレポート アイテムに関連付けられている Fields コレクションが、基になるソース データとバインドされます。特定のフィールドに対して返されるデータは、単一の値の場合もあれば、レポート処理の進行に伴いデータセット内の行ごとに値が返される場合もあります。単一の値が返されるか、複数の値が返されるかは、そのフィールド参照を含んでいるレポート アイテムの種類によって決まります。フィールド参照がデータ領域 (テーブル、マトリックス、一覧、グラフなど) に含まれている場合は、データセットの行ごとに値が返されます。フィールド参照がデータ領域に含まれていない場合は、単一の値が返されます。

集計レポート関数を使用してデータセット内のフィールド コレクションを処理する場合、scope パラメータを追加して、データセットを指定する必要があります。レポート アイテムとデータセットの関連付けを確認するには、レポート アイテムを選択して、そのプロパティを表示します。レポート関数および scope パラメータの詳細については、「式でのレポート関数の使用 (Reporting Services)」を参照してください。

既定では、Fields コレクションのアイテムには、Value および IsMissing という 2 つのプロパティがあります。レポート レイアウトで、[データセット] ウィンドウからレポート アイテムにフィールドをドラッグすると、既定により、レポート アイテムの内容が、フィールドの Value プロパティに設定されます。データ領域の場合、データセット内の各行に対応する値が =Fields!FieldName.Value に設定されます。データ領域以外のレポート アイテムの内容は、単一の値 (=First(Fields!FieldName.Value) など) に設定されます。

IsMissing プロパティは、データセットに定義されているフィールドが、データ ソースから取得されたフィールドに存在するかどうかを示します。フィールドの存在は、Visual Basic を使用してフィールド式でテストできます。存在しないフィールドの Value プロパティは NULL (Visual Basic では Nothing) です。次のコード例は、フィールド データの表示先となるレポート アイテムのテキスト ボックスに配置して、フィールドの存在をテストする方法を示しています。

=IIF(Fields!FieldName.IsMissing, "Field was not returned by query", Fields!FieldName.Value))

Visual Basic の IIF 関数では、結果を返す前にステートメントのすべての要素が評価されるので、存在しないフィールドへの参照があると処理エラーが発生します。存在しないフィールドを参照しても処理エラーが生じないようにするには、次のように Visual Basic の関数を呼び出します。

=IIF(Sum(Fields!FieldName.Value) IS NOTHING, 0, Sum(Fields!FieldName.Value))

式エディタを使用して、フィールドを参照する式を作成する場合、最初のペインで Fields コレクションを選択し、最後のペインで利用可能なフィールドを一覧表示できます。次の図は、Employees というデータセットの FirstName フィールドを示しています。

[式の編集] ダイアログ ボックスの Intellisense 機能

IntelliSense ウィンドウに、使用可能なプロパティが一覧表示されます。この一覧に含まれている Value および IsMissing は、既定のプロパティです。それ以外のプロパティは、他のデータ処理拡張機能でサポートされている、定義済みの拡張フィールド プロパティです。

拡張フィールド プロパティ

拡張フィールド プロパティは、データ処理拡張機能によってフィールドに追加で定義されるプロパティです。拡張フィールド プロパティのいくつかは、あらかじめ定義されています。あらかじめ定義されているのは、使用頻度の高いフィールド プロパティです。典型的な例としては、Key フィールドおよび UniqueName フィールドがあります。これらの定義済みプロパティは IntelliSense ウィンドウの一覧に表示され、Fields!FieldName.Property のコレクション構文を使って参照できます。データ処理拡張機能は、定義済みのプロパティを利用することによって、この構文を含んでいるクエリを最適化できる場合があります。

特定のデータ処理拡張機能によってサポートされている、他の拡張フィールド プロパティを参照することもできます。これらのプロパティは、[式] ウィンドウには表示されませんが、登録されているデータ処理拡張機能と、それに関連付けられたクエリ デザイナを使ってデータ ソース内で調べることができます。拡張フィールド プロパティはすべて、Fields!FieldName("Property") のコレクション構文を使って参照できます。

データ プロバイダが拡張フィールド プロパティをサポートしていない場合や、クエリ実行時にフィールドが見つからなかった場合、String 型と Object 型のプロパティの値は null (Visual Basic では Nothing) に、Integer 型のプロパティの値はゼロ (0) になります。

データ拡張機能がカスタム フィールド プロパティを提供している場合、フィールドがそのプロパティをサポートしているかどうかにかかわらず、プロパティはデータセット内のすべてのフィールドについての [式エディタ] ボックスの一覧で参照できます。そのフィールドでサポートされていないプロパティへの参照を追加した場合、参照は null (Visual Basic では Nothing) と評価します。拡張フィールド プロパティをサポートするプロバイダの例については、「レポート データセットの定義 (Analysis Services の多次元データおよびデータ マイニング予測データ)」および「レポート データセットの定義 (SAP NetWeaver BI システムの多次元データ)」を参照してください。

Globals

Globals コレクションには、レポートのグローバル変数が保持されます。次の表では、Globals コレクションのメンバについて説明します。

メンバ 説明

ExecutionTime

DateTime

レポートの実行を開始した日付と時刻です。

PageNumber

Integer

現在のページ番号です。ページ ヘッダーおよびページ フッターでのみ使用できます。

ReportFolder

String

レポートを含んでいるフォルダへの完全なパスです。これには、レポート サーバーの URL は含まれません。

ReportName

String

レポート サーバー データベースに格納されているとおりのレポートの名前です。

ReportServerUrl

String

レポートが実行されるレポート サーバーの URL です。

TotalPages

Integer

レポート内のページ数の合計です。ページ ヘッダーおよびページ フッターでのみ使用できます。

グローバル変数の例を以下に示します。

  • レポートのフッター内のテキスト ボックスで次の式を使用すると、ページ番号およびレポートの総ページ数が返されます。
    =Globals.PageNumber & " of " & Globals.TotalPages
  • 次の式は、レポート名およびレポートが実行された時間を返します。時間の書式は、Microsoft .NET Framework の短い日付用の書式設定の文字列を使用して設定されます。
    =Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")

Parameters

Parameters コレクションには、レポート内のレポート パラメータ オブジェクトが保持されます。Parameters は、クエリに渡したり、フィルタで使用したり、パラメータに基づいてレポートの外観および内容を変更する他の関数で使用したりできます。クエリ パラメータを定義すると、自動的にレポート パラメータ コレクションに追加されます。次の表では、Parameter (CountIsMultiValueValue、および Label) に定義されたプロパティを説明します。

プロパティ 説明

Count

コレクション内のパラメータの数を示す整数。

IsMultiValue

パラメータが値セットを持っているかどうかを示すブール値。

Value

パラメータの値。複数値パラメータの場合、Value はオブジェクトの配列を返します。

Label

パラメータのわかりやすいラベル。ラベルが指定されていない場合、Label プロパティの値は Value プロパティと同じになります。同じ Value に複数の Label が関連付けられている場合は、最初に一致した Label が使用されます。複数値パラメータの場合、Label はオブジェクトの配列を返します。

Parameters は、プロパティ構文かコレクション構文のいずれかを利用してアクセスできます。次の式は、Parameters コレクションのすべてのメンバにアクセスし、レポート アイテムのテキスト ボックス内に配置された場合、パラメータ ProductSubCategory の内容を表示します。

="IsMultiValue: " & Parameters!ProductSubCategory.IsMultiValue.ToString() 
& " Count:" & Parameters!ProductSubCategory.Count & " Values: " 
& Join(Parameters!ProductSubCategory.Value,", ") & " Labels: " 
& Join(Parameters!ProductSubCategory.Label,", ")

詳細については、「Reporting Services でのパラメータを使用した作業」を参照してください。

ReportItems

ReportItems コレクションには、レポート内のテキスト ボックスが保持されます。ReportItems コレクションのアイテムに設定されるプロパティは、Value だけです。ReportItems アイテムの値は、レポート内の別のフィールドのデータを表示または計算するために使用されます。現在のテキスト ボックスの値にアクセスするには、Visual Basic に組み込まれたグローバルの Me.Value または単に Value を使用することができます。ただし、First などのレポート関数および集計関数では、完全修飾された構文を使用してください。

次に例を示します。

  • テキスト ボックスで次の式を使用すると、Textbox1 という名前の ReportItem テキスト ボックスの値が表示されます。
    =ReportItems("Textbox1").Value
  • ReportItem テキスト ボックスの Color プロパティで次の式を使用すると、値が 0 より大きい場合は黒で、それ以外の場合は赤でテキストが表示されます。
    =iif(Me.Value > 0,"Black","Red")
  • ページ ヘッダーまたはページ フッターのテキスト ボックスで次の式を使用すると、表示レポートのページごとに、LastName という名前のテキスト ボックスの最初の値が表示されます。
    =First(ReportItems("LastName").Value)

User

User コレクションには、レポートを実行しているユーザーのデータが保持されます。このコレクションを使用して、レポートに表示されるデータを、現在のユーザーのデータのみを表示するなどフィルタ選択したり、レポート タイトルなどに UserID を表示したりすることができます。テキスト ボックスで次の式を使用すると、さまざまなユーザー データに静的なテキストが追加されます。

=Globals!ReportName & " for " & User!UserID

次の表では、User コレクションのメンバについて説明します。

メンバ 説明

Language

String

レポートを実行しているユーザーの言語です。たとえば、en-US のようになります。

UserID

String

レポートを実行しているユーザーの ID です。Windows 認証を使用している場合、この値は現在のユーザーのドメイン アカウントです。値は、Windows 認証またはカスタム認証を使用できる Reporting Services セキュリティ拡張機能によって決まります。

場合によっては、User!UserID 変数を含むレポートは、レポートを参照している現在のユーザー固有のレポート データを表示することができません。この障害が発生する場合、次の条件に必ず該当します。

  • レポートが、レポート実行スナップショットまたはレポート履歴スナップショットである。
  • レポートが、プログラムから SOAP メソッドまたはレポート URL アドレスを通してアクセスされている。

この障害が発生する場合、レポート スナップショットのユーザー プロファイル情報は次のいずれかを基にしています。

  • レポート スナップショットを作成したユーザーの ID
  • スケジュールされた操作としてレポート サーバーによって作成されたスナップショットの場合、レポート サーバーを実行するアカウント
ms157274.note(ja-jp,SQL.90).gif重要 :
ユーザー プロファイル情報を基にしたレポート スナップショットの更新に失敗すると不正確なデータの原因になり、機密性の高いデータがスナップショットに含まれる場合はセキュリティ上の危険を伴います。

ユーザー プロファイルの障害は、SOAP 呼び出しまたはレポート スナップショットの URL アドレスを使用して開かれたレポート スナップショットに対してのみ発生します。User!UserID は、要求時に実行されるレポート、およびレポート マネージャから開かれたすべてのレポート スナップショットに対して完全に機能します。レポート スナップショットを Web サービスのメソッドおよび URL アクセスから呼び出す方法の詳細については、「URL を使用したレポート サーバー アイテムへのアクセス」および「実行状態の識別」を参照してください。

DataSources

DataSources コレクションは、パブリッシュ済みレポート定義で参照されるデータ ソースを表します。プレビュー モードのプロパティに対して、パブリッシュ済みレポートを配置し参照する場合とは異なる値を取得できます。

次の表では、DataSources コレクション内の変数について説明します。

変数 説明

DataSourceReference

String

レポート サーバー上のデータ ソースの完全パス。たとえば、/DataSources/AdventureWorks. のようになります。

Type

String

データ ソースのデータ プロバイダの種類。たとえば、SQL のようになります。

DataSets

DataSets コレクションは、レポート定義で参照されるデータセットを表します。このグローバル コレクションがレポートで直接使用されることはめったにありませんが、レポート デザイナでは各データセットのデータ ソースからデータを取得するために使用するクエリ コマンドのアクセスに使用可能です。

次の表では、DataSets コレクションのメンバについて説明します。

メンバ 説明

CommandText

String

データベース データ ソースの場合、これはデータ ソースからデータを取得するために使用するクエリです。クエリが式の場合は、評価済みの式になります。

RewrittenCommandText

String

データ プロバイダの展開された CommandText 値。これは通常、レポート パラメータにマップされたクエリ パラメータと共にレポートに使用されます。コマンド テキスト パラメータ参照を、マップされたレポート パラメータに対して選択された定数値に展開する場合、データ プロバイダがこのプロパティを設定します。

参照

処理手順

式を追加する方法 (レポート デザイナ)

概念

レポートのレイアウトおよび表示について
レポート デザインの基礎

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 4 月 14 日

変更した内容 :
  • Fields に関する内容を拡充しました。

2005 年 12 月 5 日

新しい内容 :
  • Datasets コレクションおよび DataSources コレクションを追加しました。
変更した内容 :
  • グローバル構文の例を修正しました。