SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

難解クエリー言語「MDX」に挑戦

多次元データベースクエリー言語「MDX」入門
~MDX構文の記述方法(2)

第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

1)SELECT文の基本構文

 では、いよいよMDXを記述してみましょう。まずはサンプルキューブから、「2008年の商品分類別の売上数量と金額」を抽出してみます。

例1:基本的なSELECT文
SELECT { [Measures].[SURYO],
         [Measures].[URIKINGAKU]
       } ON COLUMNS,
       { [SHOHIN].[SHOHINBUNRUIMEI].CHILDREN
       } ON ROWS
FROM [Sales]
WHERE ([URIAGE DATE].[2008年])

 このMDXのクエリー実行結果は次のようになります。

例1のクエリ実行結果
例1のクエリ実行結果

 次に最も簡単なSELECT文の基本構造を示します。例1をもとにしながら、SELECT文の文法について解説します。

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を次のように「過度に」省略記述することも可能です。括弧すらも省略されていることに注意してください。

例1を省略した記述
SELECT {[SURYO],[URIKINGAKU]} ON COLUMNS,
	[SHOHINBUNRUIMEI].CHILDREN ON ROWS
FROM Sales
WHERE [2008年]

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

次のページ
2)クロス集計クエリー

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
難解クエリー言語「MDX」に挑戦連載記事一覧

もっと読む

この記事の著者

大家 正巳(オオヤ マサミ)

株式会社ヴィバーク代表取締役。 システムアナリスト。 この度、当社では SQL Server Analysis Services に接続し、MDXの発行が可能な BIシステム構築ツール「CubeWalker」を開発しました。2009年10月より発売致します。 高速かつ安価なBIシステム作りに、是非お...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4335 2009/09/16 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング