MDX 查詢和交叉分析篩選器軸 - 指定查詢軸的內容
適用於: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
查詢軸會指定多維度表達式 (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 個座標軸。 針對前 5 個座標軸,可以改用 COLUMNS、ROWS、PAGES、SECTIONS 和 CHAPTERS 別名。
MDX 查詢無法略過查詢軸。 也就是說,包含一或多個查詢軸的查詢不得排除編號較低的或中繼座標軸。 例如,沒有 COLUMNS 軸的查詢不能有 ROWS 軸,或是沒有 ROWS 軸的 COLUMNS 和 PAGES 軸。
不過,您可以指定不含任何軸的 SELECT 子句(也就是空的 SELECT 子句)。 在此情況下,所有維度都是交叉分析篩選器維度,而且 MDX 查詢會選取一個數據格。
在先前顯示的查詢軸語法中,每個 Set_Expression
值都會指定定義查詢軸內容的集合。 如需集合的詳細資訊,請參閱 使用成員、Tuple 和集合 (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 關鍵詞,是從座標軸移除所有空白 Tuple 的簡單方法。 例如,在到目前為止的範例中,從 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]