次の方法で共有


MDX での名前付きセットの作成 (MDX)

セット式は、長く複雑な宣言になることがあり、そのような場合は読みにくく、理解するのが難しい式になります。また、同じセット式を頻繁に使用する場合に、その同じセットを繰り返し定義しなければならないのは面倒です。長く複雑な式や頻繁に使用する式の取り扱いを簡略化するために、多次元式 (MDX) では、そのような式を名前付きセットとして定義できるようになっています。

基本的に、名前付きセットとは、別名を割り当てたセット式です。名前付きセットには、通常 1 つのセットに組み込めるメンバや関数を任意に組み込めます。MDX では、名前付きセットの別名をセット式として取り扱うので、セット式を使用できる場所であればどこででもその別名を使用できます。

名前付きセットの定義では、以下のいずれかのコンテキストを設定できます。

  • クエリ スコープ   MDX クエリの一部として定義される名前付きセットを作成する場合 (つまり、スコープをそのクエリに限定する場合) は、WITH キーワードを使用します。その名前付きセットは、MDX の SELECT ステートメントの中で使用できます。この方法では、WITH キーワードを使用して作成した名前付きセットを、SELECT ステートメントを修正せずに変更できます。

    WITH キーワードを使用して名前付きセットを作成する方法の詳細については、「クエリ スコープの名前付きセットの作成 (MDX)」を参照してください。

  • セッション スコープ   クエリのコンテキストよりも広いスコープを設定して名前付きセットを作成する場合 (つまり、スコープを MDX セッションの有効期間全体とする場合) は、CREATE SET ステートメントを使用します。CREATE SET ステートメントで定義した名前付きセットは、そのセッションのすべての MDX クエリで使用できます。CREATE SET ステートメントを使用する方法は、たとえば、さまざまなクエリで 1 つのセットを使い回すクライアント アプリケーションで役立ちます。

    CREATE SET ステートメントを使用してセッションでの名前付きセットを作成する方法の詳細については、「セッション スコープの名前付きセットの作成 (MDX)」を参照してください。

  • **グローバル スコープ   **ユーザー セッションのコンテキストよりも広いスコープを設定して名前付きセットを作成する場合 (つまり、スコープを実行中のインスタンスの有効期間全体とする場合) は、既定の MDX スクリプトの中で CREATE SET ステートメントを使用します。詳細については、「基本的な MDX スクリプト (MDX)」を参照してください。既定の MDX スクリプトで CREATE SET を使用して定義した名前付きセットは、すべてのユーザーが任意のセッションのすべての MDX クエリで使用できます。

名前付きセットの内容は、作成時に評価することも (静的)、クエリで使用されるたびに評価することもできます (動的)。セットがいつ評価されるかは、CREATE SET [STATIC|DYNAMIC] 構文で定義されます。詳細については、「CREATE SET ステートメント (MDX)」を参照してください。作成ステートメントにどちらのキーワードも指定されていない場合は、既定で STATIC として作成されます。

動的な動作を持つ名前付きセットは、グローバル スコープで (既定の MDX スクリプトで) 定義することも、セッション スコープで定義することもできます。ただし、それらの名前付きセットが評価されるのは、クエリが解決されるときだけです (クエリ スコープ)。動的なセットをセッション スコープやグローバル スコープで評価しようとすると、エラーが発生します。これは、動的なセットの間接参照にも当てはまります。グローバル スコープまたはセッション スコープで定義した場合に動的な名前付きセットを参照できる計算を以下に示します。

  • 計算されるメンバ

  • 動的な名前付きセット

  • KPI

  • 代入式の右辺 (RHS) の式

  • セル計算の条件式

  • セル計算の値式

動的なセットはクエリ スコープで評価されるため、任意の MDX クエリ内で参照できます。

注記注意

動的なセットは CREATE SET コマンドの実行時に評価されないため、依存するすべてのオブジェクト (静的オブジェクトまたは動的オブジェクト) へのリンクが作成されます。このため、動的なセットが削除されるまで、参照先のオブジェクトを削除することはできません。たとえば、セッションの計算されるメンバを参照する動的な名前付きセットをセッションで作成した場合、その計算されるメンバは、その動的な名前付きセットが存在している間は削除できません。

動的な名前付きセットの解決

動的なセットには、どの時点においても最大 3 つのバージョンがあります。

  • キューブ スクリプトで使用されるグローバル スコープのバージョン

  • セッションの計算で使用されるセッション スコープのバージョン

  • クエリの計算で使用されるクエリ スコープのバージョン

どのバージョンが計算に使用されるかは、式のコンテキストと、動的な名前付きセットの参照方法のみによって決まります (主に間接参照の場合)。

たとえば、セッションの動的な名前付きセットを使用するセッションの計算されるメンバがあり、その計算されるメンバをクエリで使用する場合は、名前付きセットがセッション スコープで評価されるため、クエリの WHERE 句は名前付きセットに影響しません。一方、同じ動的な名前付きセットを直接クエリで使用する場合は、名前付きセットがクエリ スコープで評価されるため、WHERE 句が名前付きセットの結果に影響する可能性があります。