LoginSignup
1
0

More than 5 years have passed since last update.

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

Posted at

概要

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0