疎メンバーの組合せのグループ化
Essbaseブロック・ストレージ・データ・ロードのパフォーマンスを向上させるために、必要なディスクI/O (読取りおよび書込み)数を最小限に抑えるようにデータを構造化できます。
この項は、集約ストレージ・キューブには適用されません。
パフォーマンス向上に最も効果的な戦略は、キューブに対する書込みや読取りの間にEssbaseが実行する必要のあるディスクI/O数を最小化することです。Essbaseではデータがブロックごとにロードされるため、ソース・データを物理的なブロック編成に対応するように編成すると、Essbaseで実行する必要のある物理的なディスクI/O数が減ります。
ソース・データを整理して、疎ディメンションの同じ一意の組合せを持つレコードをグループ化します。この配列はデータベース内のブロックに対応します。
この章の例では、この戦略に従ってデータを編成する方法を示します。これらの例では、次に説明するように、Sample.Basicキューブのサブセットを使用します。
表34-1 例のディメンションと値
疎の属性以外のディメンション | 密ディメンション |
---|---|
Scenario (Budget、Actual) |
Measures (Sales、Margin、COG、Profit) |
Product (Cola, Root Beer) |
Year (Jan, Feb) |
Market (Florida, Ohio) |
ノート:
属性ディメンションは疎ディメンションですが、データを属性ディメンションにロードないため、この項での説明には関係しません。
次に示すデータ・ソースについて考えてみます。疎ディメンション・メンバーの組合せ別にグループ化されていないため、このデータは最適化のためのソートは行われていません。Essbaseでの各レコードの読取りのたびに、疎ディメンションの異なるメンバーの処理が必要になります。
Jan
Actual Cola Ohio Sales 25
Budget "Root Beer" Florida Sales 28
Actual "Root Beer" Ohio Sales 18
Budget Cola Florida Sales 30
Essbaseでは、1つではなく4つのブロックにアクセスするため、このデータ・ロードには時間がかかります。
同じSample.Basicキューブの最適に編成されたデータ・ソースでは、疎ディメンション・メンバーの一意の組合せによってActual -> Cola -> Ohioの順にソートされた異なるレコードが示されます。Essbaseで1つのブロックにアクセスするのみで、これらのレコードがロードされます。
Actual Cola Ohio Jan Sales 25
Actual Cola Ohio Jan Margin 18
Actual Cola Ohio Jan COGS 20
Actual Cola Ohio Jan Profit 5
レコードごとに多数のセルをロードするソースを使用できます。レコードが、一意の疎ディメンション・メンバーの組合せでグループ化されていることを確認します。次に、複数の値を指定するレコードのディメンションが密ディメンションであるようにレコードを並べます。
次の例では、ヘッダー・レコードを使用して、密ディメンションであるMeasuresディメンションのメンバーを特定しています。データは、最初に密ディメンションであるYearのメンバーごとにソートされた後、他のディメンションのメンバーごとに階層的にグループ化されています。各レコードには、Measuresディメンションの複数の値が示されています。
Sales Margin COG Profit
Jan Actual Cola Ohio 25 18 20 5
Jan Actual Cola Florida 30 19 20 10
Jan Actual "Root Beer" Ohio 18 12 10 8
Jan Actual "Root Beer" Florida 28 18 20 8
この例では、必要な行が見出しと最初のデータ行の2行であることに注目してください。前の例では、同じデータに対して4行が必要です。