Adobe Flex 3 ヘルプ

OLAP クエリの作成

OLAPDataGrid コントロールで表示する集計データを OLAP キューブから抽出するには、OLAP クエリを使用します。OLAP クエリでは、OLAPDataGrid コントロールでデータを表示できるように、行と列で構成された 2 次元テーブルで結果セットを定義します。

次の表では、クエリの定義に使用するクラスとインターフェイスについて説明します。

クラス

インターフェイス

説明

AsyncToken

 

OLAPQuery.execute() メソッドの結果です。

OLAPCell

IOLAPCell

タプルで定義されたキューブの領域です。

OLAPMember

IOLAPMember

ディメンションのメンバーです。

OLAPQuery

IOLAPQuery

クエリインスタンスです。

OLAPQueryAxis

IOLAPQueryAxis

クエリの軸です。

OLAPResult

IOLAPResult

クエリ結果です。

OLAPSet

 

軸に対するメンバーのセットです。

OLAPTuple

IOLAPTuple

1 つ以上のメンバーを含むタプルです。

注意: このトピックの例では、多くの場合、クラスではなくインターフェイスを使用します。インターフェイスを使用する理由の 1 つは、カスタマイズしたクラスを定義し、これらのインターフェイスを実装する場合に、コードを変更する必要がないからです。

クエリの作成

クエリは、次の手順で準備します。

  1. クエリを実行するキューブを用意します。詳細については、クエリを実行するキューブの準備を参照してください。
  2. クエリを表す OLAPQuery クラスのインスタンスを定義します。詳細については、クエリ軸の作成を参照してください。
  3. クエリの行を表す OLAPQueryAxis クラスのインスタンスを定義します。
  4. OLAPSet クラスのインスタンスを定義して、行軸の情報を提供するメンバーを定義します。詳細については、単純な OLAP キューブのクエリの記述および複雑な OLAP キューブのクエリの記述を参照してください。
  5. クエリの列を表す OLAPQueryAxis クラスのインスタンスを定義します。
  6. OLAPSet クラスのインスタンスを定義して、列軸の情報を提供するメンバーを定義します。
  7. オプションで OLAPQueryAxis クラスのインスタンスを定義して、スライサ軸を指定します。詳細については、スライサ軸の作成を参照してください。
  8. OLAPSet クラスのインスタンスを定義して、スライサ軸の情報を提供するメンバーを定義します。
  9. OLAPCube.execute() を呼び出して、キューブに対してクエリを実行します。詳細については、クエリを実行し、結果を OLAPDataGrid コントロールに返すを参照してください。
  10. クエリ結果を OLAPDataGrid コントロールに渡します。

クエリを実行するキューブの準備

OLAPCube.refresh() メソッドを呼び出し、キューブの入力データを初期化するまで、OLAP キューブに対してクエリを実行することはできません。キューブの初期化が完了すると、OLAP キューブから complete イベントが送出され、キューブに対してクエリを実行する準備が整ったことが通知されます。

イベントハンドラを使用してキューブを初期化し、クエリを呼び出します。次の例では、アプリケーションの creationComplete イベントを使用してキューブを初期化し、キューブの complete イベントを使用してクエリを実行します。

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="creationCompleteHandler();">

<mx:Script>
    <![CDATA[

        private function creationCompleteHandler():void {
            // You must initialize the cube before you 
            // can execute a query on it.
            myMXMLCube.refresh();
        }

        // Event handler to execute the OLAP query 
        // after the cube completes initialization.
        private function runQuery(event:CubeEvent):void {
            ...
        }
    ]]>
</mx:Script>

<mx:OLAPCube name="FlatSchemaCube" 
    dataProvider="{flatData}" 
    id="myMXMLCube"
    complete="runQuery(event);">
    ...
</mx:OLAPCube>

クエリ軸の作成

次の例は、各四半期の製品ごとの売上高のクエリ結果を表示した OLAPDataGrid コントロールを示しています。

äeélîºäŽÇÃêªïiÇðÇýÇÃîÑè„çÇÇÃÉNÉGÉäåãâþÇšï\é¶ÇµÇ¾ OLAPDataGrid ÉRÉìÉgÉçÅ[Éã

クエリを作成するには、行軸、列軸、およびスライサ軸(オプション)を定義する必要があります。各軸は、IOLAPQueryAxis インターフェイスのインスタンスです。次の表で、各タイプの軸について説明します。

説明

OLAPDataGrid コントロールの各行に表示されるデータを定義します。前の図では、各製品を示す行を定義しています。この軸は必須です。

列に表示するデータを定義します。前の図では、各年を示す列を定義しています。この軸は必須です。

スライサ

オプションでフィルタを定義して、クエリ結果のサイズを縮小します。主に、2 次元以上のディメンションから次元数を減少させるために使用し、OLAPDataGrid コントロールに結果を表示できるようにします。また、デフォルト以外のメジャーに対してデータ集計を返す場合にも、スライサアクセスを使用します。スライサ軸の使用について詳しくは、スライサ軸の作成を参照してください。

OLAPQueryAxis インスタンスを構築する場合は、OLAPQuery.getAxis() メソッドを使用して軸を初期化し、次の例のように、行軸、列軸またはスライサ軸として設定します。

    // 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 colQueryAxis:IOLAPQueryAxis =     query.getAxis(OLAPQuery.COLUMN_AXIS);         
    ...

クエリ軸へのデータの設定

クエリ軸にデータを設定する OLAP キューブのディメンションのメンバーを指定するには、OLAPSet クラスを使用します。OLAPSet インスタンスにメンバーを追加するには、OLAPSet.addElement() メソッドまたは OLAPSet.addElements() メソッドを呼び出します。これらのメソッドについて次の表で説明します。

OLAPSet メソッド

説明

addElement(e:IOLAPElement):void

セットに単一のエレメントを追加します。

  • IOLAPHierarchy インスタンスまたは IOLAPAttributeHierarchy インスタンスをメソッドに渡すと、階層のデフォルトメンバーがセットに追加されます。
  • IOLAPLevel インスタンスをメソッドに渡すと、そのレベルのすべてのメンバーがセットに追加されます。
  • IOLAPMember インスタンスを渡すと、セットにメンバーが追加されます。
addElements(members:IList):void

セットに複数のエレメントを追加します。

詳細については、単純な OLAP キューブのクエリの記述および複雑な OLAP キューブのクエリの記述を参照してください。

クエリを実行し、結果を OLAPDataGrid コントロールに返す

OLAP キューブは複雑になる場合があり、Flex が OLAP クエリの結果を計算している間、アプリケーションが停止してしまう場合があります。そのため、クエリの実行時は、クエリの結果を処理する 2 つのコールバック関数を設定します。Flex は、クエリが完了すると、これらの関数を呼び出します。このアーキテクチャを使用するとクエリを非同期に実行できるので、クエリの処理中もアプリケーションの実行を継続できます。

クエリは、OLAPCube.execute() メソッドを呼び出して実行します。OLAPCube.execute() メソッドは、AsyncToken クラスのインスタンスを返します。AsyncToken クラスは AsyncResponder クラスと共に使用し、実行の完了時にクエリ結果を処理する 2 つのコールバック関数を指定します。

この例では、クエリが正しく処理されると、関数 showResult() がクエリ結果を処理します。また、クエリの実行時に検出されたエラーは、関数 showFault() が処理します。

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        creationComplete="creationCompleteHandler();">

<mx:Script>
    <![CDATA[
        
        private function creationCompleteHandler():void {
            // You must initialize the cube before you 
            // can execute a query on it.
            myMXMLCube.refresh();
        }

        // Create the OLAP query.
        private function getQuery(cube:IOLAPCube):IOLAPQuery {
            ...
        }

        // Event handler to execute the OLAP query 
        // after the cube completes initialization.
        private function runQuery(event:CubeEvent):void {
            // Get cube.
            var cube:IOLAPCube = IOLAPCube(event.currentTarget);
            // Create a query instance.
            var query:IOLAPQuery = getQuery(cube);
            // Execute the query.
            var token:AsyncToken = cube.execute(query);
            // Set up handlers for the query results.
            token.addResponder(new AsyncResponder(showResult, showFault));
        }

        // Handle a query fault.
        private function showFault(error:ErrorMessage, token:Object):void {
            Alert.show(error.faultString);
        }

        // Handle a query success.
        private function showResult(result:Object, token:Object):void {
            if (!result) {
                Alert.show("No results from query.");
                return;
            }

            myOLAPDG.dataProvider= result as OLAPResult;
        }
    ]]>
</mx:Script>

<mx:OLAPCube name="FlatSchemaCube" 
    dataProvider="{flatData}" 
    id="myMXMLCube"
    complete="runQuery(event);">
    ...
</mx:OLAPCube>
<mx:OLAPDataGrid id="myOLAPDG" width="100%" height="100%" />

クエリでのデフォルトメンバーの使用

これまでに示したクエリでは、多くの場合、ProductDim および TimeDim など、OLAP キューブの 2 つのディメンションだけを参照してきました。ここでは、クエリから省略した他のディメンションがどのように扱われているかを説明します。

すべてのディメンションには、明示的または暗黙的なデフォルトメンバーがあります。ディメンションを参照せずにクエリを実行すると、デフォルトメンバーを使用して、そのディメンションのデータが集計されます。スキーマのデフォルトメンバーの定義について詳しくは、スキーマのデフォルトメンバーの作成を参照してください。

OLAPDataGrid コントロールのデフォルトセルストリングの指定

クエリを定義する場合は、OLAPDataGrid のセルに値が含まれていない状況が作成される場合があります。例えば、顧客と製品に基づいてデータを集計する場合、Illustrator を購入したことがない顧客が存在する場合もあります。そのような顧客と製品の組み合わせの場合、対応する OLAPDataGrid のセルには「NaN」というストリングが表示されます。

このストリングは、OLAPDataGrid.defaultCellString を設定することによってカスタマイズできます。例えば、このストリングを「No value」に設定する場合は、次のように OLAPDataGrid コントロールを作成します。

<mx:OLAPDataGrid id="myOLAPDG"
    defaultCellString="No value"
    width="100%" height="100%"/>

 

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