クエリ軸は、多次元式 (MDX) SELECT ステートメントによって返されるセルセットの端を指定します。 セルセットの端を指定すると、クライアントに表示される返されるデータを制限できます。
クエリ軸を指定するには、 <SELECT query axis clause> を使用して、特定のクエリ軸にセットを割り当てます。 各 <SELECT query axis clause> 値は、1 つのクエリ軸を定義します。 データセット内の軸の数は、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 個までサポートできますが、5 つ以上の軸を使用する MDX クエリはほとんどありません。 最初の 5 つの軸では、代わりにエイリアス COLUMNS、ROWS、PAGES、SECTIONS、CHAPTERS を使用できます。
MDX クエリでは、クエリ軸をスキップできません。 つまり、1 つ以上のクエリ軸を含むクエリでは、小さい番号付き軸または中間軸を除外することはできません。 たとえば、クエリには ROWS 軸なしで COLUMNS 軸を含めることはできませんし、また ROWS 軸なしで COLUMNS 軸や PAGES 軸を含めることもできません。
ただし、軸を指定せずに SELECT 句 (つまり、空の SELECT 句) を指定できます。 この場合、すべてのディメンションはスライサー ディメンションであり、MDX クエリでは 1 つのセルが選択されます。
前に示したクエリ軸の構文では、各 Set_Expression 値によって、クエリ軸の内容を定義するセットが指定されます。 セットの詳細については、「 メンバー、タプル、およびセットの操作 (MDX)」を参照してください。
例示
次の単純な SELECT ステートメントは、列軸のメジャー Internet Sales Amount を返し、MDX MEMBERS 関数を使用して、行軸の Date ディメンションの Calendar 階層からすべてのメンバーを返します。
SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
{[Date].[Calendar].MEMBERS} ON ROWS
FROM [Adventure Works]
次の 2 つのクエリは、まったく同じ結果を返しますが、エイリアスではなく軸番号の使用を示しています。
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 は、クエリ内のすべての軸で使用できます。 次の 2 つのクエリの結果を比較します。1 つ目は NON EMPTY を使用せず、2 つ目は両方の軸で使用します。
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]