SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

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

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

第2回

2)クロス集計クエリー

 縦軸と横軸にそれぞれ別項目を割り当てて集計することをクロス集計と言います。

例2:縦軸に都道府県、横軸に売上年月を指定した売上金額のクロス集計表
例2:縦軸に都道府県、横軸に売上年月を指定した売上金額のクロス集計表

 このような集計表を出力する場合、SQLでは記述が複雑で、かつレスポンス低下の原因となりがちなクロス集計クエリーを記述しなくてはなりません。

 しかしMDXであれば、このようなクロス集計表の出力はとても記述が簡単であり、実行速度もはるかに高レスポンスです。MDXに習熟すると、例えばExcelのピボット集計などとは比較にならないほどの複雑なクロス集計を行うことも可能になります。まさに本領発揮。MDXはクロス集計を行うために存在している、と言って良いでしょう。

 では、はじめにサンプルキューブから簡単なクロス集計を行ってみます。

 縦軸に都道府県、横軸に商品分類を指定します。集計するのは数量です。[SURYO]の指定がSELECT句に記述されないため、スライサとしてWHERE句で指定します。

縦軸に都道府県、横軸に商品分類を指定し、数量を集計
SELECT	{ [SHOHIN].[SHOHINBUNRUIMEI].CHILDREN } ON COLUMNS,
	{ [TOKUISAKI].[TODOFUKENMEI].CHILDREN } ON ROWS
FROM	[Sales]
WHERE	([Measures].[SURYO])

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

実行結果
実行結果

 では次にこのクエリーの縦軸と横軸を逆にしてみましょう。

縦軸に商品分類、横軸に都道府県を指定し、数量を集計
SELECT	{ [TOKUISAKI].[TODOFUKENMEI].CHILDREN } ON COLUMNS,
	{ [SHOHIN].[SHOHINBUNRUIMEI].CHILDREN } ON ROWS
FROM	[Sales]
WHERE	([Measures].[SURYO])

 縦軸に商品分類、横軸が都道府県です。入れ替えただけですね。すると、実行結果は次のようになります。

実行結果
実行結果

 簡単に縦軸と横軸が入れ替わりました。今度は、表示する集計項目を増やしてみましょう。

表示する集計項目を追加
SELECT	{ [TOKUISAKI].[TODOFUKENMEI].CHILDREN
	} ON COLUMNS,
	{ ([SHOHIN].[SHOHINBUNRUIMEI].CHILDREN,
	   {[Measures].[SURYO],[Measures].[URIKINGAKU]}
	  )
	} ON ROWS
FROM	[Sales]

 [Measures].[SURYO]をスライサからはずし、縦軸(ON ROWS)に[SURYO][URIKINGAKU]を含ませます。メジャー指定がSELECT句内に入るため、スライサの記述が不要になります。縦軸のカッコの書き方にも気をつけてください。セットとタプルが入れ子になっています。

縦軸カッコ内の構造
縦軸カッコ内の構造

 実行結果は次のようになります。

実行結果
実行結果

 数量と金額がそれぞれ表示されるようになりました。最後に、数量と金額を横に並べてみます。

数量と金額を横に並べて表示
SELECT	{ ( [TOKUISAKI].[TODOFUKENMEI].CHILDREN,
	   {[Measures].[SURYO],[Measures].[URIKINGAKU]}
	  )
	} ON COLUMNS,
	{ [SHOHIN].[SHOHINBUNRUIMEI].CHILDREN
	} ON ROWS
FROM	[Sales]

 メジャーの指定を横軸 (ON COLUMNS)に入れ替えただけです。実行結果は次のようになります。

実行結果
実行結果

 先ほどは行ごとに数量と金額が並んでいましたが、今度は列ごとに並びました。

 このように、縦横の軸の内容を変えたクエリー結果が、MDXを「ちょっとだけ」修正することで簡単に取得可能なのです。「ダイシング」と呼ばれる行為です。「多次元データベース」の有効な活用方法がよくお分かりいただけるのではないでしょうか。

次のページ
3)データの抽出とスライサ

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

難解クエリー言語「MDX」に挑戦連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4335 2009/09/16 14:00

イベント

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

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

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

メールバックナンバー