このサイトをご覧になるには、JavaScriptを有効にしてください。

[帳票開発ツール]Stimulsoft レポート&ダッシュボード ユーザーマニュアル

ナビゲーション: レポート内部コンポーネント > 関数 > 合計

バンドに関連する集計

スクロール トップ その他

 

合計を計算して表示するには、レポート内にテキストコンポーネントを配置し、エディタを呼び出して「サマリー」タブに移動する必要があります。
 
」フィールドです。このフィールドは、合計を計算する式を指定します。式は手動で指定することもできますし、他のパラメータの種類によって自動的に生成されることもあります。

サマリー関数」フィールド。このフィールドでは、合計を計算する機能が選択されています。

このフィールドでは、合計を計算するデータ バンドを指定することができます。

このフィールドでは、合計を計算するためにどの値を使用するか、データ列によって指定することができます。

ラジオボタンを使って、合計を計算する対象を設定することができます。

レポート。合計は、レポート全体について計算されます。

。合計は、レポート内のすべての列で計算されます。

ページ。合計は、レンダリングされたレポートの各ページごとに計算されます。

 

Running Totalパラメータ。このフラグがチェックされている場合、合計がランニングとして計算されます。チェックされていない場合は、プロジェクト(レポート、列、ページ)のみで合計が計算されます。

条件パラメータ。このフラグがチェックされている場合、合計を計算する際に条件が考慮されます。チェックされていない場合は、条件を考慮せずに合計が計算されます。

フィールドは、条件の式を指定します。

 

関数結果の合計の型

 

デフォルトでは、合計を計算する関数はDecimal型を返します(関数-CountとCountDistinctを除く)。しかし、他の2つのデータ型、DoubleとInt64を使用して計算を行うこともできます。Doubleデータ型を使って計算結果を返す関数は、関数名の上位にラテン文字のDを付けます。Int64型を使った計算の場合は、ラテン文字のIを上位のレジスタに追加します。このように分離することで、合計の計算における損失を避けることができます。

 

関数

戻り値の種類

Sum()

Decimal

SumD()

Double

SumI()

Int64

 

お知らせ: I, D の文字は,Count と CountDistinct 以外の関数に付加することができます。これらの関数は常に Int64 型を返します。

 

 

関数のシンタックスに関するいくつかの言葉

 

プログラミング言語C#を使用する場合、すべての関数はレジスタに厳密に準拠して記述する必要があります。

 

Sum (expression) - 自動的に識別されたオブジェクトによって、合計が計算されます。

Sum (band, expression) - 合計は、特定のオブジェクトによって計算されます。

SumIf (band, expression, condition) - 条件を持つオブジェクトによって、合計が計算されます。

 

expression - 計算を行うための式です。

band - 計算を実行するバンドの名前です。

condition - 計算を式に含めるための条件です。

 

ページやコンテナによる計算の場合、関数名の前にラテン文字のcを付ける以外は同じ構文です。

cSum (expression) - ページまたはコンテナによる総和の計算。

cSum(band, expression) - ページまたはコンテナおよびその上のオブジェクトによる総和の計算。

cSumIf (band, expression, condition) - 特定の条件下で、ページまたはコンテナおよびその上のオブジェクトによる合計を計算。

 

列ごとの合計を計算する場合は、関数名に接頭辞 col をつけます。

colSum (expression) - 合計は、列によって計算されます。

colSum (band, expression) - 合計は、列とその中のオブジェクトによって計算されます。

colSumIf (band, expression, condition) - 特定の条件下で、列とその中のオブジェクトによって合計が計算されます。

 

Count関数は、他の関数と異なり、計算のための式を持ちません。この関数のシンタックスを以下に示します。

Count() - 行数を計算します。

CountIf(condition) - 条件に応じた行数を計算します。

Count(band) - オブジェクトの行数を計算します。

CountIf(band, condition) - オブジェクトと条件によって、行の数を計算します。

cCount() - ページとコンテナによる行数を計算します。

cCount (band) - ページ (コンテナ) およびその上のオブジェクトによる行数を計算します。

cCountIf(band, condition) - 特定の条件下で、ページ (コンテナ) およびその上にあるオブジェクトの行数を計算します。

colCount() - 列の行数を計算します。

colCount (band) - 列とその列のオブジェクトによる行数を計算します。

colCountIf(band, condition) - 特定の条件下で、列とその列のオブジェクトによる行数を計算します。

 

 

任意の場所に合計を表示する

 

通常、関数呼び出しが指定されたテキスト表現内のコンポーネントは、データバンド上のフッターバンドに配置される。フッターバンドにはいくつかの種類がある。

ReportSummaryBand - レポート全体の合計を表示するために使用されるバンドです。

PageFooterBand - ページごとの合計を表示するためのバンドです。

FooterBand - リストごとの合計を表示するために使われるバンドです。

GroupFooterBand - このバンドは、グループごとの合計を表示するために使用されます。

ColumnFooterBand - このバンドは、列ごとの合計を表示するために使用されます。

 

上記のいずれかのバンドに機能を持つコンポーネントを配置することで、レポート作成者は、この機能がどのデータバンドに適用されるかを正確に判断することができます。また、関数を持つコンポーネントをデータバンドに配置することも可能です。この場合、各データ行に、すべての行による関数の計算結果が表示されます。

 

ヘッダーバンドに、例えば合計を表示したい場合、これはスクリプトを使用して行われます。しかし、Stimulsoftレポートでは、関数を持つコンポーネントは、レポートのどのバンドにも存在することができます。

 

お知らせ 機能付きコンポーネントは、レポート内のどこにでも配置できます。

 

また、レポートテンプレートのページなどに、その機能を持つコンポーネントを配置することも可能である。例えば、リストによる値の合計を計算し、ヘッダーリストに出力することが可能である。別の例では、リストの行数を計算し、その値をページの冒頭に出力します。同時に、結果が計算されるデータバンドを指定しなければならないという制限もある。

 

{Sum (DataBand1, Products.UnitsInStock)}  この場合、DataBand1の各行のProducts.UnitsInStock列の値に対して、合計が計算されます。

{Count (DataBand1)} この場合、DataBand1 の行数を計算します。

 

 

関数を使った表現

 

合計を計算するために、式に追加の引数を指定しないことも可能である。例えば、Count関数では省略可能ですし、Sum関数では計算すべき式を1つだけ引数として設定することができます。レポート作成者が、これらの関数がどのデータバンドに関連しているかを判断できれば、これらすべてが可能です。

 

お知らせ レポートジェネレータは、この関数を持つコンポーネントがデータバンドを持つバンドと関連している場合、関数と特定のデータバンドの関係を決定することができます。言い換えれば、関数を持つコンポーネントは、このデータバンドに関連するヘッダーバンドとフッターバンドに配置されています。

 

それ以外の場合は、引数で、合計を計算する必要があるデータソースまたはデータバンドを指定する必要があります。式で指定できるのは以下の通り。

値を計算するオブジェクト - {Sum (DataSource.Column)}.

オブジェクトとそれに対する様々な数学的演算 - {100 + Sum (DataSource.Column) * 2}.

 

ページによる集計の計算

 

ページまたはパネルによる合計を計算するには、関数名の前に小文字でラテン文字「c」を追加する必要があります。

 

{AcCount (DataBand1)} - レポートエンジンは、1ページまたは1パネルの行数を計算します。

 

お知らせ: ページによる集計は、パネルと同じ原理です。

 

パネルやページ単位で集計を行う場合、集計関数の計算を行うデータバンドを指定することが望まれる。これは、1ページに複数のデータバンドが存在する可能性があるためです。

 

1つのページやパネルに、いくつでも集計関数を使用することができます。Stimulsoftのソフトはこれに対して何の制限もありません。ページ別の合計を条件付きで結合することは可能です。例えば

 

{CountIf(DataBand1, Products.UnitsInStock = 0)} - レポートエンジンは、このページでゼロに等しいアイテムの数を計算します。

 

列別集計の計算

 

列による合計を計算するには、関数名の前に小文字の接頭辞 col (column の語源) を付ける必要があります。たとえば、次のようになります。

 

{ColCount ()} - レポートエンジンは、各カラムの行数を計算します。

 

お知らせ Stimulsoftレポートでの列による合計の計算には、1つの制限があります。合計はページ上の列によってのみ計算することができます。データバンド上の列による合計の計算は許可されていません。

 

列による集計を行う場合、ColumnHeader、ColumnFooter、Header、Footerのいずれかのバンドに関数を持つテキストコンポーネントを配置することが望まれる。列による合計は、無制限に計算することができます。これには制限はない。また、条件付きでフッターをカラム別にまとめることも可能である。

 

{ColCountIf(DataBand1, Products.UnitsInStock = 0)} - レポート エンジンは、条件が実行される各列の行数を計算します。

 

イベントコードでの集計計算

 

Stimulsoftソフトウェアを使用すると、レポートイベントのコードで関数を計算することができます。これにより、より複雑な関数を計算することができます。また、この場合、計算の過程でコードから計算値を参照し、この処理に影響を与えることができます。この計算を行うには、データディクショナリに関数の値を格納する変数を作成する必要があります。

 

お知らせ: 関数の計算結果を格納するために、コード内で宣言された変数を使用しないでください。データ辞書にある変数を使用する必要があります。

 

変数を作成する際、変数のデータ型を指示します。例えば、Decimal、初期値として、0を指定します。 次に、Data bandで、Renderingイベントで変数をインクリメントする式を指定します。例えば、Products.UnitPriceフィールドによる値の合計を計算したい場合、式は次のようになります。

Variable + = Products.ItemsInStock;

 

計算結果を表示するには、式と一緒にテキストコンポーネントを配置する必要があります。

{Variable}

 

また、式 {Variable} を持つテキストコンポーネントが必要で、Process At プロパティを End of Report 値に設定します。残りのコンポーネントを処理した後に、レポート・ジェネレータが変数の値を計算することが必要です。

 

条件付き合計の計算

 

合計を計算するときに、ある値を考慮する必要がある場合があります。この場合、合計を計算する機能で条件を設定します。たとえば、ゼロより大きい値を合計する必要がある場合などです。合計を計算する関数に条件を追加するには、関数名の末尾に If (ラテンアルファベット) を付け、条件を指定した引数を追加する必要があります。

 

{SumIf (Products.UnitsInStock, Products.UnitsInStock> 1)}. この場合、Products.UnitsInStockの値のうち、1より大きな値が計算されます。

{CountIf (Products.UnitsInStock == 0)}. この場合、列の値がゼロの行数を計算します UnitsInStock

 

お知らせ Double や Int64 を使って計算する場合は、まずラテン文字の D または I を付け、次に If という単語を付けなければなりません。例えば{SumDIf(Products.UnitsInStock,Products.UnitsInStock> 0)}.

 

合計と、構成要素のサイズを自動的に変更する機能

 

お知らせ レポートをレンダリングする際、コンポーネントのサイズが決定された時点では、合計機能の計算結果が未知数です。このことは、合計の計算が行われるコンポーネントの自動リサイズをインストールする際に考慮する必要があります。さもないと、コンポーネントのサイズとトータルファンクションの計算結果が正しくないという問題が発生する可能性があります。

 

 

無効データバンドとの合計

 

データバンドは、さまざまな方法で無効にすることができます。たとえば、特定の条件によって無効にしたり、高さをゼロにしたりすることができます。デフォルトでは、レポートをレンダリングする際、レポート エンジンは無効化されたデータ バンドを考慮せず、処理しません。しかし、無効化されたデータバンドによって合計を計算する必要がある場合は、このバンドのCalcInvisibleプロパティをtrueに設定する必要があります。この場合、レポートはDataを含むバンドのみ表示され、合計の計算はDataバンドを考慮して実行される。

 

マスターディテールレポートにおける合計の計算

 

階層型レポートで合計を計算する場合、結果の算出に問題がある場合があります。マスター・ディテール・レポートを基にした例を考えてみましょう。このレポートには、商品カテゴリのリストが表示されているとします。この場合、カテゴリーはマスター項目、商品は詳細項目です。

 

レポートに表示される商品の数をカウントしたいとします。商品(詳細レコード)のリストを持つバンドに、関数Count()を持つフッターバンドを追加すると、各カテゴリ(マスターレコード)ごとに、合計が計算されます。

 

 

カテゴリを持つバンドに関数Count()を持つフッターバンドを追加した場合、結果はレポート内のマスターエントリの数、カテゴリの数になります。しかし、マスター-詳細レポートでは、すべての詳細レコードに対してすぐに合計を計算することができます。この場合、両方の(マスターと詳細の)バンド名をコロン付きの関数として指定する必要があります。Count(MasterBand:DetailBand)と指定します。

 

 

Count(MasterBand:DetailBand)関数の結果は、全カテゴリーの商品数です。