指定查询轴的内容 (MDX)

查询轴指定多维表达式 (MDX) SELECT 语句返回的单元格集的边缘。 通过指定单元格集的边缘,可以限制对客户端可见的返回的数据。

若要指定查询轴,可以使用 <SELECT query axis clause> 将集合分配到特定的查询轴上。 每个 <SELECT query axis clause> 值定义一个查询轴。 数据集中的轴数等于 SELECT 语句中的值数 <SELECT query axis clause>

查询坐标轴语法

以下语法显示了<SELECT query axis clause>的语法:

  
<SELECT query axis clause> ::=  
   [ NON EMPTY ] Set_Expression [ <SELECT dimension property list clause> ] [<HAVING clause>]  
   ON {  
      Integer_Expression |   
      AXIS( Integer_Expression ) |   
      {COLUMNS | ROWS | PAGES | SECTIONS | CHAPTERS}     
      }  
  

每个查询轴都有一个数字:x 轴的零(0),1 表示 y 轴,2 表示 z 轴,依依如此。 在语法 <SELECT query axis clause>中,该值 Integer_Expression 指定轴号。 MDX 查询最多可以支持 128 个指定轴,但很少有 MDX 查询将使用 5 个以上的轴。 对于前五个维度,可以改用别名:列、行、页、节和章。

MDX 查询无法跳过查询轴。 也就是说,包含一个或多个查询轴的查询不得排除编号较低的轴或中间轴。 例如,查询不能有 ROWS 轴而没有 COLUMNS 轴,或者不能有 COLUMNS 和 PAGES 轴而没有 ROWS 轴。

不过,可以指定一个不含维度的 SELECT 子句(即空的 SELECT 子句)。 在这种情况下,所有维度都是切片器维度,MDX 查询选择一个单元格。

在前面显示的查询轴语法中,每个 Set_Expression 值指定定义查询轴内容的集。 有关集的详细信息,请参阅“使用成员”、“元组”和“集”(MDX)。

例子

以下简单 SELECT 语句返回列轴上的 Internet Sales Amount 度量值,并使用 MDX MEMBERS 函数返回“行”轴上日期维度的“日历”层次结构中的所有成员:

SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,  
{[Date].[Calendar].MEMBERS} ON ROWS  
FROM [Adventure Works]  
  

以下两个查询返回的结果完全相同,但演示了使用轴编号而非别名的情况:

SELECT {[Measures].[Internet Sales Amount]} ON 0,  
{[Date].[Calendar].MEMBERS} ON 1  
FROM [Adventure Works]  
  
SELECT {[Measures].[Internet Sales Amount]} ON AXIS(0),  
{[Date].[Calendar].MEMBERS} ON AXIS(1)  
FROM [Adventure Works]  
  

在设置定义之前使用的 NON EMPTY 关键字是一种从轴中删除所有空元组的简单方法。 例如,在到目前为止我们所看到的示例中,从 2004 年 8 月开始,多维数据集中没有数据。 若要从任何列中没有数据的单元格集中删除所有行,只需在行轴定义上设置之前添加 NON EMPTY,如下所示:

SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,  
NON EMPTY  
{[Date].[Calendar].MEMBERS} ON ROWS  
FROM [Adventure Works]  
  

NON EMPTY 可用于查询中的所有轴。 比较以下两个查询的结果,其中第一个查询不使用 NON EMPTY,第二个查询在两个轴上执行:

SELECT {[Measures].[Internet Sales Amount]}   
* [Promotion].[Promotion].[Promotion].MEMBERS  
ON COLUMNS,  
{[Date].[Calendar].[Calendar Year].MEMBERS} ON ROWS  
FROM [Adventure Works]  
WHERE([Product].[Subcategory].&[19])  
  
SELECT NON EMPTY {[Measures].[Internet Sales Amount]}   
* [Promotion].[Promotion].[Promotion].MEMBERS  
ON COLUMNS,  
NON EMPTY  
{[Date].[Calendar].[Calendar Year].MEMBERS} ON ROWS  
FROM [Adventure Works]  
WHERE([Product].[Subcategory].&[19])  
  

HAVING 子句可用于根据特定条件筛选轴的内容;它比其他可实现相同结果的方法(例如 FILTER 函数)不太灵活,但使用起来更简单。 以下示例仅返回 Internet 销售金额大于 $15,000 的日期:

SELECT {[Measures].[Internet Sales Amount]}   
ON COLUMNS,  
NON EMPTY  
{[Date].[Calendar].[Date].MEMBERS}   
HAVING [Measures].[Internet Sales Amount]>15000  
ON ROWS  
FROM [Adventure Works]  
  

另请参阅

指定切片器轴的内容 (MDX)