次の方法で共有


Query-Scoped 名前付きセットを作成する (MDX)

名前付きセットが 1 つの多次元式 (MDX) クエリにのみ必要な場合は、WITH キーワードを使用してその名前付きセットを定義できます。 WITH キーワードを使用して作成された名前付きセットは、クエリの実行が完了した後に存在しなくなりました。

このトピックで説明したように、WITH キーワードの構文は非常に柔軟であり、関数を使用して名前付きセットを定義する場合にも対応できます。

名前付きセットの詳細については、「 MDX での名前付きセットの構築 (MDX)」を参照してください。

WITH キーワード構文

MDX SELECT ステートメントに WITH キーワードを追加するには、次の構文を使用します。

[ WITH <SELECT WITH clause> [ , <SELECT WITH clause> ... ] ]   
SELECT [ * | ( <SELECT query axis clause> [ , <SELECT query axis clause> ... ] ) ]  
FROM <SELECT subcube clause>   
[ <SELECT slicer axis clause> ]  
[ <SELECT cell property list clause> ]  
  
<SELECT WITH clause> ::=  
   ( SET Set_Identifier AS 'Set_Expression')  
  

WITH キーワードの構文では、 Set_Identifier パラメーターに名前付きセットのエイリアスが含まれています。 Set_Expression パラメーターには、名前付きセット エイリアスが参照する set 式が含まれています。

「WITH」キーワードの例

次の MDX クエリでは、Microsoft SQL Server 2000 Analysis Services のサンプル データベースである FoodMart 2000 のさまざまな Chardonnay ワインと Chablis ワインの販売単位を調べます。 このクエリは、結果セットに関しては非常に単純ですが、このようなクエリをメンテナンスする必要がある場合、長くて扱いにくいです。

SELECT  
   {[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Good].[Good Chardonnay],   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Pearl].[Pearl Chardonnay],   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Portsmouth].[Portsmouth Chardonnay],   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Top Measure].[Top Measure Chardonnay],   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Walrus].[Walrus Chardonnay],   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Good].[Good Chablis Wine],   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Pearl].[Pearl Chablis Wine],   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Portsmouth].[Portsmouth Chablis Wine],   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Top Measure].[Top Measure Chablis Wine],   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Walrus].[Walrus Chablis Wine]} ON COLUMNS,  
   {Measures.[Unit Sales]} ON ROWS  
FROM Sales  

前の MDX クエリを保守しやすくするために、WITH キーワードを使用して、クエリの名前付きセットを作成できます。 次のコードは、WITH キーワードを使用して名前付きセット、 [ChardonnayChablis]を作成する方法、および名前付きセットを使用して SELECT ステートメントを短く保守しやすくする方法を示しています。

WITH SET [ChardonnayChablis] AS  
   {[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Good].[Good Chardonnay],  
   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Pearl].[Pearl Chardonnay],  
   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Portsmouth].[Portsmouth Chardonnay],  
   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Top Measure].[Top Measure Chardonnay],  
   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Walrus].[Walrus Chardonnay],  
   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Good].[Good Chablis Wine],  
   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Pearl].[Pearl Chablis Wine],  
   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Portsmouth].[Portsmouth Chablis Wine],  
   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Top Measure].[Top Measure Chablis Wine],  
   [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Walrus].[Walrus Chablis Wine]}  
  
SELECT  
   [ChardonnayChablis] ON COLUMNS,  
   {Measures.[Unit Sales]} ON ROWS  
FROM Sales  

WITH キーワードと共に関数を使用する

名前付きセットの各メンバーを明示的に定義できますが、この方法では長いステートメントを生成できます。 名前付きセットの作成と保守を容易にするために、MDX 関数を使用してメンバーを定義できます。

たとえば、次の MDX クエリの例では、 FilterCurrentMemberName MDX 関数と InStr VBA 関数を使用して、 [ChardonnayChablis] 名前付きセットを作成します。 このバージョンの [ChardonnayChablis] 名前付きセットは、このトピックで既に示した明示的に定義されたバージョンと同じです。

WITH SET [ChardonnayChablis] AS  
   'Filter([Product].Members, (InStr(1, [Product].CurrentMember.Name, "chardonnay") <> 0) OR (InStr(1, [Product].CurrentMember.Name, "chablis") <> 0))'  
  
SELECT  
   [ChardonnayChablis] ON COLUMNS,  
   {Measures.[Unit Sales]} ON ROWS  
FROM Sales  
  

こちらもご覧ください

SELECT ステートメント (MDX)
名前付きセット Session-Scoped 作成 (MDX)