式
単純なレポートの場合、比較的簡単なデザイン作業で実現することができました。ただし、実際のレポートにはいろいろな要望が存在します。例えば上記レポートについて、「売上金額を千円単位で表示したい」という要望が出てくるかもしれません。SQL文を工夫することで実現することも可能ですが、さらに複雑な要望になるとSQL文だけで対処するのは難しくなります。
フィールドを設定した詳細行のデザイン画面を見ると、=[CategoryName]とか=[ProductSales]のように、イコールと角カッコでフィールド名が挟まれたものが表示されています。このような記述をページレポートでは「式」と言います。
デザイン画面上に表示されている文字列は、そのTextBoxコントロールのValueプロパティの値です。なお、デザイン画面上では=[ProductSales]と表示されておりますが、プロパティウィンドウには=Fields!ProductSales.Valueと表示されます。これは、デザイン画面上では短縮形で表示されているためです。
短縮形 | =[ProductSales] |
---|---|
基本形 | =Fields!ProductSales.Value |
ページレポートの式は、Visual Basic.NET類似の構文で記述される一種のスクリプトです。式を使用することで、データを加工して表示することや、より高度なレイアウトを実現できるようになります。
式の記述
式の記述方法を見てみましょう。詳細行のTextBoxコントロールを選択した状態で、プロパティウィンドウのValueプロパティを選択します。すると右端にボタンが表示されますのでクリックしてください。ドロップダウンリストが表示されます。
リストの一番上に表示されている「〈式…〉」を選択すると、式エディタダイアログが表示されます。
式エディタでは、短縮形ではなく基本形で式を表示/編集します。
式の先頭に付いているイコールは「式として評価する」ための記号なので、固定文字列を表示させる場合以外は常に必要です。
例えば「=Fields!ProductSales.Value」という式は、「ProductSales」という名前のフィールドから得られる値を出力するということを表しています。このフィールドの値を1000で割った時の値を得たい場合には、以下のような式を設定します。
=Fields!ProductSales.Value /1000
さらに、末尾に「千円」とつけたい場合には、&で文字列連結を行い、以下のように設定します。
=Fields!ProductSales.Value /1000 & "千円"
これで、「ProductSales(売上金額)」が千円単位で表示されるようになります。
式で使える関数など
式で使える関数、演算子、フィールドは多数あります。詳しくは、製品ヘルプの[概念]-[ページレポートの概念]-[式]をご覧ください。ここでは代表的なものをいくつか紹介します。
演算子
通常の四則演算や、Visual Basicで一般的な演算子は使用可能です。上記の例では除算の「/」と連結の「&」を使っています。
日付・時刻
現在の日付時刻を取得するためのフィールドが、以下の形で用意されています。
=Globals!ExecutionTime
また、Microsoft.VisualBasic.DateAndTimeのメソッドが使えるので、例えば西暦年だけを抽出したい場合は以下のようにします。
=Year(Globals!ExecutionTime)
これはデータソースからの値に適用することも可能です。例えばDateTime型のフィールド「DateFieldX」に対してYearメソッドを適用する場合、以下のような式になります。
=Year(Fields!DateFieldX.Value)
ページ番号・総ページ数
現在のページ、総ページを取得するフィールドが用意されています。
現在のページ:=Globals!PageNumber 総ページ:=Globals!TotalPages
プログラムフロー
Microsoft.VisualBasic.InteractionクラスのIIFメソッドが使えます。(C#の三項演算子「?:」に類似します)。例えば、FieldAが偶数か奇数かによってデータを取得するフィールドをFieldBとFieldCで切り替える場合、以下のような式になります。
=IIF(Fields!FieldA.Value mod 2 = 0, Fields!FieldB.Value , Fields!FieldC.Value )