Reporting Services の式の例
式には、レポートでよく使用されるものがあります。これには、レポート内のデータの表示方法を変更する式、レポート アイテムのプロパティを変更する式、データの取得方法に影響を与える式などがあります。このトピックでは、レポート内で一般的なタスクに使用できる式をいくつか説明します。詳細については、「Reporting Services での式の作成」を参照してください。
関数
レポート内の多くの式には、関数が含まれています。これらの関数を使用して、データの書式を設定し、ロジックを適用し、レポートのメタデータにアクセスできます。Visual Basic ランタイム ライブラリの関数や、System.Convert 名前空間および System.Math 名前空間の関数を使用する式を記述できます。また、他のアセンブリまたはカスタム コードの関数への参照も追加できます。System.Text.RegularExpressions など、Microsoft .NET Framework のクラスを使用することもできます。式でサポートされている Visual Basic 関数の詳細については、msdn.microsoft.com の「Visual Basic ランタイム ライブラリ」を参照してください。
Visual Basic の関数
Microsoft Visual Basic の関数を使用して、テキスト ボックスに表示されるデータや、レポートのパラメータ、プロパティ、または他の領域に使用されるデータを操作できます。ここでは、このような関数のうち、いくつかの例を紹介します。Visual Basic の関数の詳細については、Visual Basic のドキュメントを参照してください。
日付関数
Visual Basic の関数を使用して、レポートに日付情報を表示できます。
次の式には、現在の日付を返す、Today 関数が含まれています。この式は、レポートに日付を表示するテキスト ボックス、または現在の日付に基づいてデータをフィルタ処理するパラメータに使用できます。
=Today()
DateAdd 関数は、1 つのパラメータに基づいて日付の範囲を指定する場合に役立ちます。次の式では、StartDate という名前のパラメータで指定した日付の 6 か月後の日付が返されます。
=DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
次の式には、特定の日付の年を表示する、Year 関数が含まれています。この関数を使用して、日付をグループ化したり、一連の日付のラベルとして年を表示したりできます。次の式では、指定した注文日グループの年が返されます。また、Month 関数および他の関数を使用して、日付を操作することもできます。詳細については、Visual Basic .NET のドキュメントを参照してください。
=Year(Fields!OrderDate.Value)
文字列関数
Visual Basic の関数を使用して、レポートの文字列を操作できます。
連結演算子および Visual Basic 定数を使用し、複数のフィールドを組み合わせることができます。次の式では、2 つのフィールドが同じテキスト ボックスの個別の行に返されます。
=Fields!FirstName.Value & vbCrLf & Fields!LastName.Value
Format 関数を使用して、文字列内の日付と数値の書式を設定できます。次の式では、StartDate および EndDate パラメータの値が長い日付形式で表示されます。
=Format(Parameters!StartDate.Value, "D") & " through " & Format(Parameters!EndDate.Value, "D")
日付または数値のみを格納するテキスト ボックスに書式を適用する場合は、テキスト ボックス内で Format 関数を使用するのではなく、テキスト ボックスの Format プロパティを使用します。
Right、Len、InStr の各関数は、サブストリングを返す場合に役立ちます。たとえば、DOMAIN\username の文字列からユーザー名だけを返します。次の式では、User というパラメータで取得できる文字列のうち、円記号 (\) より右側の部分のみが返されます。
=Right(Parameters!User.Value, Len(Parameters!User.Value) - InStr(Parameters!User.Value, "\"))
次の式は、Visual Basic の関数の代わりに .NET Framework の String クラスのメンバを使用しています。返される値は、上記の値と同じです。
=Parameters!User.Value.Substring(Parameters!User.Value.IndexOf("\")+1, Parameters!User.Value.Length-Parameters!User.Value.IndexOf("\")-1)
複数の値を持つパラメータから、選択した値を表示できます。次の例では、MySelection パラメータの選択した複数の値を Join 関数で単一の文字列に連結し、レポート アイテム内のテキスト ボックスの値に対する式として設定できるようにしています。
= Join(Parameters!MySelection.Value)
日付または数値のみを格納するテキスト ボックスに書式を適用する場合は、テキスト ボックス内で Format 関数を使用するのではなく、テキスト ボックスの Format プロパティを使用します。
.NET Framework の System.Text.RegularExpressions に含まれている一連の Regex 関数は、電話番号の書式を設定するなど、既存の文字列の書式を変更する場合に有用です。次の式では、フィールドに含まれる、"nnn-nnn-nnnn" 形式の 10 桁の電話番号を、Replace 関数を使用して "(nnn) nnn-nnnn" という形式に変更しています。
=System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value, "(\d{3})[ -.]*(\d{3})[ -.]*(\d{4})", "($1) $2-$3")
変換関数
Visual Basic の関数を使用して、特定のデータ型をレポートに必要なデータ型に変換できます。
Visual Basic の関数を使用して、必要に応じてデータ型を変換できます。変換関数は、レポート内の "#Error" メッセージを除去したり、形式を整えたりするために、よく使用されます。次の式は、複数の値を持つパラメータ MySelection で選択された値の数を表示します。
=CStr(Parameters!MySelection.Count)
決定関数
Visual Basic の関数を使用して、入力値を評価し、その結果に応じて別の値を返すことができます。
Iif 関数では、評価された式が True かどうかによって、2 つの値のいずれかが返されます。次の式では、Iif 関数を使用して、LineTotal の値が 100 を超える場合にブール値 True が返されます。それ以外の場合は False が返されます。
=Iif(Fields!LineTotal.Value > 100, True, False)
次の式では、複数の Iif 関数 ("入れ子になった Iif" とも呼ばれます) を使用して、PctComplete の値に応じて 3 つの値のいずれかが返されます。
=Iif(Fields!PctComplete.Value >= .8, "Green", Iif(Fields!PctComplete.Value >= .5, "Amber", "Red"))
また、次の式でも PctComplete の値に基づいて 3 つの値のいずれかが返されますが、代わりに Switch 関数が使用されています。この関数では、一連の式のうち、結果が True になる最初の式に関連付けられた値が返されます。
=Switch(Fields!PctComplete.Value >= .8, "Green", Fields!PctComplete.Value >= .5, "Amber", Fields!PctComplete.Value < .5, "Red")
次の式では、ImportantDate フィールドの値をテストし、経過日数が 1 週間を超えている場合は "Red" を、それ以外の場合は "Blue" を返します。この式を使用して、レポート アイテムに含まれるテキスト ボックスの Color プロパティを制御できます。
=IIF(DateDiff("d",Fields!ImportantDate.Value, Now())>7,"Red","Blue")
次の式では、フィールド PhoneNumber の値が null (Visual Basic では Nothing) かどうかを調べ、NULL 値の代わりに "No Value" を返しています。この式を使用して、レポート アイテムに含まれるテキスト ボックスの値を制御できます。
=IIF(Fields!PhoneNumber.Value Is Nothing,"No Value",Fields!PhoneNumber.Value)
次の式では、Department フィールドの値がテストされ、サブレポート名または null (Visual Basic では Nothing) が返されます。この式は、条件付きドリルスルー サブレポートで使用できます。
=Iif(Fields!Department.Value = "Development", "EmployeeReport", Nothing)
次の式では、フィールド値が NULL であるかテストされます。この式は、画像レポート アイテムの Hidden プロパティを制御するために使用できます。
=Iif(IsNothing(Fields!LargePhoto.Value),True,False)
レポートの関数
Reporting Services にはこの他にも、レポート内のデータの操作に使用できるレポート関数があります。ここでは、このような関数のうち 2 つの例を紹介します。レポートの関数の詳細については、「式でのレポート関数の使用 (Reporting Services)」を参照してください。
Sum 関数を使用すると、グループまたはデータ領域の値を合計できます。この関数は、テーブル グループのヘッダーまたはフッターで役立ちます。次の式では、Order グループまたは Order データ領域のデータの合計が表示されます。
=Sum(Fields!LineTotal.Value, "Order")
RowNumber 関数を含む式を、データ領域内のテキスト ボックスで使用すると、式が出現するテキスト ボックスの各インスタンスの行数が表示されます。この関数は、テーブル内の行数を数える場合に役立ちます。また、行数に基づいた改ページの指定など、より複雑なタスクにも役立ちます。詳細については、このトピックの「改ページ」を参照してください。
次の式では、最も外側のデータ領域内の最初の行から最後の行までの行数が表示されます。この関数に Nothing キーワードを指定することで、最も外側のデータ領域内の最初の行からカウントが開始されます。子データ領域内でカウントを開始するには、データ領域の名前を使用します。=RowNumber(Nothing)
レポート データの表示方法
式を使用して、レポートにデータを表示する方法を操作できます。たとえば、2 つのフィールドの値を 1 つのテキスト ボックスに表示したり、レポートに関する情報を表示したり、レポートに改ページを挿入する方法に影響を与えたりすることができます。
ページ ヘッダーとページ フッター
レポートをデザインする場合、必要に応じてレポート名とページ番号をレポート フッターに表示できます。この操作を行うには、以下の式を使用できます。
次の式では、レポート名、およびレポートが実行された時刻が返されます。この式は、レポート フッターまたはレポート本文のテキスト ボックスで使用できます。時間の書式は、.NET Framework の短い日付用の書式設定の文字列を使用して設定されます。
=Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")
次の式では、レポートのページ番号および全ページ数が返されます。この式は、レポートのフッター内のテキスト ボックスで使用できます。
=Globals.PageNumber & " of " & Globals.TotalPages
また、レポート ヘッダーまたはレポート フッターで式を使用することにより、レポート本文に含まれるレポート アイテムを参照できます。以下の例では、ディレクトリの一覧の内容と同様に、ページ ヘッダーにページの最初と最後の値を表示する方法について説明します。この例では、LastName という名前のテキスト ボックスを含むデータ領域を想定しています。
次の式は、ページ ヘッダーの左側にあるテキスト ボックスで使用されます。この式では、そのページの LastName テキスト ボックスの最初の値が返されます。
=First(ReportItems("LastName").Value)
次の式は、ページ ヘッダーの右側にあるテキスト ボックスで使用されます。この式では、そのページの LastName テキスト ボックスの最後の値が返されます。
=Last(ReportItems("LastName").Value)
ページ ヘッダーまたはページ フッターのレポート アイテムの参照に対して集計を適用できます (ただし、レポート本文内のレポート アイテムの参照には集計を適用できません)。次の例では、合計ページ数の表示方法について説明します。この例では、Cost という名前のテキスト ボックスを含むデータ領域を想定しています。
次の式は、ページ ヘッダーまたはページ フッターで使用されます。この式では、Cost テキスト ボックスの値の合計がそのページに返されます。
=Sum(ReportItems("Cost").Value)
メモ : ページ ヘッダーまたはページ フッターでは、1 つの式につき 1 つのレポート アイテムしか参照できません。
改ページ
レポートによっては、グループやレポート アイテムに改ページを設定せずに、またはグループやレポート アイテムの改ページに追加する形で、指定した行数の最後に改ページを挿入したい場合があります。この操作を行うには、データ領域にグループ (通常は詳細のすぐ外側のグループ) を作成して、そのグループに改ページを追加し、その後、指定された行数でグループ化を行うグループ式を追加します。
次の式をグループ式で使用すると、25 行ごとに数値が割り当てられます。グループに改ページが定義されている場合は、この式の結果として、25 行ごとに改ページが行われます。
=Int((RowNumber(Nothing)-1)/25)
プロパティ
式は、テキスト ボックスにデータを表示するためだけに使用するものではありません。レポート アイテムにプロパティを適用する方法を変更する場合にも使用できます。レポート アイテムのスタイル情報を変更したり、情報の表示を変更することができます。
書式設定
式を使用して、レポート内のレポート アイテムの表示方法を変更できます。
テキスト ボックスの Color プロパティで次の式を使用すると、Profit フィールドの値に応じてテキストの色が変更されます。
=Iif(Fields!Profit.Value < 0, "Red", "Black")
データ領域にあるレポート アイテムの BackgroundColor プロパティで次の式を使用すると、各行の背景色に薄青色と白が交互に設定されます。
=Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")
範囲を指定して式を適用する場合は、集計関数に対するデータセットを指定する必要があります。
=Iif(RowNumber("Employees") Mod 2, "PaleGreen", "White")
表示
レポート アイテムの表示プロパティを使用して、レポート内のアイテムの表示/非表示を切り替えることができます。テーブルなどのデータ領域では、最初に、式の値に基づいて詳細行を非表示にできます。
グループ内の詳細行の表示の初期設定に次の式を使用すると、PctQuota フィールドで 90% を超えるすべての売上の詳細行が表示されます。
=Iif(Fields!PctQuota.Value>.9, False, True)
テーブルの [表示]/[非表示] プロパティに対して次の式を設定すると、12 行を超えた場合にのみテーブルを表示することができます。
=IIF(CountRows()>12,true,false)
レポート データ
式を使用して、レポートで使用するデータを操作できます。パラメータおよび他のレポート情報を参照できます。レポートのデータを取得するために使用されるクエリを変更することもできます。
パラメータ
パラメータの式を使用して、パラメータの既定値を変更できます。たとえば、パラメータを使用して、レポートの実行に使用されるユーザー ID に基づき、特定のユーザーに合わせてデータをフィルタ処理することができます。
パラメータの既定値として次の式を使用すると、レポートを実行するユーザーのユーザー ID が収集されます。
=User!UserID
次の式を使用して、レポートのクエリ パラメータ、フィルタ式、テキスト ボックス、または他の領域にあるパラメータを参照できます。この例では、パラメータの名前が User であることを前提としています。
=Parameters!User.Value
カスタム コード
レポート内では、カスタム コードを使用できます。カスタム コードは、レポート内に埋め込むか、レポートで使用されるカスタム アセンブリに格納します。カスタム コードの詳細については、「式でのカスタム コード参照の使用 (Reporting Services)」を参照してください。
次の例では、埋め込まれたコードの ToUSD メソッドが呼び出され、StandardCost フィールド値が米ドル単位に変換されます。
=Code.ToUSD(Fields!StandardCost.Value)
次の例は、カスタムの定数および変数を定義する方法を示しています。
[Visual Basic]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 型として扱われます。
[Visual Basic]=Code.MyNote =Code.NCopies =Code.MyVersion =Code.MyDoubleVersion
次の例では、埋め込まれたコードの FixSpelling メソッドが呼び出され、SubCategory.Value 内の
Bike
というテキストがBicycle
にすべて置き換えられます。=Code.FixSpelling(Fields!SubCategory.Value)
レポート定義に埋め込んで使用する次のコードは、FixSpelling メソッドの実装を示しています。このカスタム コードが最初に実行されると、置き換えられたテキストが MessageBox に表示されます。この例は、.NET Framework の StringBuilder クラスと System.Windows.Forms.MessageBox クラスを参照する方法を示しています。System.Windows.Forms にレポート プロパティへの参照を追加する必要があります。詳細については、「レポートにコードを追加する方法 (レポート デザイナ)」および「レポートにアセンブリへの参照を追加する方法 (レポート デザイナ)」を参照してください。
[Visual Basic]Dim firstTime As Boolean = True 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") If firstTime Then System.Windows.Forms.MessageBox.Show(strBuilder.ToString()) ' or MsgBox(strBuilder.ToString()) firstTime = False End If Return strBuilder.ToString() Else : Return s End If End Function
参照
概念
式でのレポート関数の使用 (Reporting Services)
ヘルプおよび情報
変更履歴
リリース | 履歴 |
---|---|
2006 年 4 月 14 日 |
|
2005 年 12 月 5 日 |
|