次の方法で共有


式の例 (レポート ビルダーおよび SSRS)

式は、内容とレポートの見た目を制御するために、レポートで頻繁に使用されます。 式は Microsoft Visual Basic で記述され、組み込み関数のカスタム コード、レポート変数とグループ変数、およびユーザー定義変数を使用できます。 式は等号 (=) で始まります。 式エディターと含めることができる参照の種類の詳細については、「 レポートでの式の使用 (レポート ビルダーおよび SSRS)」および「 式の追加 (レポート ビルダーおよび SSRS)」を参照してください

重要

RDL サンドボックスが有効になっている場合、レポート発行時に式テキストで使用できるのは特定の型とメンバーだけです。 詳細については、「 RDL サンドボックスの有効化と無効化」を参照してください。

このトピックでは、レポート内の一般的なタスクに使用できる式の例を示します。

特定の用途の式の例については、次のトピックを参照してください。

式を使用できる単純式と複合式、および式に含めることができる参照の種類の詳細については、「 式 (レポート ビルダーおよび SSRS)」のトピックを参照してください。 集計を計算するために式が評価されるコンテキストの詳細については、「合計、集計、および組み込みコレクションの式スコープ (レポート ビルダーおよび SSRS)」を参照してください。

このトピックの式の例でも使用される多くの関数と演算子を使用する式を記述する方法については、「 チュートリアル: 式の概要」を参照してください。

式エディターには、組み込み関数の階層ビューが含まれています。 関数を選択すると、[値] ペインにコード例が表示されます。 詳細については、[式] ダイアログ ボックス または [式] ダイアログ ボックス (レポート ビルダー) を参照してください。

機能

レポート内の多くの式には、関数が含まれています。 これらの関数を使用して、データの書式設定、ロジックの適用、レポート メタデータへのアクセスを行うことができます。 関数を使用する式は、Microsoft Visual Basic ランタイム ライブラリ、および Convert 名前空間と Math 名前空間から記述できます。 また、他のアセンブリまたはカスタム コードの関数への参照も追加できます。 また、System.Text.RegularExpressions などの Microsoft .NET Framework のクラスを使うこともできます。

Visual Basic 関数

Visual Basic 関数を使用すると、テキスト ボックスに表示されるデータ、またはレポートのパラメーター、プロパティ、またはその他の領域に使用されるデータを操作できます。 ここでは、このような関数のうち、いくつかの例を紹介します。 各関数の詳細については、MSDN の「 Visual Basic ランタイム ライブラリのメンバー 」を参照してください。

.NET Framework では、特定の日付形式など、さまざまなカスタム書式オプションが提供されています。 詳細については、MSDN の 「型の書式設定」を 参照してください。

数学関数

  • Round関数は、数値を最も近い整数に丸めるのに役立ちます。 次の式は、1.3 から 1 に丸めます。
= Round(1.3)  

Excel の MRound 関数と同様に、指定した倍数に値を丸める式を記述することもできます。 値を整数を作成する係数で乗算し、数値を丸め、その後、同じ係数で除算します。 たとえば、1.3 を .2 (1.4) の最も近い倍数に丸める場合は、次の式を使用します。

= Round(1.3*5)/5  

Date 関数

  • Today関数は、現在の日付を提供します。 この式は、レポートの日付を表示するテキスト ボックスや、現在の日付に基づいてデータをフィルター処理するパラメーターで使用できます。
=Today()  
  • DateAdd関数は、1 つのパラメーターに基づいて日付の範囲を指定する場合に便利です。 次の式は、 StartDate という名前のパラメーターの日付から 6 か月後の日付を提供します。
=DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)  
  • Year関数には、特定の日付の年が表示されます。 これを使用すると、日付をまとめてグループ化したり、日付のセットのラベルとして年を表示したりできます。 次の式では、指定した販売注文日グループの年が返されます。 Month関数やその他の関数を使用して、日付を操作することもできます。 詳細については、Visual Basic のドキュメントを参照してください。
=Year(Fields!OrderDate.Value)  
  • 式の中で関数を組み合わせることで、形式をカスタマイズすることができます。 次の式は、"月-日-年" の日付の形式を "月-週番号" に変更します。 たとえば、2009 年 12 月 23 日から 12 月 3 日の週:
=Format(Fields!MyDate.Value, "MMMM") & " Week " &   
(Int(DateDiff("d", DateSerial(Year(Fields!MyDate.Value),   
Month(Fields!MyDate.Value),1), Fields!FullDateAlternateKey.Value)/7)+1).ToString  

この式をデータセット内の計算フィールドとしてグラフで使用すると、各月の週ごとに値を集計できます。

  • 次の式は、SellStartDate 値を MMM-YY として書式設定します。 SellStartDate フィールドは datetime データ型です。
=FORMAT(Fields!SellStartDate.Value, "MMM-yy")  
  • 次の式は、SellStartDate 値を dd/MM/yyyy として書式設定します。 SellStartDate フィールドは datetime データ型です。
=FORMAT(Fields!SellStartDate.Value, "dd/MM/yyyy")  
  • CDate関数は、値を日付に変換します。 Now関数は、システムに従って現在の日付と時刻を含む日付値を返します。 DateDiff は、2 つの Date 値間の時間間隔の数を指定する Long 値を返します。

次の使用例は、現在の年の開始日を表示します。

=DateAdd(DateInterval.Year,DateDiff(DateInterval.Year,CDate("01/01/1900"),Now()),CDate("01/01/1900"))  
  • 次の使用例は、現在の月に基づいて前月の開始日を表示します。
=DateAdd(DateInterval.Month,DateDiff(DateInterval.Month,CDate("01/01/1900"),Now())-1,CDate("01/01/1900"))  
  • 次の式は、SellStartDate と LastReceiptDate の間にある年数を生成します。 これらのフィールドは、DataSet1 と DataSet2 の異なる 2 つのデータセットに含まれます。 集計関数である First 関数 (レポート ビルダーおよび SSRS) は、DataSet1 にある SellStartDate の最初の値と、DataSet2 にある LastReceiptDate の最初の値を返します。
=DATEDIFF("yyyy", First(Fields!SellStartDate.Value, "DataSet1"), First(Fields!LastReceiptDate.Value, "DataSet2"))  
  • DatePart関数は、指定された Date 値の指定されたコンポーネントを含む整数値を返します。次の式は、DataSet1 の SellStartDate の最初の値の年を返します。 データセット スコープは、レポートに複数のデータセットがあるために指定されます。
=Datepart("yyyy", First(Fields!SellStartDate.Value, "DataSet1"))  

  • DateSerial関数は、指定した年、月、日を表す Date 値を返し、時刻情報を午前 0 時に設定します。 次の使用例は、現在の月に基づいて、前の月の終了日を表示します。
=DateSerial(Year(Now()), Month(Now()), "1").AddDays(-1)  
  • 次の式は、ユーザーが選択した日付パラメーター値に基づいて、さまざまな日付を表示します。
説明の例
[昨日] =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-1)
2 日前 =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-2)
1 か月前 =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-1,Day(Parameters!TodaysDate.Value))
2 か月前 =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-2,Day(Parameters!TodaysDate.Value))
1 年前 =DateSerial(Year(Parameters!TodaysDate.Value)-1,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value))
2 年前 =DateSerial(Year(Parameters!TodaysDate.Value)-2,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value))

文字列関数

  • 連結演算子と 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 プロパティを使用して書式設定を適用する必要があります。

  • RightLen、および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)  
  • 複数の値を持つパラメーターから選択した値を表示します。 次の例では、 Join 関数を使用して、パラメーター MySelection の選択した値を、レポート アイテム内のテキスト ボックスの値の式として設定できる 1 つの文字列に連結します。
= Join(Parameters!MySelection.Value)  

次の例は、上記の例と同じように、選択した値の一覧の前にテキスト文字列を表示します。

="Report for " & JOIN(Parameters!MySelection.Value, " & ")  

  • .NET Framework System.Text.RegularExpressionsRegex関数は、電話番号の書式設定など、既存の文字列の形式を変更する場合に便利です。 次の式では、 Replace 関数を使用して、フィールド内の 10 桁の電話番号の形式を "nnn-nnn-nnnn" から "(nnn) nnn-nnnn" に変更します。
=System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value, "(\d{3})[ -.]*(\d{3})[ -.]*(\d{4})", "($1) $2-$3")  

Fields!Phone.Value に余分なスペースがないことと、データ型が String」を参照してください。

参照

  • キー フィールドを指定すると、 Lookup 関数を使用して、1 対 1 のリレーションシップ (キーと値のペアなど) のデータセットから値を取得できます。 次の式は、一致する製品識別子が指定されたデータセット ("Product") の製品名を表示します。
=Lookup(Fields!PID.Value, Fields!ProductID.Value, Fields!ProductName.Value, "Product")  

LookupSet

  • キー フィールドを指定すると、 LookupSet 関数を使用して、一対多リレーションシップのデータセットから値のセットを取得できます。 たとえば、1 人の個人が複数の電話番号を持っていることがあります。 次の例では、PhoneList データセットに個人識別子が含まれ、各行に電話番号が格納されているものとしています。 LookupSet は値の配列を返します。 次の式は、戻り値を 1 つの文字列に結合し、ContactID で指定されたユーザーの電話番号の一覧を表示します。
=Join(LookupSet(Fields!ContactID.Value, Fields!PersonID.Value, Fields!PhoneNumber.Value, "PhoneList"),",")  

変換関数

Visual Basic の関数を使って、フィールドをあるデータ型から別のデータ型に変換できます。 変換関数を使用すると、フィールドの既定のデータ型を計算に必要なデータ型に変換したり、テキストを結合したりできます。

  • 次の式は、定数 500 を Decimal 型に変換して、フィルター式の Value フィールドの Transact-SQL money データ型と比較します。
=CDec(500)  
  • 次の式は、複数値パラメーター MySelection に対して選択された値の数を表示します。
=CStr(Parameters!MySelection.Count)  

決定関数

  • Iif関数は、式が true かどうかに応じて、2 つの値のいずれかを返します。 次の式では、Iif関数を使用して、LineTotalの値が 100 を超える場合にTrueのブール値を返します。 それ以外の場合は、 Falseを返します。
=IIF(Fields!LineTotal.Value > 100, True, False)  
  • 複数の IIF 関数 ("入れ子になった IIF" とも呼ばれます) を使用して、 PctCompleteの値に応じて 3 つの値のいずれかを返します。 次の式は、テキスト ボックスの塗りつぶしの色に配置して、テキスト ボックスの値に応じて背景色を変更できます。
=IIF(Fields!PctComplete.Value >= 10, "Green", IIF(Fields!PctComplete.Value >= 1, "Blue", "Red"))  

10 以上の値は、緑色の背景で表示され、1 から 9 の間は青の背景で表示され、1 未満の表示は赤の背景で表示されます。

  • 同じ機能を取得する別の方法では、 Switch 関数を使用します。 Switch関数は、テストする条件が 3 つ以上ある場合に便利です。 Switch関数は、true と評価される系列の最初の式に関連付けられた値を返します。
=Switch(Fields!PctComplete.Value >= 10, "Green", Fields!PctComplete.Value >= 1, "Blue", Fields!PctComplete.Value = 1, "Yellow", Fields!PctComplete.Value <= 0, "Red",)  

10 以上の値は、緑色の背景で表示され、1 から 9 の間には青の背景が表示され、1 は黄色の背景を持ち、0 以下の表示は赤の背景で表示されます。

  • ImportantDate フィールドの値をテストし、1 週間以上前の場合は "Red" を返し、それ以外の場合は "Blue" を返します。 この式を使用して、レポート アイテム内のテキスト ボックスの Color プロパティを制御できます。
=IIF(DateDiff("d",Fields!ImportantDate.Value, Now())>7,"Red","Blue")  
  • PhoneNumber フィールドの値をテストし、null (Visual Basic では Nothing) の場合は "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 プロパティを制御できます。 次の例では、フィールド [LargePhoto] で指定された画像は、フィールドの値が null でない場合にのみ表示されます。
=IIF(IsNothing(Fields!LargePhoto.Value),True,False)  
  • MonthName関数は、指定した月の名前を含む文字列値を返します。 次の使用例は、フィールドに 0 の値が含まれている場合に、[月] フィールドに NA を表示します。
IIF(Fields!Month.Value=0,"NA",MonthName(IIF(Fields!Month.Value=0,1,Fields!Month.Value)))  

レポート機能

式では、レポート内のデータを操作する追加のレポート関数への参照を追加できます。 ここでは、このような関数のうち 2 つの例を紹介します。 レポート関数と例の詳細については、「 集計関数リファレンス (レポート ビルダーおよび SSRS)」を参照してください。

合計
  • Sum関数は、グループまたはデータ領域の値を合計できます。 この関数は、グループのヘッダーまたはフッターで役立ちます。 次の式では、Order グループまたは Order データ領域内のデータの合計が表示されます。
=Sum(Fields!LineTotal.Value, "Order")  
  • 条件付き集計の計算には、 Sum 関数を使用することもできます。 たとえば、データセットに State という名前のフィールドがあり、使用可能な値が Not Started、Started、Finished である場合、次の式はグループ ヘッダーに配置されたときに、Finished 値についてのみ集計合計を計算します。
=Sum(IIF(Fields!State.Value = "Finished", 1, 0))  
行番号
  • RowNumber関数は、データ領域内のテキスト ボックスで使用すると、式が表示されるテキスト ボックスの各インスタンスの行番号を表示します。 この関数は、テーブル内の行数を数える場合に役立ちます。 また、行数に基づいた改ページの指定など、より複雑なタスクにも役立ちます。 詳細については、このトピックの 「改ページ 」を参照してください。

番号を付け直しを始めるタイミングを制御するために指定するスコープが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 行ごとに改ページが発生します。
=Ceiling(RowNumber(Nothing)/25)  

ユーザーがページあたりの行数の値を設定できるようにするには、次の式に示すように、 RowsPerPage という名前のパラメーターを作成し、パラメーターに基づいてグループ式を作成します。

=Ceiling(RowNumber(Nothing)/Parameters!RowsPerPage.Value)  

グループの改ページの設定の詳細については、「改ページ の追加 (レポート ビルダーおよび SSRS)」を参照してください

特性

式は、テキスト ボックスにデータを表示するためにのみ使用されるわけではありません。 レポート アイテムにプロパティを適用する方法を変更する場合にも使用できます。 レポート アイテムのスタイル情報を変更したり、情報の表示を変更することができます。

フォーマッティング

  • 次の式は、テキスト ボックスの Color プロパティで使用すると、 Profit フィールドの値に応じてテキストの色を変更します。
=Iif(Fields!Profit.Value < 0, "Red", "Black")  

Visual Basic のオブジェクト変数 Me を使うこともできます。 この変数は、テキスト ボックスの値を参照するもう 1 つの手段です。

=Iif(Me.Value < 0, "Red", "Black")

  • 次の式は、データ領域のレポート アイテムの BackgroundColor プロパティで使用すると、各行の背景色を淡い緑と白の間で交互に表します。
=Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")  

指定したスコープに式を使用している場合は、集計関数のデータセットを指定する必要があります。

=Iif(RowNumber("Employees") Mod 2, "PaleGreen", "White")  

使用できる色は、.NET Framework の KnownColor 列挙型から取得します。

グラフの色

図形グラフの色を指定するには、カスタム コードを使用して、色をデータ ポイント値にマップする順序を制御できます。 これにより、同じカテゴリ グループを持つ複数のグラフに一貫性のある色を使用できます。 詳細については、複数の図形グラフで統一された色の指定 (レポート ビルダーおよび SSRS) に関する記事を参照してください。

視認性

レポート アイテムの表示プロパティを使用して、レポート内のアイテムの表示/非表示を切り替えることができます。 テーブルなどのデータ領域では、最初に、式の値に基づいて詳細行を非表示にできます。

  • 次の式は、グループ内の詳細行の最初の表示に使用する場合、 PctQuota フィールドの売上が 90% を超えるすべての詳細行を示しています。
=Iif(Fields!PctQuota.Value>.9, False, True)  
  • 次の式は、テーブルの Hidden プロパティで設定すると、12 行を超える場合にのみテーブルを表示します。
=IIF(CountRows()>12,false,true)  
  • 次の式は、列の Hidden プロパティで設定すると、データ ソースからデータが取得された後にレポート データセットにフィールドが存在する場合にのみ列を表示します。
=IIF(Fields!Column_1.IsMissing, true, false)  

レポート データを使用して URL をカスタマイズできます。また、テキスト ボックスに対するアクションとして URL を追加するかどうかを、条件付きで制御することもできます。

  • 次の式は、テキスト ボックスのアクションとして使用すると、URL パラメーターとして EmployeeID データセット フィールドを指定するカスタマイズされた URL を生成します。
="http://adventure-works/MyInfo?ID=" & Fields!EmployeeID.Value  

詳細については、「 URL へのハイパーリンクの追加 (レポート ビルダーおよび SSRS)」を参照してください

  • 次の式では、テキスト ボックス内に URL を追加するかどうかを、条件付きで制御します。 この式は、ユーザーがレポートにアクティブな URL を含めるかどうかを決定できる IncludeURLs という名前のパラメーターに依存します。 この式は、テキスト ボックスに対するアクションとして設定されます。 パラメーターを False に設定し、レポートを表示すると、ハイパーリンクなしでレポートの Microsoft Excel をエクスポートできます。
=IIF(Parameters!IncludeURLs.Value,"http://adventure-works.com/productcatalog",Nothing)  

レポート データ

式を使用して、レポートで使用するデータを操作できます。 パラメーターおよび他のレポート情報を参照できます。 レポートのデータを取得するために使用するクエリを変更することもできます。

パラメーター

パラメーターの式を使用して、パラメーターの既定値を変更できます。 たとえば、パラメーターを使用して、レポートの実行に使用されるユーザー ID に基づき、特定のユーザーに合わせてデータをフィルター処理することができます。

  • パラメーターの既定値として次の式を使用すると、レポートを実行するユーザーのユーザー ID が収集されます。
=User!UserID  
  • クエリ パラメーター、フィルター式、テキスト ボックス、またはレポートのその他の領域でパラメーターを参照するには、 Parameters グローバル コレクションを使用します。 この例では、パラメーターの名前が Departmentであることを想定しています。
=Parameters!Department.Value  
  • パラメーターはレポート内に作成できますが、非表示に設定されます。 レポート サーバーでレポートを実行すると、パラメーターはツール バーに表示されず、レポート 閲覧者は既定値を変更できません。 既定値に設定された非表示パラメーターは、カスタム定数として使用できます。 この値は、フィールド式など、あらゆる式で使用できます。 次の式では、 ParameterFieldという名前を持つパラメーターの既定値で指定されたフィールドを特定しています。
=Fields(Parameters!ParameterField.Value).Value  

カスタム コード

レポート内では、カスタム コードを使用できます。 カスタム コードは、レポートに埋め込まれるか、レポートで使用されるカスタム アセンブリに格納されます。 カスタム コードの詳細については、「 レポート デザイナー (SSRS) の式のカスタム コードとアセンブリ参照」を参照してください。

カスタム集計にグループ変数を使用する

特定のグループ スコープ内のローカルなグループ変数の値を初期化し、その変数を式の中で参照することができます。 カスタム コードでグループ変数を使用するシナリオとしては、カスタム集計の実装が挙げられます。 詳細については、「 カスタム集計での Reporting Services 2008 でのグループ変数の使用」を参照してください。

変数の詳細については、「 レポート変数コレクションとグループ変数コレクションの参照 (レポート ビルダーおよび SSRS)」を参照してください

実行時の Null 値またはゼロ値の抑制

式内の一部の値は、レポート処理時に NULL または未定義と評価されることがあります。 これにより、実行時エラーが発生し、評価された式の代わりに テキスト ボックスに #Error 表示される可能性があります。 IIF関数は、If-Then-Else ステートメントとは異なり、trueまたはfalseをテストするルーチンに渡される前に、IIF ステートメントの各部分が評価される (関数呼び出しを含む) ため、この動作に特に敏感です。 ステートメント=IIF(Fields!Sales.Value is NOTHING, 0, Fields!Sales.Value)は、Fields!Sales.Value NOTHING の場合、表示されるレポートに #Error を生成します。

この状況を回避するには、次のいずれかの方法を使用します。

  • フィールド B の値が 0 または未定義の場合は、分子を 0 に、分母を 1 に設定します。それ以外の場合は、分子をフィールド A の値に設定し、分母をフィールド B の値に設定します。
=IIF(Field!B.Value=0, 0, Field!A.Value / IIF(Field!B.Value =0, 1, Field!B.Value))  
  • カスタム コード関数を使用して、式の値を返します。 次の例では、現在の値と前の値の差がパーセンテージで返されます。 これを使用すると、2 つの連続する値の差を計算できます。最初の比較のエッジ ケース (前の値がない場合) と、前の値または現在の値が null かどうか (Visual Basic でNothing ) が処理されます。
Public Function GetDeltaPercentage(ByVal PreviousValue, ByVal CurrentValue) As Object  
     If IsNothing(PreviousValue) OR IsNothing(CurrentValue) Then  
          Return Nothing  
     Else if PreviousValue = 0 OR CurrentValue = 0 Then  
          Return Nothing  
     Else
          Return (CurrentValue - PreviousValue) / CurrentValue  
     End If  
End Function  

次の式は、"ColumnGroupByYear" コンテナー (グループまたはデータ領域) に対して、テキスト ボックスからこのカスタム コードを呼び出す方法を示しています。

=Code.GetDeltaPercentage(Previous(Sum(Fields!Sales.Value),"ColumnGroupByYear"), Sum(Fields!Sales.Value))  

これは、実行時の例外を回避するのに役立ちます。 テキスト ボックスのColor プロパティで=IIF(Me.Value < 0, "red", "black")のような式を使用して、値が 0 より大きいか小さいかに基づいてテキストを条件付きで表示できるようになりました。

こちらもご覧ください