Cognos BI ドリルスルーを含むレポートをコピーする際の注意点

Cognos BIでレポートを別フォルダにコピーして、編集して、元の場所に戻してリリース、という運用をする事は多いと思います。
Cognos経験者の方でも意外と認識されていない、レポート間のドリルスルーの設定の扱いと、コピー機能の関係について、簡単な検証をしてまとめてみました。
動きを認識しておくと、レポートの改修時のミスを減らす事ができる、地味だけど大事な知識なので、ちらっと読んで記憶の片隅に留めておいて頂ければと思います。

ちなみに、ドリルスルーとは、Cognosのレポートの中で、グラフとかセルとかボタンをクリックすると、別のレポートに遷移する機能です。ドリルダウン(詳細化)とは違いますのでご注意下さい。

**ソース・レポート** →**（ドリルスルー）**→ **ターゲット・レポート**

##環境
共有フォルダ ‎> Qiita ‎> DrillThrough ‎> Dir1‬ の下に、SourceReport（ドリルスルー元）、TargetReport（ドリルスルー先）を作成し、ドリルスルーを定義しました。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/70afb4f5-5ebc-0798-79a5-3226806fb032.png)


##ケース１：フォルダ単位(Dir1)でコピーした場合
**コピー方法**
フォルダのメニューの「その他」から
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/52e842b2-32e3-6fd0-4cd0-5a37396ea0eb.png)
「コピー」機能でDir1フォルダごとコピーした場合
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/dd56a9a2-9066-d346-4da7-f53ef4c32842.png)
「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にドリルスルー遷移できました。
**望ましい**動きですね。


##ケース２：その他メニューの「コピー」から、レポートを1個1個コピーした場合
**コピー方法**
レポート単位で「その他」メニューから、
![003.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/38355c0e-9a34-354f-c380-d1e247a3a97c.png)
「コピー」した場合、
![004.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/4fc058ee-3221-19d4-7d30-970ddb608ef7.png)
コピー先は、「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上のものに遷移してしまっているのがわかります。
これは**困った**パターンですね。

##ケース３：コピーアイコンで、レポートを1個1個コピーした場合
**コピー方法**
レポートのチェックボックスにチェックを入れ、コピーアイコンでコピーした場合
![009.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/cf821c0d-2f41-f39c-b033-bfffd4f4a0ff.png)

コピー先は、「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上のものに遷移してしまっているのがわかります。
これは**困った**パターンですね。


##ケース４：コピーアイコンで、レポートを同時コピーした場合
**コピー方法**
最後に、レポートのチェックボックスを両方チェックして、コピーアイコンでコピーした場合
![010.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/fd654bc0-6df2-399e-fd6e-4e9648355e90.png)

コピー先は、「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にドリルスルー遷移できました。
**望ましい**動きですね。


##まとめ
まとめるとこんな感じです

| ケース | ドリルスルーのペアが考慮される|
|:-:|:-:|
| １：フォルダ単位(Dir1)でコピー  | ○  |
| ２：その他メニューの「コピー」から、レポートを1個1個コピー | ×  |
| ３：コピーアイコンで、レポートを1個1個コピー  | ×  |
| ４：コピーアイコンで、レポートを同時コピー  | ○  |

##ドリルスルーのペアが崩れてしまった場合の修正
ソースレポートのレポートXML定義を書き換えるのが一番早いと思います。
「クリップボードにレポートをコピー」すると、
![007.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/9a58b008-4bda-e6d8-0aca-831e10489723.png)

こんな感じにメモ帳に貼り付けるとレポートXML定義が取り出せます。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/ba21281c-d6ca-d806-93a2-42f848a757fa.png)

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でコピーして、「クリップボードからレポートを開く」して、レポートを上書き保存します。
![008.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/5ff0fab0-daf3-91e2-8f19-ee59861ced36.png)

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']

地味な知識ですが、**知らないと思わぬ失敗を招きますので**、是非覚えておいてもらえればと。