差分
cube
dynamic
Cognos
Incremental

Cognos Dynamic CubeでのCubeデータの差分更新

More than 1 year has passed since last update.

概要

Cognos BIにはDynamic Cubeという、Cognos BIノード上のメモリーに、Cubeの形で集約済みデータを保持しておいて、データソースとして使用できる機能があります。
Dynamic Cubeの内容は以下のマニュアルをご参照頂ければと思いますが、メモリー上にデータを載せる仕組みの常として、データソース上の元データの更新時に、反映に時間がかかる事が多いですが、Dynamic Cubeでは差分更新ができるかと最近質問を受けたので投稿します。

Cognos Dynamic Cubes の概要
https://www.ibm.com/support/knowledgecenter/ja/SSEP7J_10.2.2/com.ibm.swg.ba.cognos.ug_cog_rlp.10.2.2.doc/c_cubingconcepts.html

内容

Dynamic Cubeの場合、元データが「追加」された場合は、Cubeへの差分更新ができる、というのが回答になります。
元データが「削除」や「更新」の場合は、残念ながらDynamic Cubeの再起動が必要です。

検証した画面と共に動きをご説明します。

任意のファクト表とディメンション表を作成。
TIDという列は、どこまで反映されたかの管理するための列で、追加する必要があります。
image.png

とりあえずこの表を元に集約済みのDynamic Cubeを作り、クロス集計として出力しました。
Cube DesignerでDynamic Cubeを作成する際に、プロパティの「トランザクションID」の項目に、このTID列を指定しておく必要があります。
image.png

DBの元表にデータを追加します。
TID列の値は、これまでの他の行に入っていた「1」より大きい数「2」を入れています。
C:>db2 "insert into SA1FACT values('a1','b1','c1','d2',101,102,103,2)"

Cognos Administrationから「インクリメンタル更新データ」を実行します。
image.png

再度レポートを実行すると、表示されるデータが更新されました。
image.png

と、まあ、こんな感じで、TID列を追加しておく、「データの追加」のみへの対応、というレベルなのですが、この制限を理解しておけば、環境によってはちゃんと使う事もできると思います。

また、じゃあこれをJP1などのジョブ管理ツールで、実際にジョブスケジュールして反映とかできるのか、と質問を受ける事もあります。

これは、DCAdmin コマンド行ツールで、コマンドラインから「インクリメンタル更新データ」を呼び出す事ができるので、ジョブ管理ツールとの連携も可能という回答になります。

実際にやってみた結果です。

FACT表に1行追加。
C:>db2 "insert into SA1FACT values('a1','b1','c1','d3',101,102,103,3)"

コマンドラインから、DCAdminツールを用いて、「インクリメンタル更新データ」をコマンドで実行。

C:\Program Files\IBM\cognos\c10_64\bin64>dcadmin.bat -p -s -l "ApacheDS,cogadmin,password" incrementallyLoadCubes SADCube1
Executing command 'incrementallyLoadCubes' on cube(s) [SADCube1]
Finished executing command 'incrementallyLoadCubes' on cube(s) [SADCube1]

SADCube1 : SUCCESS : キューブ "SADCube1" に対するコマンド "incremental cube load
" の実行が成功しました。

再度レポートを実行すると、表示データが更新されています。
image.png

ジョブ管理ツールと連携するためには、エラーハンドリングができるかも重要ですが、DCAdminコマンド実行時のリターンコードは以下の通りで、エラーハンドリングも大丈夫です。

・エラー時は1が返る。

C:\Program Files\IBM\cognos\c10_64\bin64>dcadmin.bat -p -s -l "ApacheDS,cogadmin,password" incrementallyLoadCubes SADCube2
Executing command 'incrementallyLoadCubes' on cube(s) [SADCube2]
Error: XQE-ROL-0002 キューブ "SADCube2" が見つかりません。キューブが Cognos Cont
ent Manager に存在することを確認してください。 : The server did something wrong

C:\Program Files\IBM\cognos\c10_64\bin64>echo %ERRORLEVEL%
1

・正常完了時は0が返る。

C:\Program Files\IBM\cognos\c10_64\bin64>dcadmin.bat -p -s -l "ApacheDS,cogadmin,password" incrementallyLoadCubes SADCube1
Executing command 'incrementallyLoadCubes' on cube(s) [SADCube1]
Finished executing command 'incrementallyLoadCubes' on cube(s) [SADCube1]

SADCube1 : SUCCESS : キューブ "SADCube1" に対するコマンド "incremental cube load
" の実行が成功しました。

C:\Program Files\IBM\cognos\c10_64\bin64>echo %ERRORLEVEL%
0

機能としては簡易的なものなので、どうしても使える環境は限られてしまいますが、要件が合う環境であれば、Dynamic Cubeが差分更新できるというのはメリットが大きいので、是非覚えておいて頂ければと思います。

参考情報

動的キューブ・データの準リアル・タイムの更新
https://www.ibm.com/support/knowledgecenter/ja/SSEP7J_10.2.2/com.ibm.swg.ba.cognos.ug_cog_rlp.10.2.2.doc/c_cog_rlp_nrt_ovw.html