MicroStrategy ONE
Preserve All Lookup Table Elements
[Preserve All Lookup Table Elements] VLDB プロパティは、ルックアップ テーブルに存在するすべてのアトリビュート エレメントを、結果セットに対応するファクトがなくても表示するために使用します。たとえば、レポートに "店舗" と Sum(Sales) が含まれていて、ある店舗の売上がまったくないということがありえます。ただし、最終レポートには、売上がない店舗を含め、すべての店舗名を表記することにします。この場合、売上ファクト テーブルにある店舗がすべての店舗を網羅しているとは限りません。代わりに、ルックアップ テーブルのすべての店舗が最終レポートに含まれるようにする必要があります。SQL エンジンでルックアップ テーブルからファクト テーブルへの左方外部結合を行うことが必要です。
テンプレートに複数のアトリビュートが存在する場合もあります。すべてのアトリビュート エレメントを保持するために、分析エンジンは、ファクト テーブルへの左方外部結合を行う前に、関係するアトリビュートのルックアップ テーブルの間でデカルト結合を行う必要があります。
[ルックアップ テーブルおよび最終パス結果テーブルの共通エレメントを保存] (デフォルト)。
分析エンジンは、ルックアップ テーブルへの通常の (等価) 結合を行います。
[ファクト テーブル キーに基づく最終パス結果テーブルに結合したルックアップ テーブル エレメントを保存]。
ファクト テーブル レベルがレポート レベルやテンプレート レベルと同じではないこともよくあります。たとえば、レポートには Store、Month、Sum (Sales) のメトリックが含まれている一方で、ファクト テーブルは Store、Day、および Item のレベルであるという場合です。すべての店舗と月のエレメントを保持する方法は 2 通りあります。
- まず左方外部結合を行ってすべてのアトリビュート エレメントを Store、Day、および Item のレベルで保持してから、Store と Month のレベルに集めます。
- まず集計を行ってから、左方外部結合を行ってすべてのアトリビュート エレメントに取り込みます。
このオプションは最初のアプローチ用です。前述の例では、2 つの SQL パスが作成されます。
パス1 : LOOKUP_STORE クロス結合 LOOKUP_DAY クロス結合 LOOKUP_ITEM ええ TT1
パス2 : TT1 左外部結合 Fact_Table (店舗、日、品目)
このアプローチの利点は、左方外部結合と集計を同じパス (パス 2) で実行できることです。短所は、非常に下位のレベル (パス 1) でルックアップ テーブルをデカルト結合するため、デカルト結合したテーブル (TT1) の結果が非常に大きくなる可能性があることです。
[フィルターなしのテンプレート アトリビュートに基づく最終パス結果テーブルに結合したルックアップ テーブル エレメントを保存]。
このオプションは前述の 2 番目のアプローチに対応します。また同じ例を使用すると、次の 3 つの SQL パスが作成されます。
- パス1 : Fact_Table を TT1 の Store と Month に集計します。この設定をオンにしない場合、実際にはこれが通常レポートの最終パスになります。
- パス2 : LOOKUP_STORE クロス結合 LOOKUP_MONTH> TT2
- パス3 : TT2 は TT1 を (store, month) で左外部結合します。
このアプローチでは、先のオプションよりも 1 つ多いパスが必要ですが、クロス結合テーブル (TT2) の方が通常はサイズが小さくなっています。
[フィルターありのテンプレート アトリビュートに基づく最終パス結果テーブルに結合したルックアップ テーブル エレメントを保存]。
このオプションは、オプション 3 と似ています。ただ一つ違うのは、レポート フィルターが最終パス (パス 3) に適用されることです。たとえば、あるレポートに Store、Month、および Sum(Sales) が含まれており、Year = 2002 というフィルターが適用されているとします。売上があるかどうかにかかわらず、2002 年の各月の各店舗を表示することが必要です。ただし、それ以外の年のどの月も表示する必要はありません (2002 年の 12 か月分のみを表示)。この場合に、オプション 4 が役立ちます。
例
のルックアップと最終パス結果テーブルの共通要素を保持するオプションは、ファクト テーブルとルックアップ テーブル間の直接結合を生成するだけです。結果と 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 (店舗) | 売上 (ドル) |
東部 |
5000 |
中部 |
8000 |
南部 |
12000 |
北部 |
|
select distinct a11.Year Year
#ZZOL00 に
from Fact a11
select pa1.Year Year,
a11.Store_id Store_id
#ZZOL01 に
from #ZZOL00 pa1
cross join Store a11
select pa2.Store_id Store_id,
max(a12.Store) Store,
sum(a11.DollarSls) WJXBFS1
#ZZOL01 pa2より
left outer join Fact a11
on (pa2.Store_id = a11.Store_id and
pa2.Year = a11.Year)
join Store a12
on (pa2.Store_id = a12.Store_id)
group by pa2.Store_id
ドロップテーブル #ZZOL00
ドロップテーブル #ZZOL01
[フィルターなしのテンプレート アトリビュートに基づく最終パス結果テーブルに結合したルックアップ テーブル エレメントを保存] オプションは、SQL の最終パスに左方外部結合を行ってルックアップ テーブル エレメントを保持し、テンプレート上にあるアトリビュートに対してのみ結合を行います。この例と次の例には、[Central に等しくない店舗] のフィルターが追加されています。結果と SQL は以下のとおりです。
Store (店舗) | 売上 (ドル) |
東部 |
5000 |
中部 |
|
南部 |
12000 |
北部 |
|
select a11.Store_id Store_id,
sum(a11.DollarSls) WJXBFS1
#ZZT5X00003UOL000 に
from Fact a11
where a11.Store_id not in (2)
group by a11.Store_id
select a11.Store_id Store_id,
a11.Store Store,
pa1.WJXBFS1 WJXBFS1
from Store a11
左外部結合 #ZZT5X00003UOL000 pa1
on (a11.Store_id = pa1.Store_id)
ドロップテーブル #ZZT5X00003UOL000
[フィルターありのテンプレート アトリビュートに基づく最終パス結果テーブルに結合したルックアップ テーブル エレメントを保存] は最新のオプションで、最終パスにフィルターが組み込まれていること以外は、前述のオプションと同じものです。結果と SQL は以下のとおりです。
Store (店舗) | 売上 (ドル) |
東部 |
5000 |
南部 |
12000 |
北部 |
|
select a11.Store_id Store_id,
sum(a11.DollarSls) WJXBFS1
#ZZT5X00003XOL000 に
from Fact a11
where a11.Store_id not in (2)
group by a11.Store_id
select a11.Store_id Store_id,
a11.Store Store,
pa1.WJXBFS1 WJXBFS1
from Store a11
left outer join #ZZT5X00003XOL000 pa1
on (a11.Store_id = pa1.Store_id)
where a11.Store_id not in (2)
drop table #ZZT5X00003XOL000