#概要
ディメンショナルモデルとは、サンプルの「GOデータウェアハウス(分析)」みたいな感じに、標準ディメンションや数値ディメンションで構成される、階層を持ったモデルです。
こういうモデルでは、クエリーにフィルターをかける時、いっつも便利に使っている「詳細フィルター」を使うと、すんごいパフォーマンスが遅くなったりします。
ディメンショナルモデルでは、本来「詳細フィルター」ではなく、「filter関数」や「スライサー」を使うのですが、パラメーターと一緒に使う時どうやって書くんだっけと、いっつも忘れてしまうので、自分のメモも兼ねて投稿しておきます。
#1. フィルターの作成
##①. オブジェクト上に登場するデータアイテムに対するフィルター&パラメーター作成
オブジェクト上に登場するデータアイテムとは、例えば以下のようなクロス集計の場合「製品ライン」や「年」はクロス集計上に登場していますので、これらのデータアイテムの事を言います。
逆にオブジェクト上に登場しないとは、このクロス集計に対して「発注方法」でフィルターをかけたい様な場合です。このやり方は、手順②でご説明します。
クエリーエクスプローラーから、クロス集計に使用されているクエリーを開き、「ツール・ボックス」から「データ・アイテム」をドロップし、名前を入力後、式の定義に以下のように記載します。
filter([販売].[製品].[製品].[製品ライン],caption([販売].[製品].[製品].[製品ライン]) in ?pPL?)
→[販売].[製品].[製品].[製品ライン] はレベルとなります。pPLがパラメーターとなります。
ページエクスプローラーに戻り、データからデータ・アイテムタブを選択し、作成した「製品ライン」をクロス集計のエッジに配置します。
この状態でレポートを実行すると、filter関数が作成したプロンプトが表示されるので、任意の値を選択し「OK」。
プロンプトページに「製品ライン」を選択させる値のプロンプトを作成するために、新規にクエリーを作成し、以下の式の定義でデータアイテムを作成します。
caption([販売].[製品].[製品].[製品ライン])
プロンプトページで「値のプロンプト」を配置します。既存のパラメーターを使用を選択し「pPL」を指定し「終了」。
値のプロンプトのプロパティから、「クエリー」と「使用する値」を選択します。
##②. オブジェクト上に登場しないデータアイテムに対するフィルター&パラメーター作成
クエリーエクスプローラーで、クロス集計のクエリーを選択し、「スライサー・メンバー・セット」を「スライサー」に配置し、式の定義で以下の記載をします。
set(#promptmany('pOM','memberuniquename')#)
→pOMはパラメーター名、memberuniquenameはデータタイプを指定します。
プロンプトページに「発注方法のタイプ」を選択させる値のプロンプトを作成するために、新規にクエリーを作成し、以下の式の定義でデータアイテムを作成します。
caption([販売].[発注方法].[発注方法].[発注方法のタイプ])
プロンプトページで「値のプロンプト」を配置します。既存のパラメーターを使用を選択し「pOM」を指定し「終了」。
値のプロンプトのプロパティから、「クエリー」と「使用する値」を選択します。
#2. ドリルスルーの実装
前述のfilter関数やスライサーを使用してパラメーターを作成した場合の、ドリルスルー指定の方法を説明します。
ドリルスルーのターゲットとなるレポートには、同じ方法で作成したpPL、pOMをパラメーターとして持ったフィルターが設定されています。
##①. ソースレポートでのパラメーター値を引き継ぐ場合
ドリルスルー定義で、以下のように「方法」「値」「渡すプロパティー」を指定します。
##②. ソースレポートでのデータアイテムの値を引き継ぐ場合
pPLの「方法」「値」「渡すプロパティー」の様に指定します。
もちろん、これ以外の組み合わせでもうまく行く方法はあると思いますが、取りあえずうまく行った組み合わせ、という事での例とお考え下さい。
以上、ご活用下さい。
#参考情報
Cognos Analytics スライサーのレポートをURL呼び出し
https://qiita.com/shinyama/items/b36df0643e7f63d5c07d