Oracle® Fusion Middleware Oracle Business Intelligence Enterprise Editionメタデータ・リポジトリ作成者ガイド 12c (12.2.1.1.0) E77227-02 |
|
![]() 前へ |
![]() 次へ |
論理表間の関係は、論理結合によって表されます。
論理結合は、物理的な結合ではなく概念上の結合です。つまり、特定のキーまたは列を結合しません。1つの論理結合が可能な多くの物理結合に対応する場合があります。
論理結合の重要なプロパティの1つがカーディナリティです。カーディナリティは、ある表内の行が結合先の表の行とどのように関連するかを表します。1対多のカーディナリティは、最初の論理ディメンション表の各行に対応する行が、2つ目の論理表には0個、1個または多数あることを意味します。管理ツールでは、ある表が、その他の論理表に対応しているすべての論理結合において多の側である場合、その表は論理ファクト表と見なされます。
Oracle BIサーバーで必要なメタデータによってビジネス・モデルに対する論理リクエストが物理データ・ソースに対するSQL問合せに変換されるように、論理表結合を指定する必要があります。論理結合情報によって、Oracle BIサーバーに、論理表間の多対1関係の情報が提供されます。この論理結合情報は、Oracle BIサーバーで基礎となるデータベースに対する問合せが生成されるときに使用されます。
次の両方が当てはまる場合、ビジネス・モデルとマッピング・レイヤーで論理結合を作成する必要はありません。
必要な物理表すべてをビジネス・モデルとマッピング・レイヤーに同時にドラッグ・アンド・ドロップすることによって論理表を作成する場合
論理結合が物理レイヤーの結合と同じである場合
ただし、多くの場合、ビジネス・モデルとマッピング・レイヤーでいくつかの論理結合を作成する必要があると思われます。これは、非常に単純なモデルの場合を除いて、すべての物理表を同時にドラッグ・アンド・ドロップすることはまれなためです。
結合マネージャまたはビジネス・モデル図を使用して、論理結合を作成できます。物理レイヤーで複合結合を作成する場合は、式、および結合を作成する特定の列を指定できます。ビジネス・モデルとマッピング・レイヤーで論理結合を作成する場合は、式も結合を作成する列も指定できません。物理レイヤーに結合が存在するからといって、ビジネス・モデルとマッピング・レイヤーに一致する結合が必要なわけではありません。
注意:
論理表には外部キーを指定しないことをお薦めします。ただし、「オプション」ダイアログで「論理外部キー結合作成の許可」を選択した場合は、下位互換性のために、結合マネージャを使用して、論理外部キー結合を作成できます。
ファクト表の論理キーは、属性表に結合されるキー列で構成する必要があります。Oracle BIサーバーが、特定のサード・パーティの問合せとレポート作成ツール用のODBCデータ・ソースとして使用される場合は、論理外部キー結合が必要なことがあります。
この項では、次の項目について説明します。
ビジネス・モデル図には、論理表とそれらの表の間に定義されている結合が表示されます。
ビジネス・モデル図を使用して、表の間に論理結合を定義できます。
ビジネス・モデル図を使用して論理結合を定義するには:
結合マネージャを使用して、論理結合の関係の表示と論理結合の作成を実行できます。
また、お薦めできませんが、「オプション」ダイアログで「論理外部キー結合作成の許可」を選択した場合は、結合マネージャを使用して、論理外部キー結合を作成できます。
この項では、次の項目について説明します。
駆動表は、一方の表が非常に小さく、他方の表が非常に大きな場合に、Oracle BIサーバーでクロスデータベース結合を処理する方法の最適化に有用です。
駆動表の指定は、駆動表から選択された行数が結合先の表の行数よりはるかに少ない場合にのみ、問合せの最適化に使用できます。
注意:
問題が発生しないように、駆動表は、非常に小さい、つまり1,000行未満の場合にのみ指定します。
「論理結合」ウィンドウから論理結合に駆動表を指定できます。駆動表を指定した場合、Oracle BIサーバーでは、問合せ計画で駆動表の使用によって問合せ処理が最適化されると判断された場合に駆動表が使用されます。小さな表(駆動表)がスキャンされ、パラメータ化された問合せが大きな表に発行されて一致する行が選択されます。その後で、その他の表が、その他の駆動表を含めて、一緒に結合されます。
注意:
駆動表から行が多数選択された場合、駆動表の指定によって重大なパフォーマンス低下をまねくおそれがあり、MAX_QUERIES_PER_DRIVE_JOIN
の制限値を超えた場合は、問合せが終了します。
通常、駆動表は、内部結合に使用でき、駆動表が左外部結合の左の表である場合、または右外部結合の右の表である場合は、外部結合に使用できます。駆動表は、完全外部結合には使用されません。駆動表を指定する手順については、論理結合の定義を参照してください。
駆動表のパフォーマンスを制御およびチューニングする機能として、データベース機能表に2つのエントリがあります。
MAX_PARAMETERS_PER_DRIVE_JOIN
これは、パフォーマンス・チューニング・パラメータです。通常、値が大きいほど、生成の必要があるパラメータ化問合せの数が少なくなります。値が大きすぎると、バックエンド・データベース制限によりパラメータ化問合せが失敗します。値を0 (ゼロ)に設定すると、駆動表結合がオフになります。
MAX_QUERIES_PER_DRIVE_JOIN
これは、リソース集中型の駆動表結合を防ぐために使用します。パラメータ化問合せの数がこの値を超えると、問合せが終了し、エラー・メッセージがユーザーに返されます。
物理問合せからトリミング可能な結合を決定する際に、Oracle BIサーバーでは、この項で説明する要因が考慮されます。
次の結合トリミングのルールが、論理表ソース内の表に対して施行されます。
結合の外部性(内部、左外部、右外部、または完全外部)。
結合カーディナリティ({0..1、1、N、不明}対{0..1、1、N、不明}。たとえば、0..1対Nはゼロまたは1対複数の結合を表します)。結合の少なくとも片側には、不明カーディナリティを除き、9つの結合カーディナリティの組合せがあります。
論理表ソースにWHERE句のフィルタが含まれているかどうか。
物理結合が複合結合または外部キー結合であるかどうか。
Oracle BIサーバーで結合をトリミングする場合、次の基準が満たされている必要があります。
トリミングされた表は、列の予測されるリストやWHERE句の中など、問合せ内のどの場所でも参照の対象にできません。
トリミングされた表によって結果セットのカーディナリティが変更されることがあってはいけません。結合を削除することによって選択した行数が変更される可能性がある場合、Oracle BIサーバーでは結合をトリミングしません。
次の条件のいずれかがtrueである場合、結合には、結果セットの行数を変更する可能性があるものと見なされます。次の条件のいずれでもtrueである場合、結合は問合せからトリミングされません。
この結合は完全外部結合です。内部結合、左外部結合および右外部結合のみがトリミングの候補です
いずれかの側で結合カーディナリティが不明です。
トリミングされる表が結合の複数の側にあります。つまり、マスター/詳細の関係にある詳細表をトリミングすることはできません
トリミングされる表のカーディナリティが0..1であり、結合が内部結合です。カーディナリティ0..1は、表内に一致する行が存在する場合と、存在しない場合があることを意味します。そのため、一方の側に0..1のカーディナリティが設定されている結合は、実質的にフィルタのように機能します。したがって、その結合をトリミングする場合は、選択した行数を変更する必要があります。
トリミングされる表が、左外部結合の左側、または右外部結合の右側にあります(つまり、行を維持する表ではトリミングは行われません)。このルールでは、DISTINCT句が問合せに追加される属性のみを選択する問合せに対して、例外が1つあります。DISTINCT句であるため、行を維持する表をトリミングしてもNull指定の表から返される行数に影響はありません。そのため、属性に対する個別の問合せの特殊なケースでは、外部結合の行を維持する表をトリミングすることができます。
次の表に、Oracle BIサーバーで問合せから結合をトリミングできる例を示します。
シナリオ | 結果 |
---|---|
![]() 従業員 内部結合 部門 |
部門は内部結合の「1」の側にあるため、トリミングできます。 従業員は内部結合の複数の側にあるため、トリミングできません。 |
![]() 従業員 左外部結合 部門 |
部門は結合の「1」の側にあり、左外部結合(つまり、Nullを指定する表)の右側にあるため、トリミングできます。 従業員は結合の複数の側にあり、左外部結合(つまり、行を維持する表)の左側にあるため、トリミングできません。 |
![]() 従業員 右外部結合 部門 |
部門は右外部結合(つまり、行を維持する表)の右側にあるため、トリミングできません。 従業員は結合の複数の側にあるため、トリミングできません。 |
![]() 従業員 内部結合 従業員情報 |
両方の表が内部結合の「1」の側にあるため、いずれの側でもトリミングできます。 |
![]() 従業員 左外部結合 従業員情報 |
従業員情報は結合の「1」の側にあり、左外部結合(つまり、Nullを指定する表)の右側にあるため、トリミングできます。 従業員は左外部結合(つまり、行を維持する表)の左側にあるため、トリミングできません。 |
![]() 従業員 右外部結合 従業員情報 |
従業員情報は右外部結合(つまり、行を維持する表)の右側にあるため、トリミングできません。 従業員は結合の「1」の側にあり、右外部結合(つまり、Nullを指定する表)の左側にあるため、トリミングできます。 |
![]() 従業員 内部結合 部門 |
部門は内部結合の0..1の側にあるため、トリミングできません。 従業員は内部結合の複数の側にあるため、トリミングできません。 |
![]() 従業員 左外部結合 部門 |
部門は外部結合の0..1の側にあり、左外部結合(つまり、Nullを指定する表)の右側にあるため、トリミングできます。 Oracle BIサーバーでは、外部結合の0..1の側にあるNullを指定する表のトリミングが許可されますが、この場合は、問合せから部門をトリミングしても従業員表から選択した行数が変更されないためです。 従業員は外部結合の複数の側にあるため、トリミングできません。 |
![]() 従業員 完全外部結合 部門 |
結合が完全外部結合であるため、いずれの側もトリミングできません。 |
![]() 従業員 複数対複数 プロジェクト |
結合が複数対複数であるため、いずれの側もトリミングできません。 |
![]() 従業員 不明 部門 |
結合のカーディナリティが不明であるため、いずれの側もトリミングできません。 |
物理図には、選択した論理オブジェクトにマップする物理表と、各表間の物理結合が示されます。
結合オプションの1つである「ビジネス・モデル内のオブジェクトと直接結合」は、論理レイヤーに特有のオプションです。このオプションによって、次の両方の条件を満たす表の物理図が作成されます。
選択されたオブジェクト内の表、および直接結合する表
ビジネス・モデル内でマップされている(ビジネス・モデルの論理表ソースに存在する)表
論理オブジェクトの物理図を開くには: