Cognos BI & Analyticsで、PDFやExcel,HTML形式などで、レポートの保存を行う際に、日時のプロンプトを使用していて、常に直近3時間とか、直近数日の結果を自動的に指定して、保存したいという要件が良くあります。
レポート内にフィルターを設定して、期間を固定してしまえばできますが、レポートが固定になってしまうので、今回はEvent Studioを用いた柔軟性のある方法をご紹介します。
レポートイメージ
例としてのレポートのイメージは、こんな感じです。
レポートを実行すると、日時のプロンプトで、From日時とTo日時が選択されるとします。
実装方法
さてこの状態で、直近3時間のデータに絞ってレポート保存したいと思います。
つまり、To日時のプロンプトに「現在時刻」、From日時のプロンプトに「3時間前の時刻」が入れば良いわけです。
まずは、Framework Managerで、以下のように「現在」
次にEvent Studioを開き、「タスクの追加」から「レポートの実行」を追加し、先ほどのレポートを指定します。
オプション:のところで、レポートをPDF保存する指定をしています。
プロンプト値:のところが本題で、pFrom(From日時)のところで、メソッドに「アイテムを使用」を選択し、値に先ほどFMで作成した[3時間前]を置いています。
pToも同様に[現在]を置いています。
後はこのEvent Studioのエントリーをスケジュール実行するだけです。
結果のイメージですが、2017/2/8 17:46:04に実行したレポートでは、直近3時間なので、14:47:00のデータも入っています。
2017/2/8 17:47:03に実行したレポートでは、以下の通り14:47:00のデータは入りません。
このようにEvent Studioを使用する事で、レポートの定義を変えなくても、プロンプトの時間指定が柔軟に行えます。
参考までに、以下のデータアイテムをFramework Managerで作成すれば、直近3時間以外にも、色々な指定ができますので、是非ご活用下さい。
本日の最初から
_make_timestamp (
extract ( year,localtimestamp ),
extract ( month,localtimestamp ),
extract ( day,localtimestamp )
)
本日の最後まで
_add_seconds (_make_timestamp (
extract ( year,localtimestamp ),
extract ( month,localtimestamp ),
extract ( day,localtimestamp )
),86399)
昨日の最初から
_make_timestamp (
extract ( year,_add_days ( localtimestamp, -1) ),
extract ( month,_add_days ( localtimestamp, -1) ),
extract ( day,_add_days ( localtimestamp, -1) )
)
10日前
_make_timestamp (
extract ( year,_add_days ( localtimestamp, -9) ),
extract ( month,_add_days ( localtimestamp, -9) ),
extract ( day,_add_days ( localtimestamp, -9) )
)
今月の初日
_make_timestamp (
extract ( year,_first_of_month ( localtimestamp ) ),
extract ( month,_first_of_month ( localtimestamp ) ),
extract ( day,_first_of_month ( localtimestamp ) )
)
今月の最後
_add_seconds ( _make_timestamp (
extract ( year,_last_of_month ( localtimestamp ) ),
extract ( month,_last_of_month ( localtimestamp ) ),
extract ( day,_last_of_month ( localtimestamp ) )
),86399)
先月の初日
_make_timestamp (
extract ( year,_first_of_month ( _add_months ( localtimestamp ,-1))),
extract ( month,_first_of_month ( _add_months ( localtimestamp ,-1))),
extract ( day,_first_of_month ( _add_months ( localtimestamp ,-1)) )
)
先月の最後
_add_seconds ( _make_timestamp (
extract ( year,_last_of_month ( _add_months ( localtimestamp ,-1))),
extract ( month,_last_of_month ( _add_months ( localtimestamp ,-1))),
extract ( day,_last_of_month ( _add_months ( localtimestamp ,-1)) )
), 86399)