查詢軸會指定多維度表達式 (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,y 軸為 1,z 軸為 2,依此類推。 在的 <SELECT query axis clause>語法中,值 Integer_Expression 會指定座標軸編號。 MDX 查詢最多可支援 128 個指定的座標軸,但很少的 MDX 查詢會使用超過 5 個座標軸。 針對前 5 個座標軸,可以改用 COLUMNS、ROWS、PAGES、SECTIONS 和 CHAPTERS 別名。
MDX 查詢無法略過查詢軸。 也就是說,包含一或多個查詢軸的查詢不得排除編號較低的或中繼座標軸。 例如,查詢若沒有 COLUMNS 軸,則不能有 ROWS 軸;或者若沒有 ROWS 軸,則不能有 COLUMNS 和 PAGES 軸。
不過,您可以指定不含任何軸的 SELECT 子句(也就是空的 SELECT 子句)。 在此情況下,所有維度都是切片器維度,而且 MDX 查詢會選取一個單元格。
在先前顯示的查詢軸語法中,每個 Set_Expression 值都會指定定義查詢軸內容的集合。 如需集合的詳細資訊,請參閱 使用成員、元組和集合(MDX) 。
範例
下列簡單的 SELECT 語句會傳回 Columns 軸上的 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 月起,Cube 中沒有任何數據。 若要在數據格集中,去除所有在任何欄位中沒有數據的行,只需在 Rows 軸定義的集之前新增 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 Sales Amount 大於 $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]