创建 Query-Scoped 命名集 (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 2000Microsoft 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)
创建 Session-Scoped 命名集 (MDX)