基本 MDX 查询 (MDX)

基本多维表达式 (MDX) 查询就是 SELECT 语句 - MDX 中最常用的查询。 通过了解 MDX SELECT 语句如何指定结果集、SELECT 语句的语法是怎样的以及如何使用 SELECT 语句创建简单查询,您将切实理解如何使用 MDX 来查询多维数据。

指定结果集

在 MDX 中,SELECT 语句可指定一个结果集,其中包含从多维数据集中返回的多维数据子集。 若要指定结果集,MDX 查询必须包含以下信息:

  • 层次结构的轴或集的数目。 最多可在 MDX 查询中指定 128 个轴。

  • 要包括在 MDX 查询的各个轴上的每个维度的成员。

  • 用于设置 MDX 查询上下文的多维数据集的名称。

  • 来自切片器轴的成员,将在该轴上对来自查询轴的成员进行数据切片。 有关切片器轴和查询轴的详细信息,请参阅用查询轴和切片器轴限定查询 (MDX)

为了标识查询轴、用于设置查询上下文的多维数据集以及切片器轴,MDX SELECT 语句使用下列子句:

  • SELECT 子句,用于确定 MDX SELECT 语句的查询轴。 有关在 SELECT 子句中构造查询轴的详细信息,请参阅指定查询轴的内容 (MDX)

  • FROM 子句,用于确定在提取数据以填充 MDX SELECT 语句的结果集时使用哪个多维数据源。 有关 FROM 子句的详细信息,请参阅 SELECT 语句 (MDX)

  • 可选的 WHERE 子句,用于确定使用哪个维度或成员作为切片器轴,以将数据提取操作限制于特定的维度或成员。 有关在 WHERE 子句中构造切片器轴的详细信息,请参阅指定切片器轴的内容 (MDX)

注意注意

有关 SELECT 语句的各种子句的详细信息,请参阅 SELECT 语句 (MDX)

SELECT 语句的语法

以下语法显示了一个包括 SELECT、FROM 和 WHERE 子句的基本 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> ]

MDX SELECT 语句支持可选的语法(如 WITH 关键字),支持使用 MDX 函数通过计算是否包含在轴或切片轴中来构造成员,并支持在查询中返回特定单元属性的值。 有关 MDX SELECT 语句的详细信息,请参阅 SELECT 语句 (MDX)

比较 MDX SELECT 语句的语法与 SQL 语法

MDX SELECT 语句所用的语法格式与 SQL 语法相似。 但也有几个明显的区别:

  • MDX 语法通过用大括号({ 和 } 字符)括住元组或成员来区分集。 有关成员、元组和集语法的详细信息,请参阅使用成员、元组和集 (MDX)

  • MDX 查询在 SELECT 语句中最多可有 128 个查询轴,但只有前 5 个轴有别名。 可以使用轴在 MDX 查询内的序号位置或轴的别名(如果该轴有别名)来引用该轴。 像 SQL 查询一样,FROM 子句可为 MDX 查询指定数据源。 但是,MDX FROM 子句被限定为单个多维数据集。 若要检索来自其他多维数据集的信息,需要使用 LookupCube 函数逐个值地进行检索。

  • WHERE 子句描述了切片器轴。 如果 WHERE 子句中没有提到层次结构,则 MicrosoftSQL ServerAnalysis Services 假定任何未显式包含在查询轴中的层次结构都将隐式包含在切片器轴中,并将根据其默认成员筛选该层次结构。WHERE 子句可更改对指定层次结构的筛选处理,从而实现对所包含的数据的精确控制。

SELECT 语句示例

以下示例显示了使用 SELECT 语句的基本 MDX 查询。 此查询返回包含 Southwest 销售区域 2002 和 2003 年度销售额和税额的结果集。

SELECT
    { [Measures].[Sales Amount], 
        [Measures].[Tax Amount] } ON COLUMNS,
    { [Date].[Fiscal].[Fiscal Year].&[2002], 
        [Date].[Fiscal].[Fiscal Year].&[2003] } ON ROWS
FROM [Adventure Works]
WHERE ( [Sales Territory].[Southwest] )

在此示例中,此查询定义了以下结果集信息:

  • SELECT 子句将查询轴设置为 Measures 维度的 Sales Amount 和 Tax Amount 成员,以及 Date 维度的 2002 和 2003 成员。

  • FROM 子句指明数据源为 Adventure Works 多维数据集。

  • WHERE 子句将切片器轴定义为 Sales Territory 维度的 Southwest 成员。

请注意,此查询示例还使用了 COLUMNS 和 ROWS 轴别名。 也可以使用这些轴的序号位置。 以下示例显示了如何编写 MDX 查询以使用每个轴的序号位置:

SELECT
    { [Measures].[Sales Amount], 
        [Measures].[Tax Amount] } ON 0,
    { [Date].[Fiscal].[Fiscal Year].&[2002], 
        [Date].[Fiscal].[Fiscal Year].&[2003] } ON 1
FROM [Adventure Works]
WHERE ( [Sales Territory].[Southwest] )
重要说明重要提示

通常情况下,在较大的多维数据集上下文中计算集。 但是,EXISTING 关键字 (MDX) 强制在当前上下文中计算集。