3)プロパティ表示(コードと名称)
リレーショナルデータベースを扱いなれた人が多次元データベースを扱おうとする際、戸惑うことの1つに「コードと名称」についての考え方の相違があります。
リレーショナルデータベースの場合、例えば商品マスタなどの構造は、
商品コード、商品名、…(その他属性)…
とすることが圧倒的に多く、データを一意に判断するのはあくまで商品「コード」です。ただし、商品コードだけではそれが何なのかは判断できないことが多く、商品名称を別項目として定義し、「商品名称は商品コードに従属する」という関係を持たせます。
一方、多次元データベースの場合、キューブ生成する際には「商品名称」などの、クエリー結果に表示させたい項目自身でディメンションを構成します。ここで問題が発生しがちなのがデータの一意性です。キューブにはデータの完璧な整合性が求められるため、例え「名称」であってもメジャー以外の各ディメンション値に重複は許されません。同じ商品名を、複数の商品コードに設定することができないのです。
この問題を回避するためには、ディメンションの各項目を「コード+名称」のように文字列結合した値にするなどの工夫が必要です。
なお、名称項目に一意性が保たれている場合は、ディメンションの設定によって「コードでデータの関連付けを行い、表示するのは名称とする」ことが可能です。各コードでディメンションデータを関連付けた後、各ディメンションのNameColumnプロパティにそれぞれの名称項目を指定することで実現できます。
また、ディメンションを構成する項目はあくまで「コード」とし、それぞれの「名称」をディメンションの「プロパティ」として設定する方法もあります。
このような場合、ディメンションを構成する項目は名称ではなく、コードになります。例えば、サンプルキューブの[SHOHIN]ディメンションが次のような構成であったとします。
ディメンションがこのように「名称」からではなく「コード」で構成されていた場合、MDXの実行結果はどうなるでしょうか? 例として、「商品分類別の売上」を表示してみます。
SELECT { [Measures].[SURYO]
} ON COLUMNS,
{[SHOHIN].[SHOHINBUNRUI - SHOHIN].CHILDREN
} ON ROWS
FROM [Sales]
WHERE ([URIAGE DATE].[YEAR].[2009年])
実行結果は次のようになります。

このように、各商品分類の「名称」がわからない結果表になってしまいます。実際に欲しいのは次のような表です。

ビジネスシステムでは、このように「コード」と「名称」を併記した表にしたいことがよくあります。
このような結果表を得るためには、ディメンションのメンバープロパティをMDXで一緒に取得することが必要です。そのためには、まずキューブの構造として、必要な属性情報がディメンションに含まれていなければいけません。含まれていない場合はディメンション構造を修正し、キューブを再処理します。
キューブをSQL Server Business Intelligence Development Studioで開き、ソリューションエクスプローラ(画面右側)で当該ディメンションをダブルクリックするとディメンション構造が表示され、メンバープロパティが確認できます。
MDXでプロパティを一緒に取得するためには、次のように記述します。
SELECT { [Measures].[SURYO]
} ON COLUMNS,
{[SHOHIN].[SHOHINBUNRUI - SHOHIN].CHILDREN
} DIMENSION PROPERTIES
[SHOHIN].[SHOHINBUNRUI].[SHOHINBUNRUICD],
[SHOHIN].[SHOHINBUNRUI].[SHOHINBUNRUIMEI]
ON ROWS
FROM [Sales]
WHERE ([URIAGE DATE].[YEAR].[2009年])
これでディメンションのメンバープロパティを取得し、コードと名称を併記した表がクエリー結果となります。
ただし、SQL Server Management Studio 2005からのMDX発行では、DIMENSION PROPERTIESを正しく指定しても実行結果にはプロパティ値は含まれませんので注意してください。後ほど詳述するADOMD.Net経由の結果セットには含まれますし、この連載の後の回で解説するMDX対応アプリケーション構築ツール「CubeWalker」であれば正常に取得できます。
メンバープロパティは「コード」に対する「名称」、という利用方法以外でも、例えば商品の色や人物の年齢など、必要に応じてさまざまに使用できます。
まとめ
今回は、MDXで取得したクエリー結果の整形手法をいくつか解説しました。次回は計算されるメンバーについて解説します。
参考資料
- 『SQL Server Books Online - Microsoft』
- 『MDX Solutions』George Spofford・Sivakumar Harinath・Christopher Webb・Dylan Hai Huang・Francesco Civardi著、Wiley社、2006年3月

![[SHOHIN]ディメンションの構成](http://cz-cdn.shoeisha.jp/static/images/article/4336/25s.gif)
