2011/08/11

Windowsにおけるディスクの稼働率 (Monitor the disk usage on Windows)

バースティング性能 その3」にて「別途説明」としたまま%Idle Timeの説明を忘れていました。

Windowsのパフォーマンスモニタでのディスクの稼働状況を見る場合、負荷のかかった状態においてPhysical Disk%Disk Timeの値がしばしば 100% を超えます。このため、Microsoftは以下のKnowledge Baseにて、「%100 - %Idle Time」の値を使用するようにガイドしています。
パフォーマンス MMC で %Disk Time の値が 100% を超える
http://support.microsoft.com/kb/310067/ja

残念ながら、「%100 - %Idle Time」で使用率を求めた場合でも高負荷時に統計情報が乱れることはあります。このため、Knowledge Baseの原文では以下の3つの値でディスクの遅延を監視するよう、記載が変更されています。
  • Avg. Disk sec/Read
  • Avg. Disk sec/Write
  • Avg. Disk sec/Transfer
% Disk Time may exceed 100 percent in the Performance Monitor MMC
http://support.microsoft.com/kb/310067/en-us

原文と日本語訳にずれがある状態です。とは言え、%100 - %Idle Timeで得られる情報は凪から中程度の負荷までは問題なく使用できると考えられますので、目的に応じて監視項目を使い分けてください。



[Summary]
When you monitor the disk usage on Windows OS, the easy way is to monior "%100 - %Idle Time" (not %Disk Time).
More accurate way is, monitoring the disk latencies with the following values.
  • Avg. Disk sec/Read
  • Avg. Disk sec/Write
  • Avg. Disk sec/Transfer



For more details, please refer to the Microsoft Knowledge Base:
% Disk Time may exceed 100 percent in the Performance Monitor MMC
http://support.microsoft.com/kb/310067/en-us

2011/08/10

ページ数のリセット その2 (Resetting page number Part 2)


セクションの切り替えによるページ番号のリセットについて、OTNに質問されていました。
http://forums.oracle.com/forums/thread.jspa?threadID=2260685

紹介されている例では、forループに@sectionを設定することでページ番号をリセットします。emp表のdeptno毎にセクションを区切って表示する場合、構文は以下の通りです。
<?for-each-group@section:ROW;./DEPTNO?>


過去に「ページ数のリセット」にて initial-page-number を使用したページ番号の切り替えを説明しましたが、グループの単位と改ページ・セクションの単位が同じ場合には、こちらの方法がよりシンプルに制御できます。


[Summary]
With @section, you can initialize the page number on the start of each group.
<?for-each-group@section:ROW;./DEPTNO?>


OTN:
http://forums.oracle.com/forums/thread.jspa?threadID=2260685


Also, please refer to the following post.  It explains  initial-page-number.
Resetting page number

2011/08/08

to_char による日付の翻訳 (Multiple language support with to_char)

データの翻訳について、今回はBI Publisherではなく、Oracle DBに実装されているto_charについて日付→文字列変換の例を示します。

to_charの出力結果はnls_date_languageの設定により変化します。システムの環境に準じる場合には以下の構文を使用します。
select to_char(sysdate, 'yyyy"年" month dd"日" day') as col1  from dual;

to_charの実行時にnls_date_languageを指定することもできます。
select to_char(sysdate, 'yyyy month dd day', 'nls_date_language=''american'' ') as col1 from dual
union all
select to_char(sysdate, 'yyyy month dd day', 'nls_date_language=''japanese'' ') as col1  from dual
union all
select to_char(sysdate, 'yyyy month dd day', 'nls_date_language=''hindi'' ') as col1  from dual
union all
select to_char(sysdate, 'yyyy month dd day', 'nls_date_language=''arabic'' ') as col1  from dual
union all
select to_char(sysdate, 'yyyy month dd day', 'nls_date_language=''spanish'' ') as col1  from dual

※DBのキャラクタセットがunicodeでない場合はto_ncharを使用します。
実行結果は以下の通りです。
Figure 1: nls_date_language



また、和暦その他の暦年を使用する場合にはnls_calendarを設定します。この際、nls_date_languageも併せて指定しないとバッファあふれのエラー(ORA-01801)が発生する場合がありますので注意してください。
和暦の場合は元号を表すee(またはe)を書式に記載します。
select to_char(sysdate, 'yy"年" month dd"日" day', 'nls_calendar=''japanese imperial'' nls_date_language=''japanese'' ') as col1  from dual
union all
select to_char(sysdate, 'eeyy"年" month dd"日" day', 'nls_calendar=''japanese imperial'' nls_date_language=''japanese'' ') as col1  from dual
union all
select to_char(sysdate, 'yyyy month dd day', 'nls_calendar=''arabic hijrah'' nls_date_language=''arabic'' ') as col1  from dual
union all
select to_char(sysdate, 'yyyy month dd day', 'nls_calendar=''english hijrah'' nls_date_language=''american'' ') as col1  from dual
union all
select to_char(sysdate, 'yyyy month dd day', 'nls_calendar=''thai buddha'' nls_date_language=''thai'' ') as col1 from dual

実行結果は以下の通りです。
Figure 2: nls_calendar



【参考】
OTNのスレッドが参考になります。
http://forums.oracle.com/forums/thread.jspa?threadID=180322


[Summary]
The third parameter of to_char manages NLS.  You can translate date value with SQL.  Sample scripts are shown above.
Note that you should not use nls_calendar alone.  To avoid ORA-01801, nls_date_language should accompany with the calendar setting.


OTN:
http://forums.oracle.com/forums/thread.jspa?threadID=180322

2011/08/03

レポートの翻訳 (Multiple Language Support with XLIFF)

BI Publisher は多言語のサポートはもちろん、レポートの翻訳機能も備えています。
従来のプログラミングでは、言語の切り替えを実装するためにリソースファイル(言語定義ファイル)を定義し、実行時に切り替える機能を実装する必要がありましたが、BI Publisher では、BI Publisher が自動で生成する定義ファイルに置き換える(翻訳する)単語を記載するだけで同等の要
件を満たすことができます。

大まかな流れは以下のブログに動画で説明されています。


実際のプロジェクトではほぼ確実に、各顧客や従業員または部門にファイルを一斉配信する際、つまりバースティングにおいて動的にレポートロケールを指定したいという要件が上がると考えられます。ここではこの要件に対応する方法を検証します。

【事前準備:データ】
今回は部門毎にレポートロケールが異なるという定義とします。具体的には、以下のようにscott.dept 表に列を追加し、ロケールを指定する文字列を設定します。
部門番号30が日本語、30がアラビア語の設定です。
alter table dept add (locCode varchar2(100));
update dept set locCode = 'en_US' where deptno = 10;
update dept set locCode = 'ja_JP' where deptno = 20;
update dept set locCode = 'ar_EG' where deptno = 30;
update dept set locCode = 'en_US' where deptno = 40;


【事前準備:XLIFF】
翻訳の定義ファイルを編集します。XLIFF(eXtensible Localization Interchange File Format)と呼ばれるXML形式です。
日本語とアラビア語のXLIFFファイルをアップロードします。アップロード後、以下の様に追加の翻訳用ロケールが表示されます。
Figure 1: Translation locale setting


【事前準備:バースティング定義】
バースティング定義では、分割及び配信キーにempnoを指定します。SQL問い合わせの設定は以下の通りです。
select
       empno              as key,
       'Layout1'          as template,
       dept.loccode       as locale,
       'RTF'              as template_format,
       'PDF'              as output_format,
       'FILE'             as del_channel,
       'false'            as save_output,
       'c:\workspace\'    as parameter1,
       to_char(emp.empno,'fm00000') || '_report.pdf'
                          as parameter2
  from emp, dept
 where dept.deptno = emp.deptno
 order by emp.empno

上記のSQLでは、ロケールをdept.loccodeから取得することで、各empnoに応じたロケールを設定します。出力の結果は以下の通りです。部門に応じた翻訳がなされていることが確認できます。

Figure 2: Report in English (deptno = 10, en_US)

Figure 3: Report in Japanese (deptno = 20, ja_JP)

Figure 4: Report in Arabic (deptno = 30, ar_EG)


なお、マニュアルは以下のURLを参照してください。
http://download.oracle.com/docs/cd/E24001_01/bi.1111/b63038/T527073T559221.htm

レポート、データモデルおよび結果のPDFファイルはこちらからダウンロードできます。

[Summary]
BI Publisher supports multiple language.  Also, you can easily translate your report with editing XLIFF (eXtensible Localization Interchange File Format) file.

The following blog post explains overall process.  Please see the movie.


In most of the cases, you would be asked to set appropriate report locale for each recipient.
This post explains how to burst report with changing the report locale dynamically.

[Data]
Add a column on scott.dept that stores the report locale.  In the sample below, dept# 10 is set to English, dept# 20 is Japanese, and dept# 30 is Arabic.

alter table dept add (locCode varchar2(100));
update dept set locCode = 'en_US' where deptno = 10;
update dept set locCode = 'ja_JP' where deptno = 20;
update dept set locCode = 'ar_EG' where deptno = 30;


[XLIFF]
Define the translation file.  create XLIFF files and upload.  See Figure 1.


[Bursting settings]
Set empno for Deliver by and Split by.  The SQL definition is as follows.  This SQL gets the report locale for each empno from dept table (dept.loccode).
select
       empno              as key,
       'Layout1'          as template,
       dept.loccode       as locale,
       'RTF'              as template_format,
       'PDF'              as output_format,
       'FILE'             as del_channel,
       'false'            as save_output,
       'c:\workspace\'    as parameter1,
       to_char(emp.empno,'fm00000') || '_report.pdf'
                          as parameter2
  from emp, dept
 where dept.deptno = emp.deptno
 order by emp.empno

The report (result) is shown in Figure 2 (in English), 3 (in Japanese) and 4 (in Arabic).


For more details, please refer to the manual below.

The report definition, data model and PDF results are available here.