Cognos ディメンショナルモデルでのフィルター&値のプロンプト&ドリルスルーの例

#概要
ディメンショナルモデルとは、サンプルの「GOデータウェアハウス(分析)」みたいな感じに、標準ディメンションや数値ディメンションで構成される、階層を持ったモデルです。
こういうモデルでは、クエリーにフィルターをかける時、いっつも便利に使っている「詳細フィルター」を使うと、すんごいパフォーマンスが遅くなったりします。
ディメンショナルモデルでは、本来「詳細フィルター」ではなく、「filter関数」や「スライサー」を使うのですが、パラメーターと一緒に使う時どうやって書くんだっけと、いっつも忘れてしまうので、自分のメモも兼ねて投稿しておきます。
![001.JPG](https://qiita-image-store.s3.amazonaws.com/0/147246/1f750419-fcc3-4dba-00ab-e2d5d001def7.jpeg)

#1. フィルターの作成
##①. オブジェクト上に登場するデータアイテムに対するフィルター&パラメーター作成
オブジェクト上に登場するデータアイテムとは、例えば以下のようなクロス集計の場合「製品ライン」や「年」はクロス集計上に登場していますので、これらのデータアイテムの事を言います。
逆にオブジェクト上に登場しないとは、このクロス集計に対して「発注方法」でフィルターをかけたい様な場合です。このやり方は、手順②でご説明します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/14c0231a-8f0c-4253-8db0-434951813298.png)

クエリーエクスプローラーから、クロス集計に使用されているクエリーを開き、「ツール・ボックス」から「データ・アイテム」をドロップし、名前を入力後、式の定義に以下のように記載します。
**filter([販売].[製品].[製品].[製品ライン],caption([販売].[製品].[製品].[製品ライン]) in ?pPL?)**
→[販売].[製品].[製品].[製品ライン] はレベルとなります。pPLがパラメーターとなります。 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/06c04d0a-67f1-d6bf-cbff-6e9b59c39df9.png)

ページエクスプローラーに戻り、データからデータ・アイテムタブを選択し、作成した「製品ライン」をクロス集計のエッジに配置します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/0a6ad79b-e2e1-00e9-37ad-3bdc0a021b68.png)

この状態でレポートを実行すると、filter関数が作成したプロンプトが表示されるので、任意の値を選択し「OK」。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/55ecb704-e01e-7a52-9786-7091ad8ffc5b.png)

選択した値で絞り込まれたクロス集計が表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/81a48f97-159f-5519-b01e-969819883031.png)

プロンプトページに「製品ライン」を選択させる値のプロンプトを作成するために、新規にクエリーを作成し、以下の式の定義でデータアイテムを作成します。
**caption([販売].[製品].[製品].[製品ライン])**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/5ae2cfca-7849-890b-1738-145164848abb.png)

プロンプトページで「値のプロンプト」を配置します。既存のパラメーターを使用を選択し「pPL」を指定し「終了」。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/97eb6191-0a10-b6bc-4a0b-3654d93c184b.png)

値のプロンプトのプロパティから、「クエリー」と「使用する値」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/343cdeb1-0a29-dba2-e1a7-7dcd76a7dfd5.png)

レポートを実行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/8866ca1b-a89a-4cc8-f08b-04add72ce518.png)

##②. オブジェクト上に登場しないデータアイテムに対するフィルター&パラメーター作成
クエリーエクスプローラーで、クロス集計のクエリーを選択し、「スライサー・メンバー・セット」を「スライサー」に配置し、式の定義で以下の記載をします。
**set(#promptmany('pOM','memberuniquename')#)**
→pOMはパラメーター名、memberuniquenameはデータタイプを指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/b85572f7-7a88-8f01-578a-e78fe0a80243.png)

プロンプトページに「発注方法のタイプ」を選択させる値のプロンプトを作成するために、新規にクエリーを作成し、以下の式の定義でデータアイテムを作成します。
**caption([販売].[発注方法].[発注方法].[発注方法のタイプ])**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/602b87da-dcdd-34b1-5657-aa048d23e6ee.png)

プロンプトページで「値のプロンプト」を配置します。既存のパラメーターを使用を選択し「pOM」を指定し「終了」。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/5d8ec272-c077-4314-2ca0-e591d26fd7df.png)

値のプロンプトのプロパティから、「クエリー」と「使用する値」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/ad82cce9-fb41-f344-53b2-3a27c1d4c75f.png)

レポート実行
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/81b6311c-bcb6-da93-fa29-5c5bef31b217.png)

#2. ドリルスルーの実装
前述のfilter関数やスライサーを使用してパラメーターを作成した場合の、ドリルスルー指定の方法を説明します。
ドリルスルーのターゲットとなるレポートには、同じ方法で作成したpPL、pOMをパラメーターとして持ったフィルターが設定されています。

##①. ソースレポートでのパラメーター値を引き継ぐ場合
ドリルスルー定義で、以下のように「方法」「値」「渡すプロパティー」を指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/6abf984e-8ee1-4bf0-4a19-1f6c1b9bb6de.png)

##②. ソースレポートでのデータアイテムの値を引き継ぐ場合
pPLの「方法」「値」「渡すプロパティー」の様に指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/a14e7b9d-bb12-a2e5-733c-8ba417b16359.png)

もちろん、これ以外の組み合わせでもうまく行く方法はあると思いますが、取りあえずうまく行った組み合わせ、という事での例とお考え下さい。
以上、ご活用下さい。


#参考情報
**Cognos Analytics スライサーのレポートをURL呼び出し**
https://qiita.com/shinyama/items/b36df0643e7f63d5c07d