1)SELECT文の基本構文
では、いよいよMDXを記述してみましょう。まずはサンプルキューブから、「2008年の商品分類別の売上数量と金額」を抽出してみます。
SELECT { [Measures].[SURYO],
[Measures].[URIKINGAKU]
} ON COLUMNS,
{ [SHOHIN].[SHOHINBUNRUIMEI].CHILDREN
} ON ROWS
FROM [Sales]
WHERE ([URIAGE DATE].[2008年])
このMDXのクエリー実行結果は次のようになります。

次に最も簡単なSELECT文の基本構造を示します。例1をもとにしながら、SELECT文の文法について解説します。
SELECT セット1 ON COLUMNS, ←縦軸
セット2 ON ROWS ←横軸
FROM キューブ名 ←キューブ
WHERE セット3 ←スライサ
SELECT句の記述ルール
(1)軸の指定を明確に記述しなければならない
SELECT句には1つ以上の軸を指定し、2軸構造の場合、横軸はON COLUMNS(またはON AXIS(0))、縦軸はON ROWS(またはON AXIS(1))と指定します。例では[SURYO]と[URIKINGAKU]を横軸とし、商品分類を縦軸としています。
(2)各軸のセットはそれぞれ別ディメンションでなければならない
横軸(セット1)、縦軸(セット2)、スライサ(セット3)はそれぞれ別ディメンションで構成されていなければなりません。例1では、
横軸 :{[Measures].[SURYO],[Measures].[URIKINGAKU] }
縦軸 :{[SHOHIN].[SHOHINBUNRUIMEI].CHILDREN }
スライサ:([URIAGE DATE].[2008年])
となっており、横軸としてメジャー、縦軸として商品軸、スライサとして日付軸を指定しています。この「ディメンションの扱い」がSQLのSELECT文との大きな違いです。
FROM句の記述ルール
(1)データ取得元のキューブを指定する
FROM句にはデータ取得対象となるキューブを指定します。SQLではFROM句にはさまざま構文がありますが、MDXでは単一のキューブ指定か、またはサブキューブ指定の2パターンしかありません。
例1ではデータ取得元のキューブ[Sales]を指定しています。
WHERE句の記述ルール
(1)セットを指定する
MDXではWHERE句は「スライサ」と呼びます。スライサとはSELECT句で明確に指定されていないディメンションで指定される、キューブ内のセルブロックです。多くの場合は1つのタプルを指定しますが、複数タプルからなるセットを指定することも可能です。
(2)スライサ指定はデータのフィルタ条件指定とは異なる
WHERE句の考え方がSQLと大きく違うことに注意してください。MDXでは、対象データの抽出を、「フィルタ」と「スライサ」とに完全に分けて考えます。詳しくは、後述の「3)データの抽出とスライサ」で解説します。
(3)WHERE句は任意項目であり、必要なければ記述しない
SELECT句で使用しないディメンションでデータをスライスする必要がない場合はWHERE句を記述しません。逆に言えば、SELECT句で出てこない軸でデータを切り取る必要がある場合のみ、WHERE句を指定します。MDXの場合、ディメンション指定をSELECT句の中で行ってしまうことが多く、WHERE句の記述がないケースもよくあります。
記述の省略
ディメンション指定に過度な記述の省略が可能であることは、第1回 MDX構文の基本文法(1)で解説しました。例えば、例1のMDXを次のように「過度に」省略記述することも可能です。括弧すらも省略されていることに注意してください。
SELECT {[SURYO],[URIKINGAKU]} ON COLUMNS,
[SHOHINBUNRUIMEI].CHILDREN ON ROWS
FROM Sales
WHERE [2008年]
MDXを十分に習得してしまえば、このような簡易記述はありがたいのですが、文法理解の妨げになりますので、最初のうちはあまり省略形を使用しないことをお勧めします。
