Report Builder 内のページ割り付けレポートの式の例
適用対象: Microsoft レポート ビルダー (SSRS) Power BI Report Builder SQL Server Data Tools のレポート デザイナー
ページネーションのあるレポートでは、内容と外観を制御するために式をよく使用します。 式を記述するには Microsoft Visual Basic を使い、式では組み込み関数、カスタム コード、レポートとグループ変数、およびユーザー定義変数を使うことができます。 式は等号 (=) で始まります。 式エディターと、含めることができるリファレンスの種類の詳細については、「ページ割り付けレポート (Report Builder) での式の使用」および「ページ割り付けレポート (Report Builder) への式の追加」を参照してください。
重要
RDL サンドボックスが有効になっている場合は、レポートの公開時に式のテキストで使用できる種類とメンバーが、特定のものに制限されます。 詳細については、「SharePoint 統合モードでレポート サービスの RDL サンドボックスを有効化および無効化する」を参照してください。
特定用途での式の例については、次の記事を参照してください。
単純な式と複雑な式、式を使用できる場所、式に含めることができるリファレンスの種類についての詳細は、「ページ割り付けレポート (Report Builder) の式 」の記事を参照してください。 集約計算で式が評価されるコンテキストの詳細については、「ページ割り付けレポート (Report Builder) 内の合計、集約、組み込みコレクションの式の範囲」を参照してください。
この記事の式の例でも使用されている、多くの関数や演算子を使用する式の作成方法については、「チュートリアル: 式の導入」を参照してください。
関数
レポート内の多くの式には、関数が含まれています。 これらの関数を使用することで、データ書式を設定し、ロジックを適用して、レポートのメタデータにアクセスできます。 Microsoft Visual Basic ランタイム ライブラリの関数や、Convert および Math 名前空間の関数を使用して、式を記述できます。 また、他のアセンブリまたはカスタム コードの関数への参照も追加できます。 また、System.Text.RegularExpressions などの Microsoft .NET Framework のクラスを使うこともできます。
Visual Basic 関数
Visual Basic の関数を使用して、テキスト ボックスに表示されるデータ、パラメーター、プロパティ、またはレポートのその他の領域に表示されるデータを操作できます。 ここでは、このような関数のうち、いくつかの例を紹介します。 詳細については、「Visual Basic ランタイム ライブラリのメンバー」を参照してください。
.NET Framework では、特定の日付形式など、さまざまなカスタム書式オプションが提供されています。
算術関数
Round 関数は、数値を最も近い整数に丸める場合に役立ちます。 次の例では、1.3 が 1 に丸められます。
= Round(1.3)
Excel の MRound 関数のように、指定の倍数値に値を丸める式を記述することもできます。 この関数を使用すると、整数を作成する係数を値に乗算し、数値を丸めて、同じ係数で除算できます。 たとえば、1.3 を最も近い 0.2 の倍数 (1.4) に丸めるには、次の式を使用します。
= Round(1.3*5)/5
データ関数
Today 関数は現在の日付を返します。 この式は、レポートに日付を表示するテキスト ボックスや、現在の日付に基づいてデータをフィルター処理するパラメーターに使用できます。
=Today()
DateInterval 関数を使用して、日付の特定の部分を抽出します。 有効な DateInterval パラメーターの一部を次に示します。
DateInterval.Second
DateInterval.Minute
DateInterval.Hour
DateInterval.Weekday
DateInterval.Day
DateInterval.DayOfYear
DateInterval.WeekOfYear
DateInterval.Month
DateInterval.Quarter
DateInterval.Year
たとえば、この式は、今日の日付が今年の何週目にあるかを表示します。
=DatePart(DateInterval.WeekOfYear, today())
DateAdd 関数は、1 つのパラメーターに基づいて日付の範囲を指定する場合に役立ちます。 次の式は、StartDate という名前のパラメーターで指定した日付の 6 か月後の日付を返します。
=DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
Year 関数は、特定の日付の年を表示します。 この関数を使用して、日付をグループ化したり、一連の日付のラベルとして年を表示したりできます。 次の式では、指定した販売注文日グループの年が返されます。 また、Month 関数やその他の関数を使用して、日付を操作することもできます。
=Year(Fields!OrderDate.Value)
式の中で関数を組み合わせることで、形式をカスタマイズすることができます。 次の式は、"月-日-年" の日付の形式を "月-週番号" に変更します。 たとえば、
12/23/2009
をDecember Week 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 関数は、使用しているシステムに応じて、現在の日付と時刻を含む Date 値を返します。 DateDiff は、2 つの日付値の間にある期間を数値で示す 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 つのデータセットに含まれます。 集計関数であるレポート ビルダー関数 (ページ割り付けレポート (Report Builder) の First 関数) は、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 関数は、時間情報が午前 0 時に設定されている、指定の年月日を表す Date 値を返します。 次の例では、現在の月に基づいて、前月の最終日が表示されます。
=DateSerial(Year(Now()), Month(Now()), "1").AddDays(-1)
次の式では、ユーザーによって選択された Date パラメーター値に基づくさまざまな日付が表示されます。
例の説明 | 例 |
---|---|
[昨日] | =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")
テキスト ボックスに日付または数値のみが含まれている場合は、テキスト ボックス内の書式設定関数ではなく、テキスト ボックス内の書式設定プロパティを使用して、書式設定を適用する必要があります。
Right、Len、InStr の各関数は、
DOMAIN\username
をユーザー名のみにトリミングする場合など、substring を返す場合に便利です。 次の式では、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 から選択した複数の値を連結して単一の文字列にし、その文字列をレポート アイテム内のテキスト ボックスの値を表す式として設定できるようにしています。
= Join(Parameters!MySelection.Value)
次の例では、前の例と同じことを行い、選択した値のリストの前に文字列を表示しています。
="Report for " & JOIN(Parameters!MySelection.Value, " & ")
.NET Framework の System.Text.RegularExpressions の Regex 関数は、既存の文字列の形式を変更するのに便利です (たとえば、電話番号の書式設定)。 次の式では、REPLACE 関数を使用して、フィールドに含まれる電話番号の形式を "nnn-nnn-nnnn" から "(nnn) nnn-nnnn" に変更しています。
=System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value, "(\d{3})[ -.]*(\d{3})[ -.]*(\d{4})", "($1) $2-$3")
Note
Fields!Phone.Value に余分なスペースがないことと、データ型が String」を参照してください。
参照
キー フィールドを指定することで、 Lookup 関数を使用し、1 対 1 のリレーションシップ (キーと値のペアなど) の値をデータセットから取得することができます。 次の式では、入力された商品 ID に一致する製品名をデータセット (PRODUCT) から取得し、表示しています。
=Lookup(Fields!PID.Value, Fields!ProductID.Value, Fields!ProductName.Value, "Product")
LookupSet
キー フィールドを指定することで、 LookupSet 関数を使用し、1 対多のリレーションシップの値のセットをデータセットから取得することができます。 たとえば、1 人の個人が複数の電話番号を持っていることがあります。 次の例では、PhoneList データセットに個人識別子が含まれ、各行に電話番号が格納されているものとしています。 LookupSet は、値の配列を返します。 次の式では、戻り値を 1 つの文字列に結合し、ContactID で指定されたユーザーの電話番号の一覧を表示しています。
=Join(LookupSet(Fields!ContactID.Value, Fields!PersonID.Value, Fields!PhoneNumber.Value, "PhoneList"),",")
変換関数
Visual Basic の関数を使って、フィールドをあるデータ型から別のデータ型に変換できます。 変換関数を使用すると、フィールドのデフォルトのデータ型を、計算やテキストの連結に必要なデータ型に変換できます。
次の式では、定数 500 を、フィルター式の VALUE フィールドで Transact-SQL のマネー データ型と比較するために、DECIMAL 型に変換しています。
=CDec(500)
次の式では、複数の値を持つパラメーター MySelection で選択された値の数を表示しています。
=CStr(Parameters!MySelection.Count)
決定関数
IIF 関数では、式が true かどうかに応じて、2 つの値のいずれかが返されます。 次の式では IIF 関数を使用して、LineTotal の値が 100 を超えている場合は、ブール値 "True" を返します。 それ以外の場合は、"False" の値を返します。
=IIF(Fields!LineTotal.Value > 100, True, False)
PctComplete の値に応じて 3 つの値のいずれかを返すには、複数の IIF 関数 ("入れ子になった IIF" ステートメントとも呼ばれます) を使用します。 次の式をテキスト ボックスの塗りつぶしの色に使用すると、テキスト ボックスの値に応じて背景色を変更できます。
=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 値の場合は、"No Value" (Visual Basic では Nothing) を返します。 それ以外の場合は、電話番号の値を返します。 この式を使用して、レポート アイテムに含まれるテキスト ボックスの値を制御できます。
=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 プロパティを制御できます。 次の例では、フィールドの値が null 値ではない場合にのみ、LargePhoto フィールドで指定されたイメージが表示されます。
=IIF(IsNothing(Fields!LargePhoto.Value),True,False)
MonthName 関数は、指定した月に対応する月名を含む文字列値を返します。 次の例では、フィールドに 0 の値が含まれている場合に、Month フィールドに NA と表示されます。
IIF(Fields!Month.Value=0,"NA",MonthName(IIF(Fields!Month.Value=0,1,Fields!Month.Value)))
レポート関数
式には、これ以外にも、レポート内のデータを操作するレポート関数へのリファレンスを追加できます。 ここでは、このような関数のうち 2 つの例を紹介します。 レポート関数の詳細と例については、「レポート ビルダー関数 - ページ割り付けレポート (Report Builder) での集計関数のリファレンス」を参照してください。
SUM
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 関数をデータ領域内のテキスト ボックスで使用すると、式が表示されるテキスト ボックスの各インスタンスの行数が表示されます。 この関数は、テーブル内の行数を数える場合に役立ちます。 また、行数に基づいた改ページの指定など、より複雑なタスクにも役立ちます。 詳細については、「改ページ」を参照してください。
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)
Note
ページ ヘッダーまたはページ フッターでは、1 つの式につき 1 つのレポート アイテムしか参照できません。 また、ページ ヘッダーまたはページ フッターの式では、テキスト ボックスの名前を参照することはできますが、テキスト ボックス内の実際のデータ式は参照できません。
[改ページ]
レポートによっては、グループやレポート アイテムの代わりに、またはグループやレポート アイテムに加えて、指定した行数の最後に改ページを配置する必要がある場合があります。 目的のグループまたは詳細レコードを含むグループを作成します。 グループに改ページを追加し、指定した行数でグループ化するグループ式を追加します。
次の式をグループ式で使用すると、25 行ごとに数値が割り当てられます。 グループに改ページが定義されている場合は、この式の結果として、25 行ごとに改ページが行われます。
=Ceiling(RowNumber(Nothing)/25)
1 ページの行数をユーザーが設定できるようにするには、次の式で示すように、RowsPerPage という名前のパラメーターを作成し、グループ式をそのパラメーターに基づくようにします。
=Ceiling(RowNumber(Nothing)/Parameters!RowsPerPage.Value)
グループに改ページを設定する方法の詳細については、「ページ割り付けレポート (Report Builder) への改ページの追加」を参照してください。
プロパティ
式は、テキスト ボックスにデータを表示するためだけに使われるのではありません。 レポート アイテムにプロパティを適用する方法を変更する場合にも使用できます。 レポート アイテムのスタイル情報を変更したり、情報の表示を変更することができます。
書式設定
次の式をテキスト ボックスの 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")
Note
使用できる色は、.NET Framework の KnownColor 列挙型から取得します。
グラフの色
図形グラフの色を指定するには、色をデータ ポイント値にマップする順序を制御する、カスタム コードを使用します。 このカスタム コードは、同じカテゴリ グループを持つ複数のグラフで色を統一する場合に役立ちます。 詳細については、「ページ割り付けレポート (Report Builder) で複数の図形グラフの色を統一する」を参照してください。
可視性
レポート アイテムの表示プロパティを使用して、レポート内のアイテムの表示/非表示を切り替えることができます。 テーブルなどのデータ領域では、最初に、式の値に基づいて詳細行を非表示にできます。
次の式をグループ内の詳細行の初期表示状態に対して使うと、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 を追加するかどうかを、条件付きで制御することもできます。
次の式をテキスト ボックスのアクションとして使用すると、URL パラメーターとしてデータセット フィールド EmployeeID を指定する、カスタマイズされた URL が生成されます。
="https://contoso/MyInfo?ID=" & Fields!EmployeeID.Value
詳細については、「ページ割り付けレポート (Report Builder) に URL へのハイパーリンクを追加する」を参照してください。
次の式では、テキスト ボックス内に URL を追加するかどうかを、条件付きで制御します。 この式は IncludeURLs という名前のパラメーターに依存し、レポートにアクティブな URL を含めるかどうかをユーザーが決定できます。 この式は、テキスト ボックスに対するアクションとして設定されます。 パラメーターを FALSE に設定してからレポートを表示すると、ハイパーリンクなしのレポートを Microsoft Excel にエクスポートできます。
=IIF(Parameters!IncludeURLs.Value,"https://contoso.com/productcatalog",Nothing)
ソース
式を使用して、レポートで使用するデータを操作できます。 パラメーターおよび他のレポート情報を参照できます。 レポートのデータ取得に使用するクエリを変更することもできます。
パラメーター
パラメーターの式を使用して、パラメーターの既定値を変更できます。 たとえば、パラメーターを使用して、レポートの実行に使用されるユーザー ID に基づき、特定のユーザーに合わせてデータをフィルター処理することができます。
パラメーターの既定値として次の式を使用すると、レポートを実行するユーザーのユーザー ID が収集されます。
=User!UserID
レポートのクエリ パラメーター、フィルター式、テキスト ボックスなどの領域でパラメーターを参照するには、 Parameters グローバル コレクションを使用します。 この例では、パラメーターの名前が Departmentであることを想定しています。
=Parameters!Department.Value
パラメーターはレポート内に作成できますが、非表示に設定されます。 レポートがレポート サーバーで実行されても、パラメーターはツール バーに表示されず、レポートのユーザーは既定値を変更できません。 既定値に設定された非表示パラメーターは、カスタム定数として使用できます。 この値は、フィールド式など、あらゆる式で使用できます。 次の式では、 ParameterFieldという名前を持つパラメーターの既定値で指定されたフィールドを特定しています。
=Fields(Parameters!ParameterField.Value).Value
カスタム コード
レポート内では、カスタム コードを使用できます。 カスタム コードは、レポート内に埋め込むか、レポートで使用されるカスタム アセンブリに格納します。 カスタム コードの詳細については、「Report Designer (SSRS) 内のページ割り付けレポートの式のカスタム コードおよびアセンブリ リファレンス」を参照してください。
カスタム集約にグループ変数を使用する
特定のグループ スコープ内のローカルなグループ変数の値を初期化し、その変数を式の中で参照することができます。 カスタム コードでグループ変数を使用するシナリオとしては、カスタム集計の実装が挙げられます。 詳細については、「Reporting Services 2008 のグループ変数をカスタム集約に使用する」を参照してください。
変数の詳細については、「ページ割り付けレポート (Report Builder) のレポートおよびグループ変数のリファレンス」を参照してください。
実行時に null 値またはゼロ値を表示しない
式内の一部の値は、レポート処理時に NULL または未定義と評価されることがあります。 これらの値により、ランタイム エラーが発生し、評価された式の代わりにテキスト ボックスに "#Error" が表示される可能性があります。 IIF 関数はこのビヘイビアーの影響を受けます。 これは、IF/THEN/ELSE ステートメントとは異なり、IIF ステートメントの各部分 (関数呼び出しを含む) が、TRUE であるか FALSE であるかをテストするルーチンに渡される前に評価されるためです。 Fields!Sales.Value
が Nothing 値の場合に ステートメント =IIF(Fields!Sales.Value is NOTHING, 0, Fields!Sales.Value)
を実行すると、表示レポートに "#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))
このコードは、実行時の例外を回避するのに役立ちます。 テキスト ボックスの
=IIF(Me.Value < 0, "red", "black")
Color プロパティで のような式を使用し、その値が 0 より大きいか小さいかの条件に基づいて、テキストを表示できるようになりました。