件数のカウントについて、代表的なものをまとめます。
【通常のカウント】
基本となる構文は以下の通りです。
<?count(JOB)?>
カウントする際にフィルタをかける場合は以下の様に記載します。この例ではカウント対象に含まれるNullを除外します。
<?count(JOB[. != ""])?>
【ループ内のカウント】
カウントがFORループの中にある場合、カレントグループのカウントを行います。
<?count(current-group()/JOB)?>
フィルタと組み合わせる場合は以下の通りです。
<?count(current-group()/JOB[. != ""])?>
【重複を除いたカウント】
重複を除いたカウントを行う際にはこちらを使用します。
<?count(xdoxslt:distinct_values(JOB)?>
ループ内の場合は、上述の構文と組み合わせて以下のようになります。
<?count(xdoxslt:distinct_values(current-group()/JOB))?>
なお、データソースがOracle DBの場合、SQLのCOUNT関数にdistinctを付加することで同様の結果を得ることもできます。
select count(distinct job) from emp;
【ページ毎のカウント】
add-page-total を使用することでページ毎のカウントを行うこともできます。
詳細は「ページ合計 (Page total)」を参照してください。
[Summary]
There are several ways to count your record with BI Publisher.
[Ordinary count]
The basic formula is:
<?count(JOB)?>
If you want conditional count, use filter. The example below skips null values.
<?count(JOB[. != ""])?>
[Count in a loop]
If you want to count records by group (in a for loop), put current-group().
<?count(current-group()/JOB)?>
With filter:
<?count(current-group()/JOB[. != ""])?>
[Distinct count]
To skip duplicated values, use count-distinct.
<?count(xdoxslt:distinct_values(JOB)?>
In a for loop:
<?count(xdoxslt:distinct_values(current-group()/JOB))?>
If your data source is oracle database, the following SQL may work.
select count(distinct job) from emp;
[Count by page]
With add-page-total, you can get page count.
Please refer the past post Page Total for more information.