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を十分に習得してしまえば、このような簡易記述はありがたいのですが、文法理解の妨げになりますので、最初のうちはあまり省略形を使用しないことをお勧めします。