Oracle® Fusion Middleware Oracle Business Intelligence Enterprise Editionメタデータ・リポジトリ作成者ガイド 12c (12.2.1.2.0) E82973-02 |
|
前へ |
次へ |
指定されたレベルのデータのセット全体が論理表ソースに含まれていない場合、実際に含まれているセットの一部(断片)を指定する必要があります。
「論理表ソース」ダイアログの「コンテンツ」タブの「断片化の内容」ボックスに、論理列に基づくコンテンツの説明を入力します。
この項の例では、ソースの断片化の内容を指定する際のテクニックおよびルールを示しています。
この項では、次の項目について説明します。
IN
述語は、1つの等価述語、またはOR
結合で区切られた複数の等価述語で置き換えることができます。
断片1:
logicalColumn IN <valueList1>
断片n:
logicalColumn IN <valueListN>
論理表ソースに特定のレベルのデータのセット全体が含まれないときは、セット全体が含まれるように、そのセットの断片を指定する必要があります。
断片1:
logicalColumn >= valueof(START_VALUE) AND logicalColumn < valueof(MID_VALUE1)
断片2:
logicalColumn >= valueof(MID_VALUE1) AND logicalColumn < valueof(MID_VALUE2)
断片n:
logicalColumn >= valueof(MID_VALUEN-1) AND logicalColumn < valueof(END_VALUE)
開始点、中間点、終了点は注意深く選択してください。
注意:
>=述語および<述語を使用して、断片の内容の記述が重ならないようにしてください。各断片では、上限値は<として表す必要があります。<=を使用するとエラーが発生します。同様に、BETWEEN
述語を使用して断片の範囲の内容を記述することはできません。
ここで参照されるvalueof
はリポジトリ変数の値です。式の中でリポジトリ変数を使用する場合、次の構文は断片2に対して動作しないことに注意してください。
logicalColumn >= valueof(MID_VALUE1)+1 AND logicalColumn < valueof(MID_VALUE2)
valueof(MID_VALUE1)+1
のかわりに別のリポジトリ変数を使用します。
同じ変数(たとえばvalueof(MID_VALUE1)
)が両方の断片の内容に含まれている必要はありません。別の変数を設定し、次の形式の文を作成することができます。
断片1:
logicalColumn >= valueof(START_VALUE) AND logicalColumn < valueof(MID_VALUE1)
断片2:
logicalColumn >= valueof(MID_VALUE2) AND logicalColumn < valueof(MID_VALUE3)
「Oracle BI Repositoryでの変数の使用」を参照してください。
各コンテンツ・フィルタには、異なる列に任意の数の述語を含めることができます。各列の述語は値ベース、範囲ベースのいずれでも構いません。
断片1:
<logicalColumn1 predicate> AND <logicalColumn2 predicate > ... AND <logicalColumnM predicate>
断片n:
<logicalColumn1 predicate> AND <logicalColumn2 predicate > ... AND <logicalColumnM predicate>
すべての断片が同じM列に述語を持つのが理想的です。論理列に述語制約がない場合、Oracle BIサーバーは断片にその列のすべての値のデータが含まれていると想定します。OR
述語の使用における例外については、並列コンテンツ記述の指定を参照してください。
並列のORを使用して、日付範囲内で複数年または複数月にわたるなど、複数の論理列にわたる日付を処理します。
並列のORテクニック
使用して、論理列をまたがる複数の階層関係を処理します(年→年月→日、月→年月→日など)。たとえば、年と月など、異なる時点によって示される断片を考えます。履歴断片の選択のみを可能にするのであれば、年をさかのぼって制約を適用することで十分です。これは、次の例に示すように、並列のORテクニック
によってサポートされます。この例では、スナップショットの月は1999年4月1日午前12:00であると想定しています。
断片1(履歴):
EnterpriseModel.Period."Day" < VALUEOF("Snapshot Date") OR EnterpriseModel.Period.MonthCode < VALUEOF("Snapshot Year Month") OR EnterpriseModel.Period."Year" < VALUEOF("Snapshot Year") OR EnterpriseModel.Period."Year" = VALUEOF("Snapshot Year") AND EnterpriseModel.Period."Month in Year" < VALUEOF("Snapshot Month") OR EnterpriseModel.Period."Year" = VALUEOF("Snapshot Year") AND EnterpriseModel.Period."Monthname" IN ('Mar', 'Feb', 'Jan')
断片2(現在):
EnterpriseModel.Period."Day" >= VALUEOF("Snapshot Date") OR EnterpriseModel.Period.MonthCode >= VALUEOF("Snapshot Year Month") OR EnterpriseModel.Period."Year" > VALUEOF("Snapshot Year") OR EnterpriseModel.Period."Year" = VALUEOF("Snapshot Year") AND EnterpriseModel.Period."Month in Year" >= VALUEOF("Snapshot Month") OR EnterpriseModel.Period."Year" = VALUEOF("Snapshot Year") AND EnterpriseModel.Period."Monthname" IN ('Dec', 'Nov', 'Oct', 'Sep', 'Aug', 'Jul', 'Jun', '', 'Apr')
論理モデルにおいて日付レベルの詳細が不要な場合は、前出の例のEnterpriseModel.Period."Day"
の述語を省略します。
並列コンテンツ記述トラックをサポートするために、OR
結合が使用されていることに注目してください。
これらの例は、断片の内容の記述にラベルを使用する方法を示しています。
この例のTrack番号のラベルは、この例と後述の説明の関連をわかりやすくするために示されています。実際の断片化の内容の文には、これらのラベルは含めないでください。
断片1(履歴)
Track 1 EnterpriseModel.Period."Day" < VALUEOF("Snapshot Date") OR Track 2 EnterpriseModel.Period.MonthCode < VALUEOF("Snapshot Year Month") OR Track 3 EnterpriseModel.Period."Year" < VALUEOF("Snapshot Year") OR Track 4 EnterpriseModel.Period."Year" = VALUEOF("Snapshot Year") AND EnterpriseModel.Period."Month in Year" < VALUEOF("Snapshot Month") OR Track 5 EnterpriseModel.Period."Year" = VALUEOF("Snapshot Year") AND EnterpriseModel.Period."Monthname" IN ('Mar', 'Feb', 'Jan')
たとえば、EnterpriseModel.Period."Day"
の最初のトラックについて考えてみましょう。この履歴の断片では、<述語は、Oracle BIサーバーに対して、スナップショットの日付の前の日を制約するすべての問合せは履歴の断片内にあるということを通知します。反対に、日付の現在の断片内の>=述語は、現在の断片の中にスナップショットの日付の前のデータが含まれていないことを通知します。
2番目のトラックのMonthCode
(たとえば、199912)は日付と似ています。月には重なる部分が存在しないため(スナップショットの日付は4月1日であるため)、このトラックでは<述語と>=述語を使用します。覚えておくべき重要なルールとして、追加されたそれぞれの並列トラックは異なる列セットを参照する必要があるという点があげられます。共通の列を使用することは可能ですが、列セット全体は一意である必要があります。Oracle BIサーバーは、この列セットを使用して最も適切なトラックを選択します。
3番目のトラックのYear
(履歴の断片内では<、現在の断片内では>)は、Oracle BIサーバーに対して、年を制約する問合せに対する最適な(単一の)断片選択が可能であることを通知します。たとえば、「Year IN (1997, 1998)」の論理問合せは履歴の断片にのみヒットします。同様に、「Year = 2000」の問合せは現在の断片にのみヒットします。ただし、1999年にヒットする問合せは、このトラックに記述されているコンテンツでは回答できず、以降のトラックに追加の情報がないかぎり両方の断片にヒットします。
4番目のトラックは、Year (month integer)の形式で年と月の断片セットを記述しています。以前に説明した、複数列コンテンツ記述のテクニックに注目してください。また、これらの2つの列にはあいまいさや重なりがないため、<述語と>=述語を使用していることに注目してください。
5番目のトラックは、年と月の名前によって断片化の内容を記述しています。このトラックでは、値ベースのIN
述語のテクニックを使用しています。
参考までに、スナップショットの日付がある月の特定の日付となる場合を考えます。したがってこの場合、複数列のコンテンツの年と月のみの記述は特定のスナップショットの月において重なります。このあいまいさを指定するには、<=述語と>=述語を使用します。
断片1(履歴):
EnterpriseModel.Period."Day" < VALUEOF("Snapshot Date") OR EnterpriseModel.Period.MonthCode <= VALUEOF("Snapshot Year Month") OR EnterpriseModel.Period."Year" < VALUEOF("Snapshot Year") OR EnterpriseModel.Period."Year" = VALUEOF("Snapshot Year") AND EnterpriseModel.Period."Month in Year" <= VALUEOF("Snapshot Month") OR EnterpriseModel.Period."Year" = VALUEOF("Snapshot Year") AND EnterpriseModel.Period."Monthname" IN ('Apr', 'Mar', 'Feb', 'Jan')
断片2(現在):
EnterpriseModel.Period."Day" >= VALUEOF("Snapshot Date") OR EnterpriseModel.Period.MonthCode >= VALUEOF("Snapshot Year Month") OR EnterpriseModel.Period."Year" > VALUEOF("Snapshot Year") OR EnterpriseModel.Period."Year" = VALUEOF("Snapshot Year") AND EnterpriseModel.Period."Month in Year" >= VALUEOF("Snapshot Month") OR EnterpriseModel.Period."Year" = VALUEOF("Snapshot Year") AND EnterpriseModel.Period."Monthname" IN ('Dec', 'Nov', 'Oct', 'Sep', 'Aug', 'Jul', 'Jun', '', 'Apr')
注文入力アプリケーションでは、通常、履歴の断片と現在の断片の間の時間ベースの断片化では不十分です。
たとえば、レコードがスナップショットの日付の前にデータベースに入力された履歴レコードであったとしても、それらのレコードは揮発性である場合があります。
次の例では、未処理の注文は、その注文の発送が行われるかキャンセルされるまで、アプリケーションによって直接更新されることがあると想定します。ただし、注文の発送が行われた後にその注文に対して行われる変更は、個別の返品トランザクションの入力のみです。
次のコンテンツの記述には2つの並列トラックがあります。最初のトラックでは、前の項で説明した、複数列の並列トラックのテクニックが使用されています。ShippedまたはCanceledの注文状態の複数列コンテンツの記述の中で、カッコによって並列カレンダの記述がネストしていることに注目してください。
2番目の並列トラックは現在の断片の中にのみ存在し、すべての未処理レコードが現在の断片の中のみにあることを指定しています。
断片1(履歴):
Marketing."Order Status"."Order Status" IN ('Shipped', 'Canceled') AND Marketing.Calendar."Calendar Date" <= VALUEOF("Snapshot Date") OR Marketing.Calendar."Year" <= VALUEOF("Snapshot Year") OR Marketing.Calendar."Year Month" <= VALUEOF("Snapshot Year Month")
断片2(現在):
Marketing."Order Status"."Order Status" IN ('Shipped', 'Canceled') AND Marketing.Calendar."Calendar Date" > VALUEOF("Snapshot Date") OR Marketing.Calendar."Year" >= VALUEOF("Snapshot Year") OR Marketing.Calendar."Year Month" >= VALUEOF("Snapshot Year Month") OR Marketing."Order Status"."Order Status" = 'Open'
並列トラックが存在する場合の重なり合いは許容されるため、2つの断片内で年と月が重なり合っても問題は生じません。このルールは、少なくとも1つのトラックに重なり合いが生じない必要があるというものです。他のトラックには重なり合いがあっても構いません。
集計の特定のレベルの情報が複数の物理表に格納されている場合があります。
集計の特定のレベルの情報が複数の物理表に格納されている場合があります。特定のレベルの個々のソースにドメインの一部または断片の情報が含まれている場合、Oracle BIサーバーは、問合せで適切なソースを選択するためにソースのコンテンツを知る必要があります。
たとえば、すべての店舗でのソフト・ドリンクの売上を追跡するデータベースがあるとします。データの詳細レベルは店舗レベルです。この図に示すように、CokeとPepsiの売上の集計情報が都市レベルで格納されますが、7‐Upや他のソーダの売上に関する集計情報はありません。
このタイプの構成の目的は、集計表を最大限に活用することです。問合せでCokeとPepsiの売上額を求める場合、データは集計表から返されます。問合せですべてのソフト・ドリンクの売上額を求める場合、CokeとPepsiに関しては集計表が使用され、他のブランドに関しては詳細データが使用されます。
Oracle BIサーバーは、このタイプの部分集計ナビゲーションを扱います。ドメインが複数の断片に及んでいる問合せで集計断片が使用されるようにリポジトリを構成するには、集計データの各レベルのドメイン全体を定義する必要があります。これは、集約の度合いの低い物理ソースをベースとして集計断片を構成する必要がある場合でも同様です。
この項では、次の項目について説明します。
論理表ソースのマッピング内に集計表ナビゲーションを構成します。
ソフト・ドリンクの例では、集計表には都市レベルのCokeおよびPepsiの売上データが含まれています。この集計コンテンツの指定(「論理表ソース」ウィンドウの「コンテンツ」タブ)は次のようになります。
論理レベルでのグループ化:
GeographyDim. CityLevel, ProductDim.ProductLevel
この断片化の内容の指定は次のようになります(これも「論理表ソース」ダイアログの「コンテンツ」タブにあります)。
SoftDrinks.Products.Product IN ('Coke', 'Pepsi')
このコンテンツの指定は、Oracle BIサーバーに対して、2つの製品の都市および製品のレベルのデータがソース表に格納されていることを通知します。また、このソースはこのレベルにおけるデータの断片であるため、「論理表ソース」ダイアログの「コンテンツ」タブで「このソースはこのレベルの他のソースと組み合せる必要がある」を選択して、このソースを他のソースと同じレベルで組み合せることを指示する必要があります。
ドメインの残りの部分のデータ(他の種類のソーダ)は、すべて店舗レベルで格納されています。
集計レベルでドメイン全体を定義するには(この例では都市および製品)、このレベルにおけるドメインの残りの部分が格納されているソースが必要になります。店舗レベルのデータは都市レベルのデータよりも下位にある(より詳細である)ため、ある都市のすべての店舗の製品売上データを加算することによって、店舗および製品の詳細から都市および製品レベルの詳細を計算することが可能です。これは、店舗および製品レベルの表を含む問合せを通じて実行できます。
これを行う方法の1つとして、物理レイヤー内に店舗レベルの計算を返すSelect文を使用する表を定義するという方法があります。この表を定義するには、SELECT
文による問合せの対象となる物理スキーマ・オブジェクトを右クリックし、新しい物理表を選択します。「表タイプ」のリストから「選択」を選択し、「デフォルトの初期化文字列」ボックスにSQL文を入力します。
このSQL文では、他の集計表のレベルでドメインを完全にする仮想表を定義する必要があります。この場合、既存の集計表が1つ存在し、その中には都市ごとのCokeとPepsiのデータが格納されています。したがって、このSQL文は、CokeとPepsiのデータを除くすべてのデータを都市レベルで返す必要があります。
ドメインの残りの部分を都市および製品レベルでカバーする売上列の新しい論理表ソースを作成します。
このソースには、前の項で作成した仮想表が含まれます。この仮想表の中でDollars論理列をUS Dollars物理列にマップします。
このソースの集計コンテンツの指定(「論理表ソース」ダイアログの「コンテンツ」タブ)は次のようになります。
論理レベルでのグループ化:
GeographyDim.CityLevel, ProductDim.ProductLevel
これは、Oracle BIサーバーに対して、このソースには都市および製品レベルのデータがあることを通知します。
断片化の内容の指定は次のようになります。
SoftDrinks.Products.Product = '7-Up'
またこれは、ドメインを完全にするために都市および製品レベルのCokeとPepsiのデータを格納する表と組み合されるため、「論理表ソース」ダイアログの「コンテンツ」タブ内のオプションを選択して、このソースが他のソースと同じレベルで組み合されることを指定します。
論理結合を構築する方法について、図を使用して説明します。
仮想表に適切な物理結合を構築します。次の図で、CityProductSales2がCities表およびProducts表と結合されていることに注目してください。
この例では、ソーダの売上のドメイン全体が2つのソースによって構成されています。ドメインは多くのソースを持つことができます。これらすべてのソースは、「各レベルには、組み合せることによってそのレベルの値のドメイン全体が構成されるソースが含まれていなければならない」というルールに従う必要があります。各レベルに完全なドメインを設定することは、Coke、Pepsiおよび7-Upを求める問合せで7-Upが欠落しないようにするのに役立ちます。またこれは、事前に計算され集計表に格納されている情報を要求する問合せにおいて、その問合せではこの集計表に含まれない他の情報も要求する場合であっても、該当する情報は必ずその集計表から取得されるようにするのに役立ちます。