2011/02/28

マイナスの書式設定 (Format: Negative number)

数値型がマイナスの場合の書式設定について、US OTNおよびブログで紹介されています。


参考URL:
http://forums.oracle.com/forums/thread.jspa?threadID=693945&tstart=0
http://winrichman.blogspot.com/2008/08/display-negative-numbers-in-braces.html



MS-Wordのフィールドプロパティで設定するのが楽だろうという話の他、以下の構文も紹介されています。xdofx:if 構文は、簡単な値補正にも使用できます。

<xdofx:if SALES > 0 then SALES else '('|| SALES ||')' end if>
<?format-number(SALES, '#,##0;(#,##0)')?>


一応、「#,##0;▲#,##0」が正しく動作するか確認しました。問題ありませんでした。


[ Summary ]
How to display Negative numbers in Braces "( )" - use the formulas above, or,  set that form-field as Number type, and type the mask string on MS-Word.
Refer the URLs for more details.

2011/02/25

背景色の設定 (Switching background color)

背景色の設定に関する手法を説明します。今回のサンプルの出力結果は以下の通りです。




【1行毎に背景色を切り替える】
1行毎に背景色を切り替えるには、背景色の異なる行をあらかじめテンプレートに作成します。




切り替えは上図の[if1]および[if2]にて設定します。設定は以下の通りです。

[if1]: <?if:position() mod 2 = 1?>
[if2]: <?if:position() mod 2 = 0?>
なお、サンプルのように if で行を囲む場合、「表の内側」で完結させてください。表の外側に if を設定すると、予期せぬエラーが発生することがあります。





【データに応じて背景色を切り替える】
サンプルでは、SALが3000以上のカラムをオレンジに着色しています。設定はセル単位で[if3]にて行っています。[if3]の内容は以下の通りです。
[if3]: <?if:SAL>=3000 ?><?attribute@incontext:background-color;'#ff9900'?><?end if?> 



【背景色のRGB指定】
背景色はRGB関数で指定することもできます。数値での受け渡しが可能になるため、列の値によるグラデーション表現も容易です。以下のサンプルは、SALの値によって背景色のR(赤)の値を変化させます。
<xsl:attribute xdofo:ctx="block" name="background-color">
  rgb(<xsl:value-of select="round(SAL div 20)" />,255,125)
</xsl:attribute>



実行結果は以下の通りです。




[ Summary ]
The example above shows how to change the background color - in every other row, based on certain conditions.
Use position() mod 2 to switch the row background color.
You can use xsl:rgb.  In the last example, background color is determined at runtime based on SAL.  See the last figure.  It's full color.

2011/02/24

曜日の算出 (Determine day of the week)

BI Publisherでは、テンプレート上で曜日を算出する関数(Excelのweekday関数のようなもの)は提供されていません。
データソース側での対応(曜日データの追加)が可能であればすぐに解決しますが、外部連携ファイルなど、仕様変更の難しいケースではロジックを手組みする必要があります。参考まで、サンプルを作成しました。
※例では'1905-01-01'を基準日としています。これは扱うデータがすべて1905年以降のデータであるという前提の定義です。基準日は、扱うデータよりも前の日付で、日曜日であれば同じ結果が得られます。

サンプルソースは以下の通りです。
2011-02-20 (SUN): <?xdoxslt:date_diff('d', '1905-01-01', '2011-02-20', $_XDOLOCALE, $_XDOTIMEZONE) mod 7?>
2011-02-21 (MON): <?xdoxslt:date_diff('d', '1905-01-01', '2011-02-21', $_XDOLOCALE, $_XDOTIMEZONE) mod 7?>
...
2011-02-26 (SAT): <?xdoxslt:date_diff('d', '1905-01-01', '2011-02-26', $_XDOLOCALE, $_XDOTIMEZONE) mod 7?>



実行結果は以下の通りです。曜日を1(日曜日)~7(土曜日)の値で取得できます。




以下の例では、PROC_DATEが月曜日の場合にメッセージを表示します。
<?if:(xdoxslt:date_diff('d', '1905-01-01', PROC_DATE, $_XDOLOCALE, $_XDOTIMEZONE) mod 7)=1?>
  今日は月曜日です。- Today is Monday.
<?end if?>


サンプルを作成してみたものの、日付に関わるロジックはやはりデータソース側で対応する方が効率がよいかもしれません。


[ Summary ]
As far as I checked, BI Publisher does not provide date functions to determine day of the week so far (Excel "weekday()" function like).
The example shows how to get the index (0 to 6).
The value '1905-01-01' is static.  This value should be Sunday, and it have to be earlier than the data that you manage.


I suppose this kind of logic should be handled in data source (program) side...





更新履歴

・2011-03-01: タイトルを修正



2011/02/23

バースティング その3 (Bursting part3)

今回はscott.emp表をjob列およびdeptnoで分割し、deptno毎のフォルダに配置します。バースティング設定の、「分割」と「配信元」の指定が異なるパターンの検証です。


【3. scott.emp表を、部門(deptno)毎、職種(job)毎にファイル出力】
データソースは以下の通りです。
select empno, ename, job, mgr, hiredate, sal, comm, deptno
  from emp
 order by deptno, job, empno


バースティングの設定は以下の図の通りです。


「分割」「配信元」にそれぞれjob, empnoが指定されている点、および配信定義SQLの下線部が変更されています。
select empno                  as key,
       'template1'            as template,
       'RTF'                  as template_format,
       'ja-JP'                as locale,
       'PDF'                  as output_format,
       'FILE'                 as del_channel,
       'c:\workspace\dept_' || to_char(deptno, 'fm00')
                              as parameter1,
       job || '.pdf'          as parameter2
  from emp

今回は配信定義にdeptno, jobが含まれています。deptnoとjobを特定するには各empnoを特定しなければならないため、「配信元」およびkey列にはempnoを指定します。
また、今回のように複数の列(deptno, job)で分割する場合、データソースのorder byの指定順が後ろの列を「分割」に指定すると意図した結果が得られるようです(empnoは分割対象ではないので除外)。

実行結果は以下の通りです。各部門のディレクトリにjobで命名されたファイルが出力されます。




なお、以下の設定でも同等の結果を得ることができます。

データソース:
select empno, ename, job, mgr, hiredate, sal, comm, deptno
  from emp
 order by job, deptno, empno


バースティングの設定:



今回の例におけるバースティングの動作概念は以下の通りです。

(*1) データソースは「分割」キーのjobの切り替わりのタイミング(異なる値が現れる箇所)で内部的に分割される。
(*2) 配信定義一覧はデータソースの分割箇所を引き継ぐ。
(*3) 分割の単位でファイルが出力される。


以上でバースティングの機能検証、および使用方法の確認を終えます。



[ Summary ]
In the examples above, Split by and Deliver by are set different.  scott.emp is divided into files by JOB and DEPTNO.


1st example:  
Data source and bursting property is shown in the first SQL and in the first figure.  Because BIP needs to determine DEPTNO and JOB in the list of delivery method for each record, you have to set EMPNO for Deliver by and key column.
When you split data with columns, you should set the last order by column of the data source (Note: EMPNO in the example is not split key, so that we can ignore it).
The bursting results are shown in the command prompt figure and the following PDF images.


2nd example:
You can get similar result with the second example.  order by of the data source, Split by and file name definition are changed.


The overall idea is in the last figure.


(*1) BIP divides the source data along the Split by setting.  i.e. BIP reads JOB column from the top, and put a mark when it encounters different value.
(*2) The list of delivery method takes over the source data with marked points.
(*3) BIP unloads data grouped by Split by setting.

2011/02/22

バースティング その2 (Bursting part2)

前回に引き続き、BI Publisher のバースティングの機能および使用方法について検証します。
今回はscott.emp表をdeptnoで分割・配信します。



【2. scott.emp表を、部門(deptno)毎にファイル出力】
データソースは前回と同一ですが、ソート順に注意する必要があります。データソースのソート順と「分割」の指定は常に合わせる必要があります。これらが一致していない場合、意図した出力結果が得られません。

select empno, ename, job, mgr, hiredate, sal, comm, deptno
  from emp
 order by deptno, job, empno

バースティングの設定は以下の図の通りです。


「分割」「配信元」にそれぞれdeptnoが指定されている点、および配信定義SQLの下線部が変更されています。

select distinct
       deptno                 as key,
       'template1'            as template,
       'RTF'                  as template_format,
       'ja-JP'                as locale,
       'PDF'                  as output_format,
       'FILE'                 as del_channel,
       'c:\workspace'         as parameter1,
       to_char(deptno, 'fm00') || '.pdf'
                              as parameter2
  from emp

今回は配信定義が各deptno毎に存在すればよいため、配信定義のSQLにdistinctを指定します(今回のサンプルでは、distinctは指定しなくても問題なく動作しますが)。
また、「key」列は「配信元」とマッチングさせるため、deptnoを設定します。
出力されるファイルの命名についても、deptnoを設定します。これにより、deptnoで「分割」されたデータが各ファイルに分かれて保存されます。



実行結果は以下の通りです。3つのファイル「10.pdf」「20.pdf」「30.pdf」に、それぞれのdeptnoに応じたレコードが出力されます。




今回の例におけるバースティングの動作概念は以下の通りです。


(*1) 配信定義の一覧は、今回のサンプルでは3パターンのみ。したがって、distinctを指定して配信定義を集約。
(*2) emp表の各レコードは「配信元」で指定された列の値を基に配信定義のKEY列を検索し、定義情報を取得する。今回のサンプルでは1つの配信定義が複数のデータに対応する。
(*3) 配信定義に従ってデータが生成される。


次回は、「分割」と「配信元」の設定が異なるパターンを検証します。


[ Summary ]
This time, scott.emp is bursted into three files - 10.pdf, 20.pdf and 30.pdf as shown in the second figure.
Bursting property is shown in the first figure.
Data source is same as the last example, but please notice the order by clause.  Sort order needs to match with bursting property (underlined in the first SQL).
The last figure explains overall idea of the sample bursting.

(*1) The list of delivery methods contains three (deptno) patterns.  Distinct setting reduces and simplifies the list.

(*2) This time, more than one record refer to each delivery method in the list.
(*3) BIP unloads data following each delivery methods.

2011/02/19

バースティング その1 (Bursting part1)

今回から数回に分けて、BI Publisher のバースティングの機能および使用方法について検証します。バースティングは国内事例および情報量も少なく、あまり使用されることのない機能ですが、要件にさえ合致すればレポート生成・配信の構築工数を大幅に低減させることができる機能です。

詳細については以下のマニュアルが参照可能です。
http://download.oracle.com/docs/cd/E17159_01/doc/bi.1013/b51053/T518230T518233.htm#enableburst


第一回目となる今回は、シンプルな例として、以下の要件を設定します。
  • scott.emp表を、個々人(empno)毎にファイル出力

【0.事前準備】
サンプルの出力結果をわかりやすくするため、オリジナルのscott.emp表にデータを3行追加しました。
データソースに設定するSQLは以下の通りです。
select empno, ename, job, mgr, hiredate, sal, comm, deptno
  from emp
 order by deptno, job, empno

レポートの出力結果は以下の通りです。9000番台の3名が今回のサンプルで追加した行です。


また、ファイルの出力先として、BIPサーバ上に以下のディレクトリを作成しました





【1. scott.emp表を、個々人(empno)毎にファイル出力】
まず、各レコードを1ファイルに1行ずつ出力します。emp表には15名のレコードが格納されているので、合計15ファイルが出力されることになります。

バースティングの設定は以下の通りです。



「分割」および「配信元」ともにempnoを設定します。
「SQL問合せ」では、配信定義をSQLで表記します。詳細な定義は上述のマニュアルを参照して下さい。


設定
説明
key
empno
出力データと配信定義のマッチングを行うキーを定義します。
配信元と合致させる必要があります。
template
template1
使用するテンプレートを設定します。作成済みのテンプレートを指定します。
template_format
RTF
テンプレートのタイプを設定します。作成したテンプレートにあわせて設定します。
locale
ja-JP
日本国内での使用であれば通常はja-JPです。
output_format
PDF
今回はPDFを作成します。
del_channel
FILE
今回はファイル出力を行います。
parameter1
c:\workspace
del_channelで「FILE」を指定した場合、ファイルの出力先ディレクトリを指定します。
parameter2
to_char(empno, 'fm0000') || '.pdf'
del_channelで「FILE」を指定した場合、ファイル名の命名定義を指定します。


上記設定でバースティングを実行します。実行後、以下のように 「to_char(empno, 'fm0000') || '.pdf'」の定義に従って命名された15個のファイルが「c:\workspace」に出力されます。



各PDFには1行ずつレコードが出力されています。





今回の例におけるバースティングの動作概念は以下の通りです。ポイントは配信定義の一覧がランタイムで生成されることと、「配信元」で指定された列で配信定義一覧の「key」列が検索される点です。

(*1) バースティング定義のSQLが実行され、配信定義の一覧が内部的に作成される
(*2) emp表の各レコードは「配信元」で指定された列の値を基に配信定義のKEY列を検索し、定義情報を取得する
(*3) 配信定義に従ってデータが生成される。





次回はscott.emp表を部門(deptno)毎にファイル出力します。


[ Summary ]
The example above shows how to burst scott.emp into employee individual files - 1 record in each PDF.
Bursting property is shown in the third figure.  In this example, Split by and Deliver by are same.
The last figure explains overall idea of the sample bursting.

(*1) BIP extracts the Bursting property SQL, and generates the list of delivery methods.
(*2) Each record in emp table looks for the KEY column in the list by its Deliver by column.  Then it gets its own delivery method.
(*3) BIP unloads data following each delivery methods.

2011/02/09

PDF出力でのフォント・マッピング (Font Mapping)


Oracle BI PublisherでPDFを出力する際のフォント・マッピングの設定方法を説明します。
ここではWindowsをベースに、使用頻度の高いと思われるMS明朝およびMSゴシックをマッピングする例を説明します。
※フォント・マッピングを適用しない場合、デフォルトでゴシック系(Arial)フォントで出力されます。



【1. JAVA_HOMEの特定】
フォント・マッピングに使用するフォントは事前に%JAVA_HOME%/jre/lib/fontsにコピーしておく必要があります。対象となるJAVA_HOMEは、使用しているAPサーバの起動時に指定されているパスを確認して下さい。


参考まで、Windowsの標準構成で、デフォルトのOC4Jを使用している場合は以下のディレクトリが該当します。
C:\Program Files\Java\jdk1.6.0_16\jre\lib\fonts

※「Start OC4J」のアイコンで呼ばれる「oc4j.cmd」の中を参照して下さい。




【2. フォントのコピー】
c:\Windows\Fontsディレクトリから、以下のファイルをコピーします(他のフォントを使用する場合には、適宜フォントファイルをコピーして下さい)。
・msmincho.ttc (明朝)
・msgothic.ttc (ゴシック)



【3. フォント・マッピングの設定】
各レポートの「構成」、または「管理」タブから「フォント・マッピング」を選び、「フォント・マッピングの追加」ボタンを押します。フォント・マッピングの設定画面が開きます。
「ターゲット・フォント」コンボボックスに、先ほどコピーしたファイルが現れていることを確認してください。






フォント・マッピングの設定画面にて、「ベースフォント」および「TTC番号」を指定します。
msmincho.ttcおよびmsgothic.ttcには、固定幅およびプロポーショナルのフォントがグループ化されており、それぞれTTC番号0(ゼロ)に固定幅が割り当てられています。
また、TTC番号1はプロポーショナルが割り当てられています。
したがって、フォントの選択は以下の組み合わせで指定することになります。
フォントターゲット・フォント(ファイル名)TTC番号
MS 明朝msmincho0
MS P明朝msmincho1
MS ゴシックmsgothic0
MS Pゴシックmsgothic1


以上で作業は終了です。任意のRTFテンプレートで「MSゴシック」「MS明朝」フォントを設定し、PDFを出力して下さい。
※テンプレートビルダーの「プレビュー」ではフォントマッピングの結果は確認できません。テンプレートをアップロードの上、BI PublisherのサーバからPDFを出力する必要があります。


その他のフォントやボールドへの対応も可能です。
以下の例では、出版物で一般的な「標準フォント:明朝体、太字/強調フォント:ゴシック体」の設定で出力しています。元のテンプレートでは全て「MS P明朝」で作成されていますが、PDFの出力結果ではボールド部分が「MS Pゴシック」で出力されています。

RTFテンプレート:すべて「MS P明朝」で作成



結果PDF:ボールド部分が「MS Pゴシック」で出力されている



上記のサンプル出力の設定は以下の通りです。





フォント・マッピングに関するマニュアルは以下を参照して下さい。
http://download.oracle.com/docs/cd/E17159_01/doc/bi.1013/b51053/T518230T522345.htm#4538355

※フォント・マッピングを行ったPDFを不特定多数に配布する際には、フォントのライセンスに十分注意してください。


[ Summary ]
You need to copy font files onto %JAVA_HOME%/jre/lib/fonts.  Then you will see the font in "Target Font" combo box.

画像の表示(URLによる画像の動的切替) (swiching images by URL)

レコードの値に応じて、画像の表示を動的に切り替える方法を説明します
以下の例では、EMPNOに応じて画像(顔写真)が切り替わっています。





【画像の準備】

今回はBIPのアプリケーションディレクトリに以下の画像ファイルを直接配置しました。ファイル名はEMPNOに対応しています(****部分)。
C:\OracleBI\oc4j_bi\j2ee\home\applications\xmlpserver\xmlpserver\emp****.jpg

※「http://windows2003srv:9704/xmlpserver/emp7458.jpg」等として画像ファイルを取得する環境となります。



【図の挿入】
Wordのメニュー「挿入→図→ファイルから」を選択し、ダミーの図を取り込みます(シェイプではなく、図を挿入する必要があります)。

ダミーの図のサイズは、実際に表示する画像とサイズを合わせておくことをお勧めします。リサイズも可能ですが、レイアウトのずれやリサイズ後の画像のつぶれなどに手間が割かれずに済みます。



【表示する画像の指定】
図のプロパティで「Web」タブを選択します。「代わりに表示する文字列」欄に、EMPNOに対応した画像ファイル名が得られる様、指定します。今回の設定は以下の通りです。
url:{concat('http://windows2003srv:9704/xmlpserver/emp', EMPNO, '.jpg')}




以上で作業は終了です。



【補足1:ファイル名の指定】
画像ファイルの指定で、ローカルのファイル名を直接指定することもできます。以下の書式を使用します。スラッシュの数に注意してください。
url:{'file:///C:/image/emp7458.jpg'}

正式にサポートされる動作かは不明ですが、実際には以下のようにファイル名のみを記入しても表示されます。Windows環境では、スラッシュではなく「¥」でも動作しました。
url:{'C:/image/emp7458.jpg'}
url:{'C:\image\emp7458.jpg'}



【補足2:画像のレイアウト】
手元の環境で検証した限りでは、行のデータを基に(行毎に)画像を切り替える場合、画像のレイアウトに「前面」「背面」は選択できない仕様のようです。「前面」を指定した場合、表示される画像ファイルが切り替わらず、1レコード目の画像がすべての行に繰り返し表示されてしまいます。



【補足3:画像がない場合の対応】
指定された画像ファイルの存在を判定する方法は無いようです。画像が存在することは運用で保証する必要があります。
回避策としては、データソース側に画像の有無をフラグで定義する方法が考えられます(フラグによる表示切り替えで「画像がありません」というメッセージ(または「Now Printing」の画像)を表示する実装)。


[ Summary ]
BIP can get images from outside of the template on its runtime.

1) Put a picture on the RTF.  Note: Autoshape does not work as placeholder.
2) Open "Web" tab on the picture property dialog.  Set "Alternative Text" as below:
url:{concat('http://windows2003srv:9704/xmlpserver/emp', EMPNO, '.jpg')}

File system is supported.  Note that there are three slashes after "file:".
url:{'file:///C:/image/emp7458.jpg'}

I'm not sure if it's supported or not though, the formulas below also work.
url:{'C:/image/emp7458.jpg'}
url:{'C:\image\emp7458.jpg'}

2011/02/08

画像の切り替え (swiching images)

BI Publisherで動的に画像を切り替える方法を説明します。
以下のサンプルでは、SAL列の値によって右端の列の画像(矢印)を切り替えています。

【IFフィールドの設定】
画像の表示/非表示の切り替えはブロック単位のIFフィールドを使用します。今回使用したRTFテンプレートは以下のように設定されています。


切り替えに関わる設定は「Performance」列のフィールドに記載されています。それぞれの内容は以下の通りです。
[if-1]: <?if:SAL>=2000?>
[if-2]: <?if:SAL>=1000 and SAL<2000 ?>
[if-3]: <?if:SAL<1000 ?>
[eif]:  <?end if?>



【図の配置について】
テンプレートの作成においては画像(またはシェイプ)とIFフィールドの位置関係が厳密に問われます。
精緻な配置は手間がかかるため、「図の書式設定」または「オートシェイプの書式設定」ダイアログにて「行内」のレイアウトを選択し、左右位置はインデントと空白文字で調整することをお勧めします。これにより、実作業における手間(トライ&エラー)を減らすことができます。
今回の例では、「Performance」列のインデントと、矢印の前にスペースを1つ入力することで位置を調整しています。



【図の配置について:補足】
レイアウトに「行内」ではなく「前面」などを選択した場合にはIFフィールドと画像の位置関係に注意が必要です。具体的には、画像の左上の頂点(Top-Left)がifフィールドよりも下に位置しなければなりません。
以下の例では、1番目と2番目は表示が切り替わりません。3番のみが意図した通りに表示が切り替わります。
※赤い線が画像の境界です。





今回の元ネタ: より詳細なサンプルがあります。
http://blogs.oracle.com/xmlpublisher/2008/08/competent_shapes_1.html


次回は表示する画像の動的な切り替えを検証します。



[ Summary ]
If you want to switch images with data, see the second figure.  The first figure shows the result.  This sample switches three auto-shapes (green, gray, and red).  The settings are:
[if-1]: <?if:SAL>=2000?>
[if-2]: <?if:SAL>=1000 and SAL<2000 ?>
[if-3]: <?if:SAL<1000 ?>
[eif]:  <?end if?>

You need to put shapes exactly between each "if" and "end if".  To avoid irritation, "In line with text" layout option is recommended.


2011/02/04

連続する値の表示を抑制する方法 (Suppress duplicated values)

一覧の印刷において、列の値が連続する場合には表示を抑制したい、という要件があります。
以下の例の「Dept#」列の様な出力イメージです。






BI Publisherを使用する場合、この要件に対しては、2つの実装方法が考えられます。
  1. SQLで実装(データソースがSQLの場合のみ)
  2. テンプレートで実装
それぞれの実装方法を順に説明します。



【1. SQLで実装】
上図の様な出力をSQLで実装するには、SQLの集計関数LAGとDECODEを組み合わせて使用します。
具体的なSQLは以下の通りです。

select deptno,
       decode(lag(deptno)over(order by deptno), deptno, null, deptno) as deptno_disp,
       empno,
       ename,
       job,
       mgr,
       to_char(hiredate, 'yyyy-mm-dd') as hiredate,
       sal,
       comm
  from scott.emp
 order by
       deptno,
       empno
BI Publisher側では、レコードを順に出力するだけで事足ります。
なお、ソート列とLAGの対象とする列が異なる場合にはPARTITION句の設定などが必要になります。参考まで、集計関数LAGの使用方法についてはマニュアルまたは以下のURLを参照してください。
http://oracle.se-free.com/dml/0601_lag.html



【2. テンプレートで実装】
SQLではなく、テンプレート側で対応するには、XSL関数preceding-siblingを使用します。以下のURLが参考になります。
http://winrichman.blogspot.com/2008/10/previous-next-element.html

しかしながら、単純に以下の様に指定しただけでは先頭行のDEPTNO(今回の例では”10”)が表示されません。
<?if:preceding-sibling::ROW[1]/DEPTNO!=DEPTNO?><?DEPTNO?><?end if?>



そこで、OR条件で1行目の判定を加えます。これにより、先頭行には常に値が出力されます。
<?if:preceding-sibling::ROW[1]/DEPTNO!=DEPTNO or position()=1?><?DEPTNO?><?end if?>

SQL側には何も変更を加える必要はありません。



【まとめ】
上述の通り、SQLおよびテンプレートのどちらでも、容易に実装が可能です。
個人的には、「”データの抽出”と”出力書式”を分離するべき」という観点から、データソースがSQLの場合でも、テンプレートでの対応が望ましいと考えます。SQLで対応した場合、そのデータソースは異なるテンプレートには使用できなくなる可能性があるためです。



[ Summary ]
On the first figure, the "Dept #" value appears only on the first record of each group.  You have two ways to achieve this with BIP.
1. SQL (when datasource is SQL)
  Use LAG and DECODE function.  See the SQL above (underlined part).

2. RTF template
  Use "preceding-sibling" and "position" as below:
<?if:preceding-sibling::ROW[1]/DEPTNO!=DEPTNO or position()=1?><?DEPTNO?><?end if?>

You can get more info of "preceding-sibling"
http://winrichman.blogspot.com/2008/10/previous-next-element.html

2011/02/03

日付型パラメータのデフォルト値 その2 (Date function, part 2)

BI Publisher の日付型パラメータに設定する関数の続きです。
前回のSYSDATEの他、 以下の関数が定義されています。
  • FIRST_DAY_OF_MONTH() →当月の初日(1日)
  • LAST_DAY_OF_MONTH() →当月の末日
  • FIRST_DAY_OF_YEAR() →当年の初日(1月1日)
  • LAST_DAY_OF_YEAR() →当年の末日(12月31日)
「前月の末日」を指定する場合は以下の用に指定します。
{$FIRST_DAY_OF_MONTH() - 1$}

残念ながら、一般的な月次バッチで有用となる「前月の初日」を指定する方法は今のところ無いようです(以下の元ネタURL参照)。このあたり、製品仕様の詰めが甘いです。

前月初日~末日でのデータ処理を行う場合には、パラメータで「FIRST_DAY_OF_MONTH()-1」のみを受け渡し、レポートのSQLで当該パラメータを trunc({パラメータ}, 'MONTH')することで対応するのが現状での解となりそうです。


 元ネタ:
http://forums.oracle.com/forums/thread.jspa?threadID=1086737

マニュアル(新機能ガイド)はこちら:
http://download.oracle.com/docs/cd/E17159_01/doc/bi.1013/b54796/toc.htm#BABGDEAC




[ Summary ]
Not only SYSDATE, BIP provides several date functions such as FIRST_DAY_OF_MONTH.
Unfortunately, there are no FIRST_DAY_OF_PREVIOUS_MONTH so far.

Workaround: use "FIRST_DAY_OF_MONTH()-1" (the last day of previous month), and somehow get "trunc({parameter}, 'MONTH')" in the report/batch side.

2011/02/02

日付型パラメータにデフォルト値としてSYSDATEを設定する

Publisherで日付型のパラメータを作成する際、当日の日付を動的にデフォルト値に指定したいことがあります。この場合には、パラメータ設定の「デフォルト値」に
{$SYSDATE()$}
を設定することで実現できます。

レポートをスケジュール実行する場合には、
{$SYSDATE() - 1$}
のような指定が可能です。








[ Summary ]
You can use "SYSDATE" in date parameter field. Addition and subtraction operators are supported. See the figure and formula above.