查询轴指定多维表达式 (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]