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を「ちょっとだけ」修正することで簡単に取得可能なのです。「ダイシング」と呼ばれる行為です。「多次元データベース」の有効な活用方法がよくお分かりいただけるのではないでしょうか。






