OLAP スキーマでは、フラットなデータを OLAP キューブで表現する方法と、OLAP クエリでデータを集計する方法を定義します。通常は、MXML でスキーマを定義します。スキーマは、ActionScript でプログラムによって構築することも可能です。ただし、この場合は MXML の場合よりも多くのコーディングが必要となります。
次の表では、OLAP スキーマの定義に使用するクラスとインターフェイスについて説明します。
|
クラス |
インターフェイス |
説明 |
|---|---|---|
|
OLAPSchema |
IOLAPSchema |
スキーマのインスタンスです。 |
|
OLAPCube |
IOLAPCube |
スキーマで作成された OLAP キューブです。 |
|
OLAPDimension |
IOLAPDimension |
スキーマのディメンションです。 |
|
OLAPAttribute |
IOLAPAttribute |
ディメンションの属性です。 |
|
OLAPHierarchy |
IOLAPHierarchy |
ディメンションの階層です。 |
|
OLAPLevel |
IOLAPLevel |
階層のレベルです。 |
|
OLAPMeasure |
IOLAPMeasure |
ディメンションのメジャーです。 |
MXML では、OLAPCube インスタンスの定義の一部として OLAP スキーマを定義することができます。通常は、OLAPCube インスタンスのプロパティをタグ属性として設定し、OLAPCube.dimensions プロパティおよび OLAPCube.measures プロパティを子タグとして設定します。以下にその例を示します。
<mx:OLAPCube name="FlatSchemaCube"
dataProvider="{flatData}"
id="myMXMLCube"
complete="runQuery(event);">
<!-- Define dimensions. -->
<mx:OLAPDimension ... />
<mx:OLAPDimension ... />
...
<!-- Define measures. -->
<mx:OLAPMeasure ... />
...
</mx:OLAPCube>
OLAPDimension 定義および OLAPMeasure 定義の順序は重要ではありませんが、各 OLAPDimension 定義の間に OLAPMeasure 定義を配置してはなりません。
OLAP スキーマを作成する一環として、キューブの各ポイントに設定するメジャーの値となるデータフィールドを指定します。メジャーは、OLAP キューブのポイントのデータ値に対応しています。例えば、売上高情報のスキーマを定義する場合は、キューブのメジャーとして製品の売上高を指定し、集計タイプとして SUM を指定します。
スキーマでは、OLAP キューブの単一のポイントに対して 1 つまたは複数のメジャーを定義できます。スキーマの最初のメジャーは「デフォルトメジャー」と呼ばれ、明示的に指定しなかった場合に OLAP クエリから返されるメジャーとなります。特定のメジャーを選択する方法について詳しくは、デフォルト以外のメジャーを使用したクエリの作成を参照してください。
次の例は、MXML のスキーマ定義の一部を示したもので、スキーマに対して 2 つのメジャーを指定しています。
<mx:OLAPMeasure name="Revenue" dataField="revenue" aggregator="SUM"/> <mx:OLAPMeasure name="Cost" dataField="cost" aggregator="SUM"/>
スキーマを作成する場合は、メジャーの名前、メジャーのデータとして使用する入力用のフラットなデータのデータフィールド、およびメジャーの集計方法を指定します。この例では、集計方法は SUM です。つまり、メジャーに対して OLAP クエリを作成すると、revenue フィールドの値がすべて合計され、OLAPDataGrid コントロールで表示する値が生成されます。このスキーマを使用してキューブを定義し、製品や地域などのデータの特性ごとに売上高とコストの情報を合計することができます。
平均や最大値など、その他の集計方法で売上高のデータを集計する場合は、別のスキーマを作成して、OLAP キューブを個別に定義します。次の例は、別の MXML スキーマ定義の一部分を抜き出したものです。ここでは、売上高データの集計方法が MAX に、コストデータの集計方法が MIN に指定されています。
<mx:OLAPMeasure name="Revenue" dataField="revenue" aggregator="MAX"/> <mx:OLAPMeasure name="Cost" dataField="cost" aggregator="MIN"/>
スキーマによっては、実行できるクエリのタイプが制限されたり、集計を作成できる詳細レベルが制限されたりするので、スキーマの定義方法には注意する必要があります。
OLAPSchema インスタンスでは任意の数のディメンションを定義することが可能で、入力データによってのみ制限されます。ディメンションは単一レベルの単純なものでも、複数レベルの複雑なものでも定義できます。スキーマのディメンションの基本的な形式は常に同じです。
<mx:OLAPDimension name="QuarterDim">
<mx:OLAPAttribute name="Quarter" dataField="quarter"/>
...
<mx:OLAPHierarchy name="QuarterHier" hasAll="true">
<mx:OLAPLevel attributeName="Quarter"/>
...
</mx:OLAPHierarchy>
</mx:OLAPDimension>
このスキーマの以下の点に注目してください。
ディメンションは、OLAPHierarchy クラスのインスタンスを定義しています。そのため、ディメンションには複数のレベルを持つ階層が含まれるものと見なされます。これは、階層に単一のレベルしか含まれない場合も同様です。
単純なディメンション(単一レベルのディメンション)を作成するには、次の例のようにディメンションの階層を定義します。
<mx:OLAPDimension name="CustomerDim">
<mx:OLAPAttribute name="Customer" dataField="customer"/>
<mx:OLAPHierarchy name="CustomerHier" hasAll="true">
<mx:OLAPLevel attributeName="Customer"/>
</mx:OLAPHierarchy>
</mx:OLAPDimension>
この例では、入力データの customer フィールドが、ディメンションのメジャー全体を定義しています。
データフィールドが複数ある場合は、データのフィールドごとに個別のディメンションを作成するのではなく、関連するデータフィールドを単一のディメンションの中でグループ化することができます。例えば、month、quarter および year など、取引時期に関連する複数のフィールドを持つデータを使用できます。また、region、state、province または country など、取引地域に関連する複数のフィールドを持つデータも使用できます。
次の例の TimeDim ディメンションでは、2 つのレベルを持つ階層ディメンションを定義しています。1 つは year、もう 1 つは quarter です。
<mx:OLAPCube name="FlatSchemaCube"
dataProvider="{flatData}"
id="myMXMLCube">
<mx:OLAPDimension name="TimeDim">
<mx:OLAPAttribute name="Year" dataField="year"/>
<mx:OLAPAttribute name="Quarter" dataField="quarter"/>
<mx:OLAPHierarchy name="Time-PeriodHier" hasAll="true">
<mx:OLAPLevel attributeName="Year"/>
<mx:OLAPLevel attributeName="Quarter"/>
</mx:OLAPHierarchy>
</mx:OLAPDimension>
<mx:OLAPMeasure name="Revenue"dataField="revenue" aggregator="SUM"/>
</mx:OLAPCube>
このスキーマ定義では、すべての時期、個別の年、個別の四半期または特定の年の個別の四半期についてデータを集計できます。
TimeDim ディメンションには、最も包括的なレベルとして Year レベルが含まれ、より詳細なレベルとして Quarter レベルが含まれていることに注意してください。一般的に、階層の最初のレベルでは最も包括的なレベルを定義し、より詳細なレベルを後続のレベルで定義します。
取引の行われた月を表す month フィールドがデータに含まれている場合は、TimeDim ディメンションに Month レベルを追加することができます。month は quarter よりも詳細な時期を表すメジャーなので、次の例のように、Quarter レベルの後に Month レベルを追加します。
<mx:OLAPDimension name="TimeDim">
<mx:OLAPAttribute name="Year" dataField="year"/>
<mx:OLAPAttribute name="Quarter" dataField="quarter"/>
<mx:OLAPAttribute name="Month" dataField="month"/>
<mx:OLAPHierarchy name="Time-PeriodHier" hasAll="true">
<mx:OLAPLevel attributeName="Year"/>
<mx:OLAPLevel attributeName="Quarter"/>
<mx:OLAPLevel attributeName="Month"/>
</mx:OLAPHierarchy>
</mx:OLAPDimension>
階層スキーマを作成する利点は、最上位レベルのデータ集計を抽出するクエリでも、より詳細なデータを抽出するためにドリルダウンを行うクエリでも記述できることです。前のスキーマ定義では、year など、最も包括的なフィールドに基づいてデータを集計する OLAP クエリを記述することができます。また、より詳細な結果を得るためにドリルダウンを行い、各年の四半期、各四半期の月または各年の月に基づいてデータを集計するクエリを記述することもできます。
ここまでに示してきた OLAP スキーマのほとんどは、以下の形式で定義されています。
<mx:OLAPDimension name="TimeDim">
<mx:OLAPAttribute name="Year" dataField="year"/>
<mx:OLAPAttribute name="Quarter" dataField="quarter"/>
<mx:OLAPHierarchy name="Time-PeriodHier" hasAll="true">
<mx:OLAPLevel attributeName="Year"/>
<mx:OLAPLevel attributeName="Quarter"/>
</mx:OLAPHierarchy>
</mx:OLAPDimension>
このスキーマでは、階層の OLAPHierarchy.hasAll プロパティを true に設定して、階層のデフォルトメンバーを作成しています。デフォルトメンバーは階層に対して自動的に作成され、階層のすべてのレベルの集計が含まれます。前のスキーマでは、デフォルトメンバーに、すべての年のすべての四半期に関するスキーマのメジャーの集計が含まれています。
デフォルトメンバーは、ディメンションを集計する条件を指定しなかった場合に、OLAP クエリによって使用されます。例えば、OLAP スキーマに ProductDim、TimeDim および CustomerDim の各ディメンションが含まれているとします。ここで、製品と顧客に基づいてデータを抽出するクエリを記述し、取引時期に関する指定は省略したとします。この場合、OLAP クエリは自動的にディメンションのデフォルトメンバーを使用して、TimeDim ディメンションの情報を集計します。
OLAPHierarchy.hasAll プロパティのデフォルト値は true です。false に設定した場合、OLAP クエリは階層の最初のレベルを使用して、ディメンションを集計します。次のスキーマでは、hasAll プロパティを false に設定します。
<mx:OLAPDimension name="TimeDim">
<mx:OLAPAttribute name="Year" dataField="year"/>
<mx:OLAPAttribute name="Quarter" dataField="quarter"/>
<mx:OLAPHierarchy name="Time-PeriodHier" hasAll="false">
<mx:OLAPLevel attributeName="Year"/>
<mx:OLAPLevel attributeName="Quarter"/>
</mx:OLAPHierarchy>
</mx:OLAPDimension>
hasAll プロパティが false に設定されているので、クエリから TimeDim ディメンションを省略すると、OLAP クエリは自動的に Year レベルに基づいてディメンションのデータを集計します。
デフォルトでは、OLAP キューブは (All) という名前のディメンションにメンバーを追加して、デフォルトメンバーを表します。次の例のように、OLAPHierarchy.allLevelName プロパティを使用して別の名前を指定できます。
<mx:OLAPDimension name="TimeDim">
<mx:OLAPAttribute name="Year" dataField="year" allLevelname="AllTime"/>
<mx:OLAPAttribute name="Quarter" dataField="quarter"/>
<mx:OLAPHierarchy name="Time-PeriodHier" hasAll="true">
<mx:OLAPLevel attributeName="Year"/>
<mx:OLAPLevel attributeName="Quarter"/>
</mx:OLAPHierarchy>
</mx:OLAPDimension>
OLAP クエリを実行する場合は、クエリ結果にデフォルトメンバーを含めるかどうかを選択します。詳細については、クエリでのデフォルトメンバーの使用を参照してください。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート