biz-StreamマニュアルXMLドキュメントレイアウトタグ リファレンス第6章 データ設定について6.16 集計マスタ<bs:calculate-master>

6.16 集計マスタ<bs:calculate-master>


6.16.1機能説明

集計機能はデータソースかつ、ブレイク条件ごとに定義でき、データソースのカラムが対象となります。集計の対象となるカラムは数値型である必要があります。
対象となるカラムに対して合計、平均、最大値及び最小値の4つの集計関数があります。
また、集計した結果に独自の計算式で計算することも可能です。


6.16.2属性説明

1bs:calculate-master属性説明

master-nameは他のマスタから参照されるキーとなります。ユニークな名称で設定してください。

属性名指定説明指定内容初期値
master-name必須定義名CDATA
break-list任意小計行を出力する条件となるカラム名(ブレイクキー)を指定CDATAセミコロン(;)で区切り、複数のカラムを指定可能 ※

※ブレイクキーとして指定したカラムのデータ値を、小計行にLabelなどで表示することができます。
ブレイクキーが複数ある場合、Labelなどで「name="keyN"」(Nは0 からの整数値)のように指定します。 使用方法は『flow-areaサンプル7』を参照してください。


2bs:calculate-statement属性説明

次のbs:calculate-functionで用いる演算子をfunctionで宣言する必要があります。

属性名指定説明指定内容初期値
function必須集計のための計算式を定義CDATA指定可能な演算子、関数については 別表 を参照してください

3bs:calculate-function属性説明

column-nameは他のマスタから参照されるキーとなります。ユニークな名称で設定してください。

属性名指定説明指定内容初期値
column-name必須ページレイアウトと関連付けする定義名CDATA
function必須集計結果に対する計算式を定義CDATA

4集計機能で使用可能な演算子・関数一覧
演算子・関数意味説明使用例 [結果]
+加算足し算を行う1 + 2 [3]
-減算引き算を行う5 - 3 [2]
*乗算掛け算を行う4 * 6 [24]
/除算割り算を行う10 / 3 [3.33333333]
%剰余割り算の余りを求める10 % 3 [1]
ceil()切り上げ第二引数で指定した小数点位の切り上げを行うceil(2.345 , 2) [2.4]
floor()切り捨て第二引数で指定した小数点位の切り捨てを行うfloor(2.345 , 3.) [2.34]
round()四捨五入第二引数で指定した小数点位の四捨五入を行うround(2.345 , 3) [2.35]
abs()絶対値絶対値を返すabs(-2.345) [2.345]
sum()合計値合計を返すsum(col1) [col1の合計値]
average()平均値平均値を返すaverage(col1) [col1の平均値]
min()最小値最小値を返すmin(col1) [col1の最小値]
max()最大値最大値を返すmax(col1) [col1の最大値]

『記述例 bs:calculate-masterサンプル』では、乗算 "*" をベースにご説明します。



6.16.3記述例

bs:calculate-masterサンプル

bs:calculate-masterサンプル
(『<biz-Stream_home>/sample/xml/datasource-master/calculateSample1-doc.xml』)


集計にはブレイク条件を指定した小計と合計があります。
このサンプルでは顧客名をブレイク条件に小計と最後に合計を出力するサンプルです。
ドキュメントレイアウトでは、データのリソース、フィールド定義、集計定義をします。

<?xml version="1.0" encoding="UTF-8"?>
<!-- XML file created by biz-Stream Designer -->
<!-- biz-Stream Copyright BrainSellers.com Corp. -->
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:pdf="http://www.brainsellers.com/schema" xmlns:svg="http://www.brainsellers.com/schema" xmlns:bs="http://www.brainsellers.com/schema" xmlns:form="http://www.brainsellers.com/schema" version="5.0.0">
    <bs:datasource-master-set>
        <bs:datasource-master master-name="source" position="inherit">
            <bs:csv-master-reference master-reference="csvdata"/>

            <bs:calculate-master master-name="小計行" break-list="顧客名">
                <bs:calculate-statement function="sum(個数)"/>

                <bs:calculate-statement function="sum(金額)"/>

                <bs:calculate-function column-name="samount" function="sum(個数)"/>

                <bs:calculate-function column-name="stotal" function="sum(金額)"/>

            </bs:calculate-master>
            <bs:calculate-master master-name="合計行">
                <bs:calculate-statement function="sum(個数)"/>

                <bs:calculate-statement function="sum(金額)"/>

                <bs:calculate-function column-name="amount" function="sum(個数)"/>

                <bs:calculate-function column-name="totalvalue" function="sum(金額)"/>

            </bs:calculate-master>
            <bs:calculate-master master-name="消費税行">
                <bs:calculate-statement function="sum(金額)"/>

                <bs:calculate-function column-name="tax" function="sum(金額) * 0.05"/>

            </bs:calculate-master>
            <bs:calculate-master master-name="総計行">
                <bs:calculate-statement function="sum(金額)"/>

                <bs:calculate-function column-name="totalamount" function="sum(金額) * 1.05"/>

            </bs:calculate-master>
        </bs:datasource-master>
        <bs:csv-resource-master master-name="csvsource" url="${base-dir}/sample/xml/datasource-master/sample.csv" included-header="true"/>

        <bs:csv-master master-name="csvdata" used-header="false">
            <bs:csv-statement master-reference="csvsource"/>

            <bs:data-type column-name="顧客名" column-no="1" type="char"/>
            <bs:data-type column-name="個数" column-no="2" format="#,##0" type="decimal"/>
            <bs:data-type column-name="金額" column-no="3" format="#,##0" type="decimal"/>
        </bs:csv-master>
    </bs:datasource-master-set>
    <fo:layout-master-set>
        <fo:simple-page-master master-name="A4P" page-height="297mm" page-width="210mm">
            <fo:region-body/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="A4P" bs:local-page-control="none">
        <fo:flow flow-name="xsl-region-body">
            <bs:block-container>
                <bs:include href="${base-dir}/sample/xml/datasource-master/calculateSample1-page.xml"/>

            </bs:block-container>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

ドキュメントレイアウトで集計の定義を行います。

  1. CSVのリソース定義
    ファイル名の位置を定義
    定義名・・・【csvsource】(42行目抜粋)
  2. CSVマスタを定義
    定義したCSVリソースに対し、実際に使用するデータソースとカラムを定義
    CSVマスタ・・・【csvdata】(44行目抜粋)
    データソース・・・【source】(6行目抜粋)
    1番目のカラム・・・【顧客名】
    2番目のカラム・・・【個数】
    3番目のカラム・・・【金額】
  3. CSVマスタを参照
    定義したデータソースを元に集計を定義
  4. ブレイク条件を「顧客名」として集計ブロックを定義
    定義名・・・【小計行】
    カラム「個数」のサマリー結果の定義名 ・・・【samount】(14行目抜粋)
    カラム「金額」のサマリー結果の定義名 ・・・【stotal】(16行目抜粋)
  5. ブレイク条件を設定しない集計ブロックを定義
    定義名・・・【小計行】
    カラム「個数」のサマリー結果の定義名 ・・・【amount】(24行目抜粋)
    カラム「金額」のサマリー結果の定義名 ・・・【totalvalue】(26行目抜粋)
  6. ブレイク条件を設定しない集計ブロックを定義
    定義名・・・【消費税行】
    カラム「金額」サマリー結果に0.05を乗算し消費税を算出・・・【tax】
  7. ブレイク条件を設定しない集計ブロックを定義
    定義名・・・【総計行】
    カラム「金額」のサマリー結果に1.05を乗算し総計金額を算出・・・【totalamount】

ページレイアウトではドキュメントレイアウトで定義したフィールド及び集計結果をどのような レイアウトで出力するかを定義します。

集計マスタ