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つだけ保持する必要がある場合、VLDBプロパティを次のように設定できます。最終パス結果のすべての要素を保持するその 1 つの属性の設定。その後、レポートを聞かないで 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,
合計(a11.運賃) 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,
ZZSP01 pa2、
LU_COUNTRY a11
where pa1.COUNTRY_ID = pa2.COUNTRY_ID and
pa1.COUNTRY_ID = a11.COUNTRY_ID (+)