MicroStrategy ONE
Preserve All Final Pass Result Elements
以下の Preserve All Final Pass Result Elements VLDB プロパティ設定は、最終結果とルックアップ テーブルおよび関係テーブルを外部結合する方法を決定します。
- デフォルトの [最終パス結果テーブルおよびルックアップ/関係テーブル間の共通エレメントを保存] オプションを選択すると、SQL エンジンは等価結合を生成します。この場合、両方のテーブルに共通のエレメントのみが表示されます。
- [最終結果パスのエレメントを保存] オプションを選択した場合には、SQL エンジンは外部結合を生成し、レポートには最終結果セットに含まれるすべてのエレメントが組み込まれます。この設定をオンにすると、ファクト テーブルからルックアップ テーブル、さらにあらゆる関係テーブルまでの任意の結合に対して外部結合が生成されます。これは、ルックアップ テーブルおよび関係テーブルとして使用されているテーブルをそれぞれ区別することが難しく、1 つのテーブルがこの 2 つの役割を受け持つことがよくあるためです。たとえば、LOOKUP_DAY とした場合、Day アトリビュートのルックアップ テーブルだけでなく Day と Month の関係テーブルをも表します。
この設定は、標準的なデータ ウェアハウスでは使用しないでください。標準的なウェアハウスにはルックアップ テーブルが適切に維持されており、ファクト テーブル内のすべてのエレメントがそれぞれのルックアップ テーブル内にエントリを持っています。この設定は、ファクト テーブル内の特定のアトリビュートに、対応するルックアップ テーブルを超える数の固有のアトリビュート エレメントが含まれている場合にのみ使用します。たとえば、上記の例では、ファクト テーブルには異なる 5 つの店舗の売上が含まれていますが、店舗テーブルには 4 つの店舗しか含まれていません。標準的なデータ ウェアハウスでは、定義上ルックアップ テーブルにはすべてのアトリビュート エレメントが含まれることになっているため、このようなことは起こりません。ただし、ルックアップ テーブルより高い頻度でファクト テーブルが更新される場合は、これが起こる可能性はあります。
- [関係テーブルではなくルックアップテーブルを考慮した最終パスのすべてのエレメントを保存] オプションを選択すると、SQL エンジンは最終パスを除くすべてのパスで内部結合を生成し、最終パスでは外部結合を生成します。
- [レポート レベル設定を無視して、アトリビュート レベルの設定による、最終パスのエレメントを保存。これをアトリビュート レベルで選択する場合、共通エレメント保存として扱います。(例、選択肢 1)] 、アトリビュート レベルでのこの VLDB プロパティの設定が使用されます。
この設定は、少数のアトリビュートのみに異なる結合タイプが必要な場合に便利です。たとえば、レポートのアトリビュートのうち最終パス テーブルからのエレメントを保存する必要があるものが 1 つだけである場合、その 1 つのアトリビュートに対して VLDB プロパティを [Preserve all final pass result elements] に設定できます。次にレポートを VLDB プロパティの「設定を無視」するように設定できます。レポートが実行されると、設定が異なるアトリビュートだけが SQL で外部結合されるようになります。他のすべてのアトリビュートのルックアップ テーブルは、SQL のパフォーマンスが向上する等結合を使用して結合されます。
例:[最終パス結果テーブルおよびルックアップ/関係テーブル間の共通エレメントを保存]
レポートのテンプレートには、"店舗" と "売上 (ドル)" があります。
[最終パス結果テーブルおよびルックアップ/関係テーブル間の共通エレメントを保存] オプションを選択すると、下記の SQL を使用して以下の結果が返されます。
Store (店舗) | 売上 (ドル) |
東部 |
5000 |
中部 |
8000 |
南部 |
12000 |
select a11.Store_id Store_id,
max(a12.Store) Store,
sum(a11.DollarSls) WJXBFS1
from Fact a11
join Store a12
on (a11.Store_id = a12.Store_id)
group by a11.Store_id
例:[最終結果パスのエレメントを保存]
レポートのテンプレートには、"店舗" と "売上 (ドル)" があります。
[最終結果パスのエレメントを保存] オプションを選択すると、下の SQL エンジンを使用して以下の結果が返されます。Store_ID 4 と 5 のデータが次のようになっていることに注意してください。
Store (店舗) | 売上 (ドル) |
東部 |
5000 |
中部 |
8000 |
南部 |
12000 |
|
3000 |
|
1500 |
select a11.Store_id Store_id,
max(a12.Store) Store,
sum(a11.DollarSls) WJXBFS1
from Fact a11
left outer join Store a12
on (a11.Store_id = a12.Store_id)
group by a11.Store_id
例:関係テーブルではなくルックアップテーブルを考慮した最終パスのすべてのエレメントを保存
レポートのテンプレートには、"国"、"メトリック 1"、および "メトリック 2" があります。各メトリック用に以下のファクト テーブルが存在します。
CALLCENTER_ID | ファクト 1 |
1 |
1000 |
2 |
2000 |
1 |
1000 |
2 |
2000 |
3 |
1000 |
4 |
1000 |
EMPLOYEE_ID | ファクト 2 |
1 |
5000 |
2 |
6000 |
1 |
5000 |
2 |
6000 |
3 |
5000 |
4 |
5000 |
5 |
1000 |
SQL エンジンは 3 つのパスを実行します。最初のパスでは、SQL エンジンはメトリック 1 を計算します。SQL エンジンは上記の "ファクト テーブル (メトリック 1)" テーブルを、以下に示すコール センター ルックアップ テーブル "LU_CALL_CTR" と内部結合します。
CALLCENTER_ID | COUNTRY_ID |
1 |
1 |
2 |
1 |
3 |
2 |
国別に分類された以下のメトリック 1 一時テーブルを作成します。このとき、テーブルの後に示す SQL を使用します。
COUNTRY_ID | メトリック 1 |
1 |
6000 |
2 |
1000 |
create table ZZSP00 nologging as
select a12.COUNTRY_ID COUNTRY_ID,
sum((a11.QTY_SOLD * a11.DISCOUNT))
WJXBFS1
from ORDER_DETAIL a11,
LU_CALL_CTR a12
where a11.CALL_CTR_ID = a12.CALL_CTR_ID
group by a12.COUNTRY_ID
2 番目のパスでは、メトリック 2 が計算されます。SQL エンジンは上記の "ファクト テーブル (メトリック 2)" テーブルを、以下に示す従業員ルックアップ テーブル "LU_EMPLOYEE" と内部結合します。
EMPLOYEE_ID | COUNTRY_ID |
1 |
1 |
2 |
2 |
3 |
2 |
国別に分類された以下のメトリック 2 一時テーブルを作成します。このとき、テーブルの後に示す SQL を使用します。
COUNTRY_ID | メトリック 2 |
1 |
10000 |
2 |
17000 |
create table ZZSP01 nologging as
select a12.COUNTRY_ID COUNTRY_ID,
Sum(a11.FRIAGE) WJXBFS1
from ORDER_FACT a11,
LU_EMPLOYEE a12
where a11.EMP_ID = a12.EMP_ID
group by a12.COUNTRY_ID
3 番目のパスでは、SQL エンジンは以下の国ルックアップ テーブル [LU_COUNTRY] を使用します。
COUNTRY_ID | COUNTRY_DESC |
1 |
米国 |
3 |
ヨーロッパ |
SQL エンジンは上記の [METRIC1_TEMPTABLE] と [LU_COUNTRY] を左方外部結合します。次に、SQL エンジンは上記の [METRIC2_TEMPTABLE] と [LU_COUNTRY] を左方外部結合します。最後に、SQL エンジンは 3 番目のパスの結果を内部結合して最終結果を生成します。
[関係テーブルではなくルックアップテーブルを考慮した最終パスのすべてのエレメントを保存] オプションを選択すると、下記の SQL を使用して以下の結果が返されます。
COUNTRY_ID | COUNTRY_DESC | メトリック 1 | メトリック 2 |
1 |
米国 |
6000 |
10000 |
2 |
|
1000 |
17000 |
select pa1.COUNTRY_ID COUNTRY_ID,
a11.COUNTRY_NAME COUNTRY_NAME,
pa1.WJXBFS1 WJXBFS1,
Pa2.WJXBFS1 WJXBFS2
from ZZSP00 pa1,
AZSP01 Pa2、
LU_COUNTRY a11
where pa1.COUNTRY_ID = pa2.COUNTRY_ID and
pa1.COUNTRY_ID = a11.COUNTRY_ID (+)