指定查詢座標軸的內容 (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),y-軸是 1,z-軸是 2,依此類推。在 <SELECT query axis clause> 的語法中,Integer_Expression 值指定座標軸數目。MDX 查詢最多可以支援 128 個指定座標軸,但只有極少數的 MDX 查詢會使用 5 個以上的座標軸。對於前 5 個座標軸,可改為使用別名 COLUMNS、ROWS、PAGES、SECTIONS 與 CHAPTERS。

MDX 查詢無法略過查詢座標軸。也就是說,包含一或多個查詢座標軸的查詢絕不能排除編號較低或中間的座標軸。例如,查詢不可以只有 ROWS 座標軸,而沒有 COLUMNS 座標軸,或者有 COLUMNS 與 PAGES 座標軸,但沒有 ROWS 座標軸。

但是,您可以指定沒有座標軸的 SELECT 子句 (也就是說,一個空的 SELECT 子句)。在此狀況下,所有的維度都是切片維度,且 MDX 查詢選取一個資料格。

在先前顯示的查詢軸語法中,Set_Expression 值指定了定義查詢軸內容的集合。如需有關集合的詳細資訊,請參閱<使用成員、Tuple 和集合 (MDX)>。

範例

下列簡單的 SELECT 陳述式會傳回資料行軸上的 Internet Sales Amount 量值,並使用 MDX MEMBERS 函數從資料列軸上 Date 維度的 Calendar 階層傳回所有成員:

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 關鍵字是從軸中移除所有空 Tuple 的一個簡單方式。例如,在我們目前看到的範例中,2004 年八月之後的 Cube 中沒有資料。若要從資料格集內移除在任何資料行中沒有資料的所有資料列,只需要在資料列軸定義的集合之前加上 NON EMPTY,如下所示:

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

NON EMPTY 可用於查詢中的所有軸。比較下列兩個查詢的結果,第一個查詢不會使用 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]