共用方式為


建立查詢範圍命名集 (MDX)

如果單一多維度運算式 (MDX) 查詢只需要有命名集,您可以使用 WITH 關鍵字來定義命名集。 查詢完成執行之後,使用 WITH 關鍵字建立的命名集就不再存在。

如同本主題所討論,WITH 關鍵字的語法很有彈性,甚至可以使用函數來定義命名集。

[!附註]

如需有關命名集的詳細資訊,請參閱<在 MDX 中建立命名集 (MDX)>。

WITH 關鍵字語法

使用以下語法將 WITH 關鍵字加入 MDX SELECT 陳述式:

[ 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 參數包含了命名集別名所參考的集合運算式。

WITH 關鍵字範例

下列 MDX 查詢會檢查 FoodMart 2000 (Microsoft SQL Server 2000 Analysis Services 的範例資料庫) 中,各種 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)

概念

建立工作階段範圍命名集 (MDX)