Cognos BIでレポートを別フォルダにコピーして、編集して、元の場所に戻してリリース、という運用をする事は多いと思います。
Cognos経験者の方でも意外と認識されていない、レポート間のドリルスルーの設定の扱いと、コピー機能の関係について、簡単な検証をしてまとめてみました。
動きを認識しておくと、レポートの改修時のミスを減らす事ができる、地味だけど大事な知識なので、ちらっと読んで記憶の片隅に留めておいて頂ければと思います。
ちなみに、ドリルスルーとは、Cognosのレポートの中で、グラフとかセルとかボタンをクリックすると、別のレポートに遷移する機能です。ドリルダウン(詳細化)とは違いますのでご注意下さい。
ソース・レポート →(ドリルスルー)→ ターゲット・レポート
環境
共有フォルダ > Qiita > DrillThrough > Dir1 の下に、SourceReport(ドリルスルー元)、TargetReport(ドリルスルー先)を作成し、ドリルスルーを定義しました。
ケース1:フォルダ単位(Dir1)でコピーした場合
コピー方法
フォルダのメニューの「その他」から
「コピー」機能でDir1フォルダごとコピーした場合
「FolderCopy」という名前のフォルダにコピーしました。
結果
※レポート中にReportPath()関数を仕込み、レポートのパスを表示しています。
SourceReportのパス表示:
/content/folder[@name='Qiita']/folder[@name='DrillThrough']/folder[@name='FolderCopy']/report[@name='SourceReport']
ドリルスルーした先のTargetReportのパス表示:
/content/folder[@name='Qiita']/folder[@name='DrillThrough']/folder[@name='FolderCopy']/report[@name='TargetReport']
フォルダコピーした先のTargetReportにドリルスルー遷移できました。
望ましい動きですね。
ケース2:その他メニューの「コピー」から、レポートを1個1個コピーした場合
コピー方法
レポート単位で「その他」メニューから、
「コピー」した場合、
コピー先は、「ReportCopy」というフォルダにしています。
Targetレポートも同じ方法でコピーしています。
結果
SourceReportのパス表示:
/content/folder[@name='Qiita']/folder[@name='DrillThrough']/folder[@name='ReportCopy']/report[@name='SourceReport']
ドリルスルーした先のTargetReportのパス表示:
/content/folder[@name='Qiita']/folder[@name='DrillThrough']/folder[@name='Dir1']/report[@name='TargetReport']
ドリルスルーした先のTargetReportは、コピー前のDir1上のものに遷移してしまっているのがわかります。
これは困ったパターンですね。
ケース3:コピーアイコンで、レポートを1個1個コピーした場合
コピー方法
レポートのチェックボックスにチェックを入れ、コピーアイコンでコピーした場合
コピー先は、「IconCopyDiff」というフォルダにしています。
Targetレポートも同じ方法でコピーしています。
結果
SourceReportのパス表示:
/content/folder[@name='Qiita']/folder[@name='DrillThrough']/folder[@name='IconCopyDiff']/report[@name='SourceReport']
ドリルスルーした先のTargetReportのパス表示:
/content/folder[@name='Qiita']/folder[@name='DrillThrough']/folder[@name='Dir1']/report[@name='TargetReport']
ドリルスルーした先のTargetReportは、コピー前のDir1上のものに遷移してしまっているのがわかります。
これは困ったパターンですね。
ケース4:コピーアイコンで、レポートを同時コピーした場合
コピー方法
最後に、レポートのチェックボックスを両方チェックして、コピーアイコンでコピーした場合
コピー先は、「IconCopy」というフォルダにしています。
結果
SourceReportのパス表示:
/content/folder[@name='Qiita']/folder[@name='DrillThrough']/folder[@name='IconCopy']/report[@name='SourceReport']
ドリルスルーした先のTargetReportのパス表示:
/content/folder[@name='Qiita']/folder[@name='DrillThrough']/folder[@name='IconCopy']/report[@name='TargetReport']
フォルダコピーした先のTargetReportにドリルスルー遷移できました。
望ましい動きですね。
まとめ
まとめるとこんな感じです
ケース | ドリルスルーのペアが考慮される |
---|---|
1:フォルダ単位(Dir1)でコピー | ○ |
2:その他メニューの「コピー」から、レポートを1個1個コピー | × |
3:コピーアイコンで、レポートを1個1個コピー | × |
4:コピーアイコンで、レポートを同時コピー | ○ |
ドリルスルーのペアが崩れてしまった場合の修正
ソースレポートのレポートXML定義を書き換えるのが一番早いと思います。
「クリップボードにレポートをコピー」すると、
こんな感じにメモ帳に貼り付けるとレポートXML定義が取り出せます。
XML定義の中から、以下の箇所を検索して、
<drillTarget><reportPath path="/content/folder[@name='Qiita']/folder[@name='DrillThrough']/folder[@name='Dir1']/report[@name='TargetReport']">
以下のように正しいパスに置換します。
<drillTarget><reportPath path="/content/folder[@name='Qiita']/folder[@name='DrillThrough']/folder[@name='ReportCopy']/report[@name='TargetReport']">
メモ帳の内容をCtrl+Cでコピーして、「クリップボードからレポートを開く」して、レポートを上書き保存します。
SourceReportのパス表示:
/content/folder[@name='Qiita']/folder[@name='DrillThrough']/folder[@name='ReportCopy']/report[@name='SourceReport']
ドリルスルーした先のTargetReportのパス表示:
/content/folder[@name='Qiita']/folder[@name='DrillThrough']/folder[@name='ReportCopy']/report[@name='TargetReport']
地味な知識ですが、知らないと思わぬ失敗を招きますので、是非覚えておいてもらえればと。