Adobe Flex 3 ヘルプ

単純な OLAP キューブのクエリの記述

単純な OLAP キューブでは、キューブのすべてのディメンションで単一のレベルを定義します。例えば、フラットなデータに 3 つのフィールドがあるとします。

data:Object = {
    product:"ColdFusion"
    quarter :"Q1"
    revenue: "100.00", 
}

各レコードのデータフィールドには次の値を格納します。

  • product フィールドには、ColdFusion、Flex、Dreamweaver、および Illustrator という値を格納します。
  • quarter フィールドには、Q1、Q2、Q3、および Q4 という値を格納します。

このデータの 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

このキューブの以下の点に注目してください。

  • ProductDim ディメンションには、Product および ProductHier という 2 つの階層が含まれています。キューブには、各レベルに対して OLAPLevel クラスで指定された階層が作成され、各階層に対して OLAPHierarchy クラスで指定された階層が作成されます。QuarterDim ディメンションについても同様で、2 つの階層が含まれています。
  • メンバーの順序は各ディメンションに対応した値を表し、フラットなデータに記録されているメンバーの順序に基づいています。この例では、四半期は Q1、Q2、Q3 および Q4 の順序で記述されています。これは、フラットなデータが四半期に基づいてソートされているからです。ただし、データが四半期でソートされていない場合は、QuarterDim のメンバーが異なる順序で記述されることになります。
  • 各ディメンションには単一のレベルが含まれています。そのため、(All) レベルには、階層の最初のレベルと同じデータが含まれます。例えば、ProdcutHier 階層の (All) レベルには、Product レベルと同じデータが含まれます。複雑なキューブの場合、(All) レベルには追加情報が含まれます。

複雑なキューブの例については、複雑な 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 ファイルは以下のとおりです。

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート