Cognos のリレーショナルモデルでドリルダウン&ドリルアップを実装

#概要
Cognos BI や Cognos Analyticsでは、ドリルダウン&ドリルアップの動作を実現する時は、Framework Managerでディメンショナルモデル(DMR)を作成する必要があるのが通常です。
DMRとは、Cognosサンプルで言うところの、こんな感じの標準ディメンションを作成する、階層を持ったモデルです。
![015.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/fadf1100-675d-ffac-212c-7b4b32e1f634.png)

しかしながら、このDMRモデルの開発スキルが無い、機能が制限される、扱いにくいなど、様々な理由でDMRモデルを使いたくない時もあります。

そんな時に使える、通常のリレーショナルモデルでドリルダウン&アップ動作を再現させる方法を紹介します。

#動作イメージ
Cognosサンプルでお馴染みの、「製品ライン」「製品タイプ」「製品」で、ドリルダウン&アップしてみようと思います。
レポート実行時の初期表示では、「製品ライン」のみがクロス集計に配置されています。
「アウトドア保護用品」をクリックしてみます。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/15dc825d-e1f0-e657-eab8-5673084bd56d.png)

すると以下のように、「製品タイプ」列が現れ、「アウトドア用保護用品」に紐づく「製品タイプ」のみが表示されている事がわかります。
いわゆるドリルダウンをした動きですが、Cognos標準のドリルダウンとは違います。
Cognos標準のドリルダウンの場合は、ここで「製品ライン」の列は表示されず、「製品タイプ」列のみの表示になります。
とはいえ、むしろこの「製品ライン」も表示されている動きの方が好まれるユーザーも多いと思います。
「救急用具」をクリックします。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/468203ca-6686-c213-c2b2-ffc03bfdaa0c.png)

さらにドリルダウンされ「製品」列が表示されました。
当然「救急用具」に紐づく「製品」です。
ではここで「救急用具」をクリックしてみます。
![003.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/45f57143-45b1-250c-5af4-431ecd849eee.png)

ドリルアップしましたね。
「アウトドア用保護用品」をクリックします。
![004.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/88db9bce-cf32-9365-c6e8-2dbf276a29f3.png)

さらにドリルアップして、最初の「製品ライン」のみの表示に戻りました。
![005.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/106d7c37-b9c7-b06e-9c00-7628ab4dbbe0.png)

さて、どの様に実装しているかですが、見る人が見れば直ぐにわかりますが、ドリルスルーを使っているだけです。

#実装
レポートは実は3つ作成しています。
製品販売レポート：「製品ライン」のみ配置
製品販売レポートL2：「製品ライン」「製品タイプ」を配置
製品販売レポートL3：「製品ライン」「製品タイプ」「製品」を配置
![014.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/9e7c26ab-a8d9-109d-aba1-63f7e864ed7e.png)

**製品販売レポートのイメージ**
「製品ライン」に設定したドリルスルーで、「製品販売レポートL2」を呼び出し、「データアイテムの値」を渡しています。
![006.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/efc3b245-0331-4a9e-3f10-dea968c2adf3.png)

クロス集計のクエリーは以下で、特筆する事は無いです。
![007.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/683c735c-9410-c140-b041-15faa4c13937.png)

**製品販売レポートL2のイメージ**
「製品ライン」に設定したドリルスルー、つまりドリルアップ操作相当は、「製品販売レポート」を呼び出し、何も渡しません。
![008.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/99d73c58-6259-b34b-3f6b-134f0f8f4f2e.png)

「製品タイプ」に設定したドリルスルー、つまりドリルダウン操作相当は、「製品販売レポートL3」を呼び出し、「製品ライン」のために「パラメーター」を渡し、「製品タイプ」のために「データアイテムの値」を渡します。
![009.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/5d1ae208-ecaa-0bb6-829e-e74d7d1034ca.png)

クエリーはこんな感じで、「製品ライン」をパラメーターで受けるためのオプショナルフィルターが設定されています。
![010.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/d5d88d2e-969e-0edd-d310-92f9fa611e9d.png)

**製品販売レポートL3のイメージ**
「製品ライン」に設定したドリルスルー、つまり一挙に最初までドリルアップ操作相当は、「製品販売レポート」を呼び出し、何も渡しません。
![011.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/418f917c-9b9a-486e-6d7e-dd01019670bf.png)

「製品タイプ」に設定したドリルスルー、つまりドリルアップ操作相当は、製品販売レポートL2」を呼び出し、「製品ライン」のために「パラメーター」を渡します。
![012.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/c01874e8-23e4-4ef0-d1ea-4d14ea68f472.png)

クエリーはこんな感じで、「製品ライン」「製品タイプ」をパラメーターで受けるためのオプショナルフィルターが設定されています。
![013.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/91d553f6-b327-5001-e126-99ddf83049bd.png)

という感じの実装で、実はわりと単純ですが、結構使える場面も多いと思いますので、覚えておいて頂ければと思います。
また、今回はコンセプトのご紹介のため、レポートを3つに分けて実装しましたが、ドリルスルーのターゲットを自分自身のレポートとして、クリックする列により引き継がれるパラメーターで、列の表示・非表示を条件付スタイルで制御すれば、同様の動きを1つのレポートで実装する事も可能です。

是非ご活用頂ければと思います。