ヘッダーをスキップ
Oracle® OLAPユーザーズ・ガイド
11g リリース2(11.2)
B61345-01
  目次へ
目次
索引へ
索引

戻る
戻る
 
次へ
次へ
 

9 高度な集計

キューブでは常に、必要に応じてサマリー・データが問合せに戻されます。キューブでは、たとえば日レベルでデータが格納できる一方、問合せにおける計算を必要とせずに四半期または年レベルで結果を戻すことができます。この章では、Oracle OLAPのユニークな集計サブシステムを最適化し、データのメンテナンスと問合せの両方に対して最高のパフォーマンスを提供する方法について説明します。

この章では、次の項目について説明します。

集計とは

集計とは、複数の値を1つの値に集約するプロセスです。たとえば、データを日単位で収集し、週単位で1つの値に集計して、その週データを月単位で1つの値に集計するといったことが可能です。集計によって、データにおけるパターンが明らかになり、これらのパターンが分析および意思決定の基礎になります。階層ディメンションを持つデータ・モデルを定義すると、集計データを計算できるフレームワークを提供できます。

「集計」は「サマリー」、「集計データ」は「サマリー・データ」とも呼ばれます。最もよく使用される集計演算子は合計ですが、その他にも平均、最初、最後、最小および最大など、多くの演算子が存在します。Oracle OLAPでは、加重法および階層法もサポートしています。次に、基本的な種類の演算子の機能を表す簡単な図をいくつか示します。すべての演算子の説明は、「集計演算子」を参照してください。

図9-1では、4つの子と1つの親値を持つ単層階層を示します。3つの子は値を持ち、4つ目の子は空です。この空のセルはNULLまたはNA値を持ちます。合計演算子は、親値として値(2+4+6)=12を算出します。

図9-1 単層階層における合計による集計

4つの値が合計され1つの値になることを示した図
「図9-1 単層階層における合計による集計」の説明

平均演算子は、すべての実データの平均を計算し、集計値として((2+4+6)/3)=4を算出します(図9-2を参照)。

図9-2 単層階層における平均による集計

4つの値が平均され1つの値になることを示した図
「図9-2 単層階層における平均による集計」の説明

階層演算子では、セルのカウントの際にNULL値が含まれます。図9-3では、階層の平均演算子は集計値((2+4+6+NA)/4)=3を算出します。

図9-3 単層階層における階層の平均による集計

4つの値が階層的に平均され1つの値になることを示した図
「図9-3 単層階層における階層の平均による集計」の説明

加重演算子では、別のメジャーにある値を使用して、集計を行う前に加重値を算出します。図9-4では、図9-1において単純に合計した値12が、加重((3×2)+(2×4)+(NA×6)+(4×NA))を使用した場合どのように変更されるかを示します。

図9-4 単層階層における重み付け合計による集計

4つの加重値が合計され1つの値になることを示した図
「図9-4 単層階層における重み付け合計による集計」の説明

集計演算子

アナリティック・ワークスペースでは、加重法、階層法、加重階層法など、様々な集計メソッドを使用できます。

基本演算子

次に、基本的な集計演算子について説明します。

  • 平均: NULL以外のデータ値を加算してから、データ値の数で合計値を除算します。

  • 最初のNA以外のデータ値: 最初の実際のデータ値を戻します。

  • 最後のNA以外のデータ値: 最後の実際のデータ値を戻します。

  • 最大: 各親の子全体における最大のデータ値を戻します。

  • 最小: 各親の子全体における最小のデータ値を戻します。

  • 非加算: データの集計は行われません。

  • 合計: 複数のデータ値を加算します。

伸縮法および加重法の演算子

これらの演算子には、同一キューブ内で加重値またはスケール値を与えるメジャーが必要です。重み付けメジャーでは、NA(NULL)は1として計算されます。一方スケール・メジャーでは、NAは0として計算されます。

「集計の順序によって結果が異なるケース」で説明するように、重み付け演算子では外部結合が使用されます。

次に、伸縮法および加重法の演算子を示します。

  • スケール合計: 加重オブジェクトの値を各データ値に追加してから、それらのデータ値を加算します。

  • 重み付け平均: 加重因数で各データ値を乗算し、それらのデータ値を加算してから、加重因数の合計でその結果を除算します。

  • 最初の重み付け: 最初の非NULLデータ値と、それに対応する加重値との乗算を行います。

  • 最後の重み付け: 最後の非NULLデータ値と、それに対応する加重値との乗算を行います。

  • 重み付け合計: 加重因数で各データ値を乗算してから、それらのデータ値を加算します。

階層演算子

次に、階層演算子について説明します。これらの演算子では、セルにデータが含まれているかどうかに関係なく、階層によって識別されるすべてのセルが計算に含まれます。

階層平均演算子および階層重み付け演算子では外部結合が使用されます。

  • 階層の平均: データ値を加算してから、ディメンション階層の子の数でその合計値を除算します。NULL以外の子のみをカウントする「平均」とは異なり、階層の平均では、ある親に属するすべての子をカウントします。これは、それぞれの子が値を持っているかどうかに関係しません。

  • 階層の最初のメンバー: 階層内の最初のデータ値(NULL値も含む)を戻します。

  • 階層の最後のメンバー: 階層内の最後のデータ値(NULL値も含む)を戻します。

  • 階層の重み付け平均: 非NULLの子データ値を対応する加重値で乗算してから、加重値の合計でその結果を除算します。「重み付け平均」とは異なり、「階層の重み付け平均」では、対応する子値がNULLの場合でも、分母の合計に加重値が含まれます。

  • 階層内で最初に重み付けされた値: 階層内の最初のデータ値(NULL値も含む)と、それに対応する加重値との乗算を行います。

  • 階層内で最後に重み付けされた値: 階層内の最後のデータ値(NULL値も含む)と、それに対応する加重値との乗算を行います。

集計の順序によって結果が異なるケース

OLAPエンジンでは、1回につき1つのディメンションについてキューブの集計が行われます。すべてのディメンションに対して同じ集計演算子が使用されるときは、その演算子の種類によって、計算される集計値が集計の順序によって異なる場合と集計の順序によらず一定になる場合とがあります。

1つのキューブに対して複数の集計メソッドを使用する場合は、集計の順序を指定する必要があります。ただ1つの例外として、同じディメンションについて単に重み付けメジャーの集計を行う場合は、「合計」と「重み付け合計」、または「平均」と「重み付け平均」を組み合せることができます。たとえば、Customerディメンションに対する重み付け平均の計算に使用する重み付けメジャーそのものを、単にCustomerディメンションについて集計する場合などです。

重み付け演算子は、指定したディメンションおよびそれに先行するすべてのディメンションに対して圧縮することはできません。圧縮キューブに対しては、できるだけ早く重み付け演算子をリスト表示して、外部結合の数を最小にする必要があります。たとえばあるキューブにおいて、Customerディメンションに対しては「重み付け合計」が使用され、それ以外のすべてのディメンションに対しては「合計」が使用されるとします。この場合、Customerが最初に集計されるとパフォーマンスが最も高くなります。

キューブのすべてのディメンションに対する同一演算子の使用

次に示すのは、キューブに対して集計規則を定義する際、ディメンションの順序を指定する必要がある場合のガイドラインです。

順序によらず集計結果が一定のもの

キューブのすべてのディメンションに対して次の演算子を使用した場合は、順序によって結果が異なることはありません。

  • 最大

  • 最小

  • 合計

  • 階層の最初のメンバー

  • 階層の最後のメンバー

  • 階層の平均

順序によって集計結果が異なるもの

キューブのすべてのディメンションに対して次の演算子を使用した場合も、順序によって結果が異なることがあります。

  • 平均

  • 最初のNA以外のデータ値

  • 最後のNA以外のデータ値

  • 最初の重み付け

  • 最後の重み付け

  • 階層内で最初に重み付けされた値

  • 階層内で最後に重み付けされた値

  • スケール合計

順序によって集計結果が異なる場合があるもの

キューブのすべてのディメンションに対して次の重み付け演算子を使用した場合は、複数のディメンションについて重み付けメジャーが集計されたときにかぎり、順序によって結果が異なります。

  • 重み付け平均

  • 重み付け合計

  • 階層の重み付け平均

例: 異なる集計演算子の併用

合計演算子および最大演算子をそれぞれ単独で使用する場合はディメンションを順序付ける必要はありませんが、それらを併用する場合は順序を指定する必要があります。次の図で、集計の順序によって計算結果がどのように変わるかを説明します。図9-5に、2つのディメンションを持つ1つのキューブを示します。まずキューブの一方のディメンションに対して「合計」が計算され、次にもう一方のディメンションに対して「最大」が計算されます。

図9-5 合計メソッドの後に最大メソッドを実行

集計演算子を併用した結果(1)
「図9-5 合計メソッドの後に最大メソッドを実行」の説明

図9-6も同じキューブを示したものですが、ここでは、最初にキューブの一方のディメンションに対して「最大」が計算され、次にもう一方のディメンションに対して「合計」が計算されます。図9-5では合計の最大値が15であるのに対して、図9-6では最大値の合計が19になっています。

図9-6 最大メソッドの後に合計メソッドを実行

集計演算子を併用した結果(2)
「図9-6 最大メソッドの後に合計メソッドを実行」の説明

例: Unitsキューブの集計

この例では、GLOBALアナリティック・ワークスペースのUnitsキューブに対するデフォルト集計の変更について説明します。これらの変更は、次のデータ・リフレッシュ時に反映されます。

集計演算子および階層の選択

Analytic Workspace Managerでは、最初にすべてのディメンションに対して合計演算子を使用するよう設定した上で、すべてのディメンションのすべてのレベルを集計します。これらのデフォルト設定を変更する場合は、「集計」タブの「ルール」サブタブを使用します。

図9-7に、Unitsキューブに対する演算子を示します。Timeは、現在「最後のNA以外のデータ値」に設定されており、他のディメンションの後に集計されます。「最初」や「最後」などの演算子の場合、ディメンションの集計順序により、結果が異なる場合があります。

また、データ・メンテナンス時にCustomerディメンションのShipments階層のみ集計が行われるよう変更されています。Segment階層が問合せの対象となることはほとんどないため、グローバルDBAは、メンテナンスに要する時間や記憶域を節約するために、これらの集計値を計算しないように選択します。ただし、Segmentの集計を要求する問合せに対しては応答時間が長くなります。

図9-7 集計演算子の選択

「キューブの作成」ダイアログ・ボックス、「ルール」サブタブ
「図9-7 集計演算子の選択」の説明

事前計算値の割合の選択

Analytic Workspace Managerでは最初に、最下位パーティションに対しては35%の事前計算値、最上位パーティションに対しては0%の事前計算値を使用するコストベース集計が選択されます。パーティション化されていないキューブも35%に設定されます。この設定の場合、集計値の35%についてはデータ・メンテナンス時に計算された上で格納され、残りの65%については問合せへの応答時に計算されます。こうした設定により、データ・メンテナンスが最適化されます。

最下位パーティションに対する事前計算の割合を増やすと、最下位パーティションおよび最上位パーティションの問合せが効率化されます。また、最上位パーティションに対する事前計算の割合を増やすと、パーティション化されたディメンションの最も集計されたデータおよびその他の階層に対する問合せが効率化されます。

図9-8に、Unitsキューブに関する設定を示します。ここでは、グローバルDBAにより、最上位パーティションにおける割合は0%に維持され、最下位パーティションにおける割合は35%から50%へ増加させるよう選択されています。この変更により、メンテナンスに要する時間や記憶域は増加しますが、すべてのパーティションで実行時のパフォーマンスは向上します。

図9-8 コストベースのプレサマリー作成の設定

「キューブの作成」ダイアログ・ボックス、「事前計算」サブタブ
「図9-8 コストベースのプレサマリー作成の設定」の説明