単純な OLAP キューブでは、キューブのすべてのディメンションで単一のレベルを定義します。例えば、フラットなデータに 3 つのフィールドがあるとします。
data:Object = {
product:"ColdFusion"
quarter :"Q1"
revenue: "100.00",
}
各レコードのデータフィールドには次の値を格納します。
このデータの OLAP スキーマでは 2 つのディメンションを定義し、次のコードのように、それぞれが単一のレベルを定義します。
<mx:OLAPCube name="FlatSchemaCube"
dataProvider="{flatData}"
id="myMXMLCube"
complete="runQuery(event);">
<mx:OLAPDimension name="ProductDim">
<mx:OLAPAttribute name="Product" dataField="product"/>
<mx:OLAPHierarchy name="ProductHier" hasAll="true">
<mx:OLAPLevel attributeName="Product"/>
</mx:OLAPHierarchy>
</mx:OLAPDimension>
<mx:OLAPDimension name="QuarterDim">
<mx:OLAPAttribute name="Quarter" dataField="quarter"/>
<mx:OLAPHierarchy name="QuarterHier" hasAll="true">
<mx:OLAPLevel attributeName="Quarter"/>
</mx:OLAPHierarchy>
</mx:OLAPDimension>
<mx:OLAPMeasure name="Revenue"
dataField="revenue"
aggregator="SUM"/>
</mx:OLAPCube>
OLAPCube.refresh() メソッドを呼び出してキューブを初期化すると、次のような構造になります。
ProductDim // Dimension
Product // Hierarchy
(All) // Member
ColdFusion // Member
Flex // Member
Dreamweaver // Member
Illustrator // Member
ProductHier // Hierarchy
(All) // Level
ColdFusion // Member
Flex // Member
Dreamweaver // Member
Illustrator // Member
Product // Level
ColdFusion // Member
Flex // Member
Dreamweaver // Member
Illustrator // Member
QuarterDim // Dimension
Quarter // Hierarchy
(All) // Member
Q1 // Member
Q2 // Member
Q3 // Member
Q4 // Member
QuarterHier // Hierarchy
(All) // Level
Q1 // Member
Q2 // Member
Q3 // Member
Q4 // Member
Quarter // Level
Q1 // Member
Q2 // Member
Q3 // Member
Q4 // Member
このキューブの以下の点に注目してください。
複雑なキューブの例については、複雑な OLAP キューブのクエリの記述を参照してください。
OLAP クエリは、基本的に次のような形式で記述します。
// Create an instance of OLAPQuery to represent the query.
var query:OLAPQuery = new OLAPQuery;
// Get the row axis from the query instance.
var rowQueryAxis:IOLAPQueryAxis = query.getAxis(OLAPQuery.ROW_AXIS);
// Create an OLAPSet instance to configure the axis.
var productSet:OLAPSet = new OLAPSet;
// Use OLAPSet.addElements() or OLAPSet.addElement() to add members to the row axis.
productSet.addElements(...);
// Add the OLAPSet instance to the axis.
rowQueryAxis.addSet(productSet);
// Get the column axis from the query instance, and configure it
// to aggregate the columns by the Quarter dimension.
var colQueryAxis:IOLAPQueryAxis = query.getAxis(OLAPQuery.COLUMN_AXIS);
var quarterSet:OLAPSet= new OLAPSet;
// Use OLAPSet.addElements() or OLAPSet.addElement() to add members to the column axis.
productSet.addElements(...);
colQueryAxis.addSet(quarterSet);
次のメソッドとプロパティを使用し、ディメンションの属性に基づいて OLAP キューブから情報を抽出します。抽出した情報は、OLAPSet.addElements() メソッドまたは OLAPSet.addElement() メソッドに渡します。
|
メソッドおよびプロパティ |
説明 |
|---|---|
| OLAPCube.findDimension(name:String):IOLAPDimension |
OLAPDimension クラスのインスタンスとして、スキーマのディメンションを返します。 |
| OLAPDimension.findAttribute(name:String):IOLAPAttributeHierarchy |
IOLAPAttributeHierarchy インターフェイスのインスタンスを返します。これは、属性のすべてのメンバーの IList インスタンスを含む属性階層です。 |
| OLAPDimension.findMember(name:String):IOLAPMember |
ディメンションの中で、指定された名前を持つメンバーを表す IOLAPMember インスタンスを返します。 |
| IOLAPAttributeHierarchy.children |
IList インスタンスとして、レベルのすべてのメンバーを含みます。ただし、(All) メンバーは含みません。 |
| IOLAPAttributeHierarchy.members |
(All) メンバーも含め、IList インスタンスとして、レベルのすべてのメンバーを含みます。 |
次の表は、これらのメソッドとプロパティの組み合わせに対して返される情報を示したものです。
|
メソッドおよびプロパティへの参照 |
戻り値 |
|---|---|
| findDimension("ProductDim").findAttribute("Product").children |
ColdFusion、Flex、Dreamweaver、Illustrator |
| findDimension("ProductDim").findAttribute("Product").members |
(All)、ColdFusion、Flex、Dreamweaver、Illustrator |
| findDimension("ProductDim").findMember("Flex") |
Flex |
| findDimension("QuarterDim").findAttribute("Quarter").children |
Q1、Q2、Q3、Q4 |
| findDimension("QuarterDim").findAttribute("Quarter").members |
(All)、Q1、Q2、Q3、Q4 |
| findDimension("QuarterDim").findMember("Q2") |
Q2 |
次のメソッドを使用することで、findAttribute() メソッドを使用せずに、キューブの階層をドリルダウンすることができます。
|
メソッド |
説明 |
|---|---|
| OLAPDimension.findHierarchy(name:String):IOLAPHierarchy |
OLAPHierarchy のインスタンスとして、ディメンションの階層を返します。このメソッドに対しては、OLAPHierarchy インスタンスまたは OLAPLevel インスタンスを指定できます。 |
| OLAPHierarchy.findLevel(name:String):IOLAPLevel |
OLAPLevel のインスタンスとして、階層のレベルを返します。 |
| OLAPLevel.findMember(name:String):IList |
ストリング引数と一致する IOLAPMember インスタンスをすべて含む IList インスタンスを返します。その後、IList.getItemAt() メソッドを使用して IList の任意のエレメントにアクセスできます。 |
次の表は、これらのメソッドの様々な組み合わせに対して返される情報を示したものです。
|
メソッドへの参照 |
戻り値 |
|---|---|
| findDimension("ProductDim").findhHierarchy("ProductHier"). findLevel("Product").children |
ColdFusion、Flex、Dreamweaver、Illustrator |
| findDimension("ProductDim").findHierarchy("ProductHier"). findLevel("Product").members |
(All)、ColdFusion、Flex、Dreamweaver、Illustrator |
| IOLAPElement(cube.findDimension("ProductDim"). findHierarchy("ProductHier").findLevel("Product"). findMember("Flex").getItemAt(0)) |
Flex。getItemAt() はオブジェクトを返すので、IOLAPElement のインスタンスに結果をキャストします。 |
| findDimension("QuarterDim").findHierarchy("QuarterHier"). findLevel("Quarter").children |
Q1、Q2、Q3、Q4 |
| findDimension("QuarterDim").findHierarchy("QuarterHier"). findLevel("Quarter").members |
(All)、Q1、Q2、Q3、Q4 |
| IOLAPElement(cube.findDimension("QuarterDim"). findHierarchy("QuarterHier").findLevel("Quarter"). findMember("Q2").getItemAt(0)) |
Q2。getItemAt() はオブジェクトを返すので、IOLAPElement のインスタンスに結果をキャストします。 |
単純なキューブの場合、OLAPDimension.findHierarchy()、OLAPHierarchy.findLevel() および OLAPLevel.findMember() の各メソッドから、OLAPDimension.findAttribute() メソッドおよび OLAPDimension.findMember() メソッドの追加機能が提供されることはありません。通常、そのような機能は、複数のレベルを持つディメンションを含む複雑なキューブで使用されます。詳細については、複雑な OLAP キューブのクエリの記述を参照してください。
最も一般的なタイプのクエリでは、スキーマの属性のすべてのメンバーに対するデータ集計が返されます。例えば、単純な OLAP キューブのクエリの記述の節で示されているように、ProductDim ディメンションおよび QuarterDim ディメンションを含むスキーマを使用して OLAP キューブを定義するとします。次に、すべての製品と四半期についてクエリを作成します。この情報は、次のクエリによって抽出します。
private function getQuery(cube:IOLAPCube):IOLAPQuery {
// Create an instance of OLAPQuery to represent the query.
var query:OLAPQuery = new OLAPQuery;
// Get the row axis from the query instance.
var rowQueryAxis:IOLAPQueryAxis = query.getAxis(OLAPQuery.ROW_AXIS);
// Create an OLAPSet instance to configure the axis.
var productSet:OLAPSet = new OLAPSet;
productSet.addElements(
cube.findDimension("ProductDim").findAttribute("Product").children);
rowQueryAxis.addSet(productSet);
var colQueryAxis:IOLAPQueryAxis = query.getAxis(OLAPQuery.COLUMN_AXIS);
var quarterSet:OLAPSet= new OLAPSet;
quarterSet.addElements(
cube.findDimension("QuarterDim").findAttribute("Quarter").children);
colQueryAxis.addSet(quarterSet);
return query;
}
前の例で実行する SWF ファイルは以下のとおりです。
この例では、列軸は findDimension() メソッドおよび findAttribute() メソッドを使用して ProductDim ディメンションおよび QuarterDim ディメンションまでドリルダウンし、売上高のデータを抽出しています。各軸について IOLAPAttributeHierarchy.children プロパティを使用し、属性のすべてのメンバーを設定します。ただし、(All) メンバーは含めません。
このクエリでは、デフォルトメジャーを使用してクエリ結果を設定しています。デフォルトメジャーは、キューブのスキーマで定義されている最初のメジャーです。そのため、クエリの一部としてメジャーを指定する必要はありません。クエリでメジャーを明示的に指定する方法については、デフォルト以外のメジャーを使用したクエリの作成を参照してください。
この例では、スキーマからメンバーを抽出するために、ProductHier および QuarterDim という階層名を指定していないことに注意してください。単一レベルのディメンションでデータを抽出する場合は、階層名を指定する必要はありません。
ただし、OLAPDimension.findHierarchy() メソッドおよび OLAPHierarchy.findLevel() メソッドを使用して、キューブを明示的にドリルダウンする場合は、この例を次の例のように書き換えることができます。
private function getQuery(cube:IOLAPCube):IOLAPQuery {
// Create an instance of OLAPQuery to represent the query.
var query:OLAPQuery = new OLAPQuery;
// Get the row axis from the query instance.
var rowQueryAxis:IOLAPQueryAxis = query.getAxis(OLAPQuery.ROW_AXIS);
// Create an OLAPSet instance to configure the axis.
var productSet:OLAPSet = new OLAPSet;
productSet.addElements(cube.findDimension(
"ProductDim").findHierarchy("ProductHier").findLevel("Product").members);
rowQueryAxis.addSet(productSet);
var colQueryAxis:IOLAPQueryAxis = query.getAxis(OLAPQuery.COLUMN_AXIS);
var quarterSet:OLAPSet= new OLAPSet;
quarterSet.addElements(
cube.findDimension("QuarterDim").findHierarchy("QuarterHier").
findLevel("Quarter").members);
colQueryAxis.addSet(quarterSet);
return query;
}
前の例で実行する SWF ファイルは以下のとおりです。
この例では、ディメンションをドリルダウンして Product レベルおよび Quarter レベルにアクセスしています。この方法は、一般的に複雑なキューブで使用し、ディメンションのメンバーを明示的に指定する必要がある場合に使用します。
前の節のクエリでは、スキーマの Product レベルおよび Quarter レベルについて、すべてのメンバーの売上高データを取得しました。ただし、単一の製品や単一の四半期について売上高データを取得する場合は、異なる方法を使用する必要があります。ディメンションをドリルダウンする場合、ディメンションの個別のメンバーを指定し、クエリを実行する対象を限定することができます。
例えば、Flex だけの四半期の売上高データを集計するクエリを作成し、他の製品は集計に含めないとします。この場合は、OLAPDimension.findMember() メソッドを使用して、メンバーの名前を指定します。このメソッドは、メンバーの名前を含むストリングを取り、そのメンバーを定義する IOLAPMember インスタンスを返します。次にその例を示します。
private function getQuery(cube:IOLAPCube):IOLAPQuery {
// Create an instance of OLAPQuery to represent the query.
var query:OLAPQuery = new OLAPQuery;
// Get the row axis from the query instance.
var rowQueryAxis:IOLAPQueryAxis = query.getAxis(OLAPQuery.ROW_AXIS);
// Create an OLAPSet instance to configure the axis.
var productSet:OLAPSet = new OLAPSet;
productSet.addElement(cube.findDimension("ProductDim").findMember("Flex"));
rowQueryAxis.addSet(productSet);
var colQueryAxis:IOLAPQueryAxis =
query.getAxis(OLAPQuery.COLUMN_AXIS);
var quarterSet:OLAPSet= new OLAPSet;
quarterSet.addElements(
cube.findDimension("QuarterDim").findAttribute("Quarter").children);
colQueryAxis.addSet(quarterSet);
return query;
}
前の例で実行する SWF ファイルは以下のとおりです。
前の例では、OLAPSet.addElements() メソッドではなく、OLAPSet.addElement() メソッドを使用して Flex メンバーを OLAPSet インスタンスに追加している点に注意してください。これは、複数のメンバーではなく、単一のメンバーを軸に追加しているからです。
OLAPDimension.findMember() メソッドを使用する場合の問題点として、キューブの中でストリング引数と一致する最初の IOLAPMember インスタンスが返されてしまう点が挙げられます。メンバーの複数のインスタンスが存在する場合は、この例を書き換えて、OLAPDimension.findHierarchy()、OLAPHierarchy.findLevel() および OLAPLevel.findMember() の各メソッドを呼び出して明示的にキューブをドリルダウンするようにします。このような状況は、複雑なディメンションを含むキューブで一般的に見られます。詳細および使用例については、複雑な OLAP キューブのクエリの記述を参照してください。
OLAPLevel.findMember() メソッドは、ストリング引数と一致する IOLAPMember インスタンスをすべて含む IList インスタンスを返します。その後、次の例のように、IList.getItemAt() メソッドを使用して IList の任意のエレメントにアクセスできます。
private function getQuery(cube:IOLAPCube):IOLAPQuery {
// Create an instance of OLAPQuery to represent the query.
var query:OLAPQuery = new OLAPQuery;
// Get the row axis from the query instance.
var rowQueryAxis:IOLAPQueryAxis = query.getAxis(OLAPQuery.ROW_AXIS);
// Create an OLAPSet instance to configure the axis.
var productSet:OLAPSet = new OLAPSet;
// Get the first IOLAPElement instance in the IList instance.
productSet.addElement(
IOLAPElement(cube.findDimension("ProductDim").findHierarchy("ProductHier").
findLevel("Product").findMember("Flex").getItemAt(0)));
rowQueryAxis.addSet(productSet);
var colQueryAxis:IOLAPQueryAxis = query.getAxis(OLAPQuery.COLUMN_AXIS);
var quarterSet:OLAPSet= new OLAPSet;
quarterSet.addElement(IOLAPMember(cube.findDimension("TimeDim").
findHierarchy("Month").findMember("January")));
quarterSet.addElement(IOLAPMember(cube.findDimension("TimeDim").
findHierarchy("Month").findMember("February")));
colQueryAxis.addSet(quarterSet);
return query;
}
前の例で実行する SWF ファイルは以下のとおりです。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート