ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Business Intelligence Discoverer管理者ガイド
11gリリース1 (11.1.1)
E51906-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

10 結合の作成とメンテナンス

この章では、Discoverer Administratorを使用した結合の実装方法について説明します。この章の内容は次のとおりです。

10.1 結合

Discovererの結合では、1つ以上の一致するアイテムを使用して2つのフォルダを関連付けます。データベースの結合では、一致する列を使用して2つのテーブルを関連付けます。

たとえば、DEPTとEMPという2つのテーブルを考えてみます。

図10-1 EMPテーブルとDEPTテーブル

図10-1の説明は前後にあります。

DEPTテーブルの各部門には、部門名および部門番号が付いています。EMPテーブルの各従業員には名前があり、各自が1つの部門に属しています(部門は部門番号で識別します)。

従業員の名前およびその従業員が働く部門の名前を確認するには、両方のテーブルから情報を抽出する必要があります。しかし、同じクエリーで両方のテーブルから情報を抽出できるようにするには、テーブルの間に結合が存在する必要があります。

結合を定義するには、通常は他のテーブルの列と一致する1つの列をテーブルの中で指定します。DEPTテーブルとEMPテーブルの例では、DEPTテーブルのDEPTNO列がEMPテーブルのDEPTNO列と一致します。つまり、DEPTテーブルのDEPTNO列の各値には、EMPテーブルのDEPTNO列に一致する値があります。

図10-2 DEPTNO列を使用して結合されるEMPテーブルとDEPTテーブル

図10-2の説明は前後にあります。

結合は、一般にマスター・テーブルとディテール・テーブルで構成されます。マスター・テーブルの1行に対し、ディテール・テーブルには複数の行が存在します。前述の例では、DEPTテーブルがマスター・テーブルでEMPテーブルがディテール・テーブルです。各部門には複数の従業員がいるからです。

ディテール・テーブルの一致する列は、一般的に外部キー列と呼ばれます。

Discoverer Administratorを使用して結合を作成するときは、マスター・フォルダ内のアイテムとディテール・フォルダ内の一致するアイテムを識別する結合条件を指定します。次の点に留意することが重要です。

2つのフォルダ間に結合を定義すると、次のことが可能になります。

10.2 単一アイテム結合

Discovererの単一アイテム結合では、両方のフォルダに共通するアイテムを結合条件で指定して、2つのフォルダを関連付けます。結合条件とは、結合演算子によって関連付けられる2つの結合アイテムの組合せです。通常、結合演算子には等号(=)が使用されるため、このような結合は等価結合と呼ばれます(他の結合演算子の詳細は、「非等価結合」を参照)。

たとえば次のスキーマでは、共通する列であるDEPTNOを使用してDEPTテーブルとEMPテーブルを結合します。

図10-3 単一アイテム結合を使用して結合された2つのテーブルの例

図10-3の説明は前後にあります。

DEPTテーブルの各部門には、部門名および部門番号が付いています。EMPテーブルの各従業員には名前があり、各自が1つの部門に属しています(部門は部門番号で識別します)。従業員の名前およびその従業員が働く部門の名前を確認するには、EMPテーブルとDEPTテーブルの両方からの情報が必要です。

Discovererエンド・ユーザーが、すべての従業員の名前と各自が働く部門の名前を次のように表示しようとする場合を想定します。

DNAME ENAME
ACCOUNTS CLARK
ACCOUNTS MILLER
RESEARCH ADAMS
RESEARCH FORD
SALES JAMES

つまり、DEPT.DNAMEおよびEMP.ENAMEを表示します。

次のSQL文により、必要な結果が得られます。

select dname, ename
from dept, emp
where
dept.deptno=emp.deptno

Discovererエンド・ユーザーが必要な結果を表示できるようにするには、次のいずれかを行います。

10.3 マルチアイテム結合

Discovererのマルチアイテム結合では、すべての結合条件が満たされたときに結合が真になるように、複数の結合条件を使用して2つのフォルダが関連付けられます(結合条件の詳細は、「単一アイテム結合」を参照)。

たとえば次のスキーマでは、COUNTRY_CODEとPRODUCT_CODEの組合せを使用して、製品を一意に識別します。

図10-4 マルチアイテム結合を使用して結合された2つのテーブルの例

図10-4の説明は前後にあります。

VIDEO_PRODUCTSテーブルのそれぞれの製品には説明があり、国コードと製品コードの組合せで一意に識別されます(製品コードはそれぞれの国コードにおいてのみ一意であることに注意してください)。VIDEO_SALESテーブルのそれぞれの売上は、特定の製品のものです(国コードと製品コードで識別されます)。売上の値および販売された製品の説明を確認するには、VIDEO_SALESテーブルとVIDEO_PRODUCTSテーブルの両方からの情報が必要です。

Discovererエンド・ユーザーが、各売上の値および販売された製品の説明を次のように表示しようとする場合を想定します。

説明
UK GAME RENTAL 10
US VIDEO RENTAL 19
FR VIDEO SALES 25
FR GAME RENTAL 8

つまり、VIDEO_PRODUCTS.DESCRIPTIONおよびVIDEO_SALES.VALUEを表示します。

次のSQL文により、必要な結果が得られます。

select description, value
from video_products, video_sales
where
video_products.country_code=video_sales.country_code
and
video_products.product_code=video_sales.product_code

Discovererエンド・ユーザーが必要な結果を表示できるようにするには、次のいずれかを行います。

注意: 各テーブルの複数の列を使用して行を識別する結合も、コンポジット結合キーと呼ばれます。

10.4 3つ以上のフォルダの結合

Discovererで3つ以上のフォルダを結合するには、各フォルダの間に別個の結合を定義する必要があります。

たとえば次のスキーマでは、2つの結合を使用して3つのテーブルを関連付けます。1つの結合がVIDEO_SALES_ORDERSテーブルをSALES_ORDER_LINE_ITEMSテーブルに関連付け、もう1つの結合がVIDEO_PRODUCTSテーブルをSALES_ORDER_LINE_ITEMSテーブルに関連付けます。

図10-5 2つの結合を使用して結合された3つのテーブルの例

図10-5の説明は前後にあります。

VIDEO_SALES_ORDERSテーブルの各販売注文は、特定の顧客に対するものです(販売IDで一意に識別されます)。SALES_ORDER_LINE_ITEMSテーブルに示されているように、各販売注文は1つ以上の行アイテムで構成され、それぞれの行アイテムが特定の製品に対して存在します。VIDEO_PRODUCTSテーブルの各製品には説明があります(製品は製品IDで一意に識別されます)。

Discovererエンド・ユーザーが、顧客の名前および顧客がこれまでに購入した製品の説明を次のように表示しようとする場合を想定します。

顧客名 製品の説明
TURNER TOY STORY
TURNER TOY STORY
JONES STARGATE
JONES POPCORN
JONES TRUE LIES
SMITH POPCORN
SMITH TOY STORY
ADAMS STARGATE

つまり、VIDEO_SALES_ORDERS.CUST_NAMEおよびVIDEO_PRODUCTS.PROD_DESCを表示します。

次のSQL文により、必要な結果が得られます。

select cust_name, prod_desc
from video_sales_orders, sales_order_line_items, video_products
where
video_sales_orders.sales_id=sales_order_line_items.sales_id
and
sales_order_line_items.prod_id=video_products.prod_id

Discovererエンド・ユーザーが必要な結果を表示できるようにするには、次のいずれかを行います。

10.5 非等価結合

Discovererでは、非等価結合により、テーブルの列の間に直接の対応関係がない2つのフォルダを結合できます。非等価結合では、非等価結合演算子を使用する1つ以上の結合条件を使用して、2つのフォルダを関連付けます。

たとえば次のスキーマでは、2つのテーブルに一致する列がないため、非等価結合を使用してEMPテーブルとSALGRADEテーブルを結合します。

図10-6 非等価結合を使用して結合された2つのテーブルの例

図10-6の説明は前後にあります。

従業員の等級は給料に依存します。700から1200を受け取る従業員はグレード1、1201から1400を受け取る従業員はグレード2という具合です。

Discovererエンド・ユーザーが各従業員のグレードを次のように表示しようとする場合を想定します。

ENAME グレード
KING 5
BLAKE 4
CLARK 4
JONES 4
MARTIN 2
ALLEN 3
TURNER 3
JAMES 1

つまり、EMP.ENAMEおよびSALGRADE.GRADEを表示します。

次のSQL文により、必要な結果が得られます。

select ename, grade
from emp, salgrade
where
emp.sal>=salgrade.losal
and
emp.sal<=salgrade.hisal

Discovererエンド・ユーザーが必要な結果を表示できるようにするには、次のいずれかを行います。

10.6 1対多結合、1対1結合および多対多結合

1対多結合は最も一般的なタイプの結合です。1対多結合では、マスター・フォルダの1行がディテール・フォルダの複数行に結合されます。

1対1結合は、結合で使用される両方のアイテムが主キーになる2つのフォルダ間の結合です。そのため、1つのフォルダの1行のみが、別のフォルダの1行のみと結合されます(あるいはどの行とも結合されません)。この場合、マスター・テーブルの各行はディテール・テーブルの1つの行にのみ対応可能であるため、実際のマスターとディテールは存在しません。1対1結合が有効な構成になる場合もあります。Discovererでは結合を1対1結合に指定できます。

複数のディテール・フォルダを持つマスター・フォルダにクエリーを行うことは可能です(1つを除くすべてのディテール・フォルダが1対1結合で結合されている場合)。3つ以上のディテール・フォルダがマスター・フォルダに1対多結合で結合されている場合(ファントラップ・スキーマ)は、マスター・フォルダの1行がディテール・フォルダの複数行に結合してデカルト演算になる可能性があります。Discovererでは、予期せぬ結果が返るのを防ぐため、ファントラップ・スキーマは解決されます。詳細は、「ファントラップの概要およびDiscovererでの処理方法」を参照してください。

多対多結合は、Discoverer (またはすべてのリレーショナル・システム)では直接サポートされていません。ただし、多対多結合はいつでも作りなおして複数の1対多結合に変更できます。ごくまれに、多対多結合が有効な構成になる場合があります。

10.7 複数の結合を使用した2つのフォルダの結合

複合フォルダを作成するときに、複数の結合を使用して2つのフォルダを結合することが必要になる場合があります。たとえば同じアイテムを含む複合フォルダを複数作成して、各複合フォルダで1つ以上の結合を使用する場合などです。これらの結合は、それぞれ異なる結合オプションを使用して定義できます。

次の表は、2つのフォルダ(例ではempとdept)を4つの異なる結合を使用して結合する方法を示しています。複合フォルダにアイテムを追加するときに、これらの結合を1つ以上選択できます。

複合フォルダ名 マスター・フォルダ結合アイテム 結合演算子 ディテール・フォルダ結合アイテム 結合に使用される結合オプション
Complex1 emp.deptno =
dept.deptno 選択されるオプションなし
Complex2 emp.deptno =
dept.deptno ディテール外部キーにNULL値を使用可
Complex3 emp.deptno =
dept.deptno 1対1関係
Complex4 emp.deptno =
dept.deptno ディテール・フォルダでの外部結合

複合フォルダを作成し、複数の結合を有する2つのフォルダからアイテムをドラッグすると、Discoverer Administratorによって「結合の選択」ダイアログが表示され、使用する結合を1つまたは複数選択できます。

図10-7 「結合の選択」ダイアログ

図10-7の説明は前後にあります。

詳細は、「複合フォルダの作成方法」を参照してください。

Discoverer PlusまたはDiscoverer Desktopのユーザーが複数フォルダのアイテムを使用するワークシートを作成し、複数の結合を使用して結合された2つのフォルダからアイテムを選択すると、Discovererでは次のいずれかの処理が行われます。

詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Discoverer Plusユーザーズ・ガイド』を参照してください。

10.8 クエリー結果およびクエリーのパフォーマンスに結合が与える影響

状況によっては、マスター・フォルダおよびディテール・フォルダにクエリーを行うときに、常にDiscovererで結合を使用する場合があります。たとえば、次のような場合です。

結合の解決には比較的時間がかかるため、このようなクエリーでは結果が返るまでに比較的長い時間がかかる可能性があります。

他の状況では、Discovererでマスター・フォルダとディテール・フォルダの両方にクエリーを行う必要はありません。たとえば、次のような場合です。

Discovererでマスター・フォルダにクエリーを行う必要がないことを示す適切なオプションを設定すると、クエリーのパフォーマンスが向上します。ただし、マスター・テーブルにクエリーを行わないことにより、予期せぬ結果が返される可能性がありますので注意してください。マスター・フォルダを含める必要があるかどうかわからない場合は、「複合フォルダからのクエリー結果に結合が影響する例」を参照してください。

複合フォルダ内の2つ以上のフォルダを組み合せる場合(結合を使用)、Discovererでは不要な結合を検出して削除することにより、クエリーのパフォーマンスを向上できます(結合トリミング)。Discovererのレジストリ設定SQLJoinTrimが有効になっている(デフォルト値である1に設定されている)ときは、次の条件の両方が満たされた場合にクエリーから結合が削除されます。

Discovererのレジストリ設定の詳細は、第21章「Discovererのレジストリ設定」を参照してください。

「ディテール・アイテム値がマスター・フォルダに存在しない場合あり」オプションが選択されている結合を使用するクエリーを満たすために、Discovererでサマリー・フォルダが使用されることはありません(詳細は、「「結合の編集」ダイアログの 「オプション」タブ」を参照)。

10.9 複合フォルダからのクエリー結果に結合が影響する例

次の例は、Discoverer Administratorを使用してEmp_and_Deptという複合フォルダが作成されていることを前提にしています。この複合フォルダは、DEPTテーブルおよびEMPテーブルに基づくもので、結合条件DEPT.DEPTNO=EMP.DEPTNOを使用します。

次の2つの使用例を考えてみます。

例1: マスター・フォルダの除外が常に可能

マスター・フォルダを含めても結果に違いがないときや、マスター・フォルダを含めても必要な結果が返らないときは、クエリーからマスター・フォルダを除外します。

注意: マスター・フォルダをクエリーの実行対象(複合フォルダのアイテムのみを使用するもの)から除外することは、Discoverer PlusまたはDiscoverer Desktopでマスター・フォルダとディテール・フォルダ間の結合を使用しないという意味です。クエリー・アイテムを複合フォルダから選択する場合(Discoverer PlusまたはDiscoverer Desktopでワークシートを作成する場合)、Discovererでは結合が使用されません。クエリー・アイテムはディテール・フォルダ(例ではEMP)からのみ返されます。

Discovererエンド・ユーザーが、Emp_and_Dept複合フォルダからENAMEアイテムを選択することにより、EMPテーブルの全従業員の名前を表示しようとする場合を想定します。

使用例1では、必要な結果は次のようになります。

ENAME
CLARK
SMITH
ALLEN

マスター・フォルダをクエリーに含めても結果に違いはありません。クエリーによってすべての従業員が返されるためです。クエリーのパフォーマンスを向上させるには、「結合の編集」ダイアログの「オプション」タブ「ディテール・アイテムが常にマスター・フォルダに存在」オプションを選択して、Discovererでマスター・フォルダにクエリーを行わないように指定します。Discovererのレジストリ設定SQLJoinTrimも有効になっている場合、Discovererはマスター・フォルダにクエリーを行いません(詳細は、第21章「Discovererのレジストリ設定」を参照)。

使用例2では、必要な結果は次のようになります。

ENAME
CLARK
SMITH
ALLEN

マスター・フォルダをクエリーに含めると、DEPTテーブルの部門番号に一致する部門番号を持つ従業員のみが返ります。しかしDiscovererエンド・ユーザーは、EMPテーブルの全従業員を表示しようとしています。EMPテーブルの全従業員が返されるようにするには、「結合の編集」ダイアログの「オプション」タブ「ディテール・アイテムが常にマスター・フォルダに存在」オプションを選択して、Discovererでマスター・フォルダにクエリーを行わないように指定します。Discovererのレジストリ設定SQLJoinTrimも有効になっている場合、Discovererはマスター・フォルダにクエリーを行いません(詳細は、第21章「Discovererのレジストリ設定」を参照)。

例2: マスター・フォルダの除外が可能な場合あり

マスター・フォルダの除外によってディテール・テーブルから必要な結果が返らなくなる場合は、クエリーにマスター・フォルダを含めます。

注意: マスター・フォルダをクエリーの実行対象(複合フォルダのアイテムのみを使用する)に含めることは、Discoverer PlusまたはDiscoverer Desktopでマスター・フォルダとディテール・フォルダ間の結合を使用するという意味です。クエリー・アイテムを複合フォルダから選択する場合(Discoverer PlusまたはDiscoverer Desktopでワークシートを作成する場合)、Discovererでは結合が使用されます。クエリー・アイテムはマスター・フォルダまたはディテール・フォルダのいずれか(例ではそれぞれDEPTまたはEMP)から返されます。

Discovererエンド・ユーザーが、Emp_and_Dept複合フォルダからENAMEアイテムを選択することにより、EMPテーブルの現在の従業員の名前を表示しようとする場合を想定します。DEPTテーブルにない部門に属している従業員はすべて現在の従業員ではないため、必要ではありません。

使用例1では、必要な結果は次のようになります。

ENAME
CLARK
SMITH
ALLEN

マスター・フォルダをクエリーに含めても結果に違いはありません。すべての従業員が部門に属しているためです。クエリーのパフォーマンスを向上させるには、「結合の編集」ダイアログの「オプション」タブ「ディテール・アイテム値が常にマスター・フォルダに存在」オプションを選択して、Discovererでマスター・フォルダにクエリーを行わないように指定します。Discovererのレジストリ設定SQLJoinTrimも有効になっている場合、Discovererはマスター・フォルダにクエリーを行いません(詳細は、「Discovererのレジストリ設定」を参照)。

使用例2では、必要な結果は次のようになります。

ENAME
CLARK
SMITH

マスター・フォルダをクエリーに含めると、DEPTテーブルの部門番号に一致する部門番号を持つ従業員のみが返ります。これはDiscovererエンド・ユーザーが必要としている結果です。「結合の編集」ダイアログの「オプション」タブ「ディテール・アイテム値がマスター・フォルダに存在しない場合あり」オプションを選択することによって、常にマスター・フォルダにクエリーを行うように指定できます。

例3: マスター・フォルダの除外が常に不可能

マスター・フォルダとディテール・フォルダの両方からの情報が結果に含まれるようにする場合は、常にクエリーにマスター・フォルダを含めます。

注意: マスター・フォルダをクエリーの実行対象(複合フォルダのアイテムのみを使用する)に含めることは、Discoverer PlusまたはDiscoverer Desktopでマスター・フォルダとディテール・フォルダ間の結合を使用するという意味です。クエリー・アイテムを複合フォルダから選択する場合(Discoverer PlusまたはDiscoverer Desktopでワークシートを作成する場合)、Discovererでは結合が使用されます。クエリー・アイテムはマスター・フォルダまたはディテール・フォルダのどちらかあるいはその両方(例ではDEPTおよびEMP)から返されます。

Discovererエンド・ユーザーが、Emp_and_Dept複合フォルダからENAMEアイテムとDNAMEアイテムを選択することにより、従業員および各自が属する部門を表示しようとする場合を想定します。

使用例1では、必要な結果は次のようになります。

ENAME DNAME
CLARK ACCOUNTS
SMITH RESEARCH
ALLEN SALES

部門の名前を返すには、クエリーにマスター・フォルダを含めることが不可欠です。Discovererでは、「結合の編集」ダイアログの「オプション」タブ「ディテール・アイテム値が常にマスター・フォルダに存在」オプションが選択されている場合でも、クエリーにマスター・フォルダが含まれます。

使用例2では、必要な結果は次のようになります。

ENAME DNAME
CLARK ACCOUNTS
SMITH RESEARCH

部門の名前を返すには、クエリーにマスター・フォルダを含めることが不可欠です。Discovererでは、「結合の編集」ダイアログの「オプション」タブ「ディテール・アイテム値が常にマスター・フォルダに存在」オプションが選択されている場合でも、クエリーにマスター・フォルダが含まれます。

ALLENが(部門名のNULL値とともに)返されるのは、「結合の編集」ダイアログの「オプション」タブ「マスターでの外部結合」オプションを選択した場合のみです(詳細は、「外部結合」を参照)。

10.10 外部結合

外部結合とは、結合されたテーブルに一致する行が存在しない場合に、テーブルから行が返るようにするためのSQL構文です。

次の使用例を考えてみます。

図10-10 マスター・テーブルDEPTおよびディテール・テーブルEMP (クエリーの外部結合構成の場所によって返される行が決まる)

図10-10の説明は前後にあります。

次の各例では、前述の図のスキーマを使用して、外部結合の場所によってクエリーから返る行が決まる様子を示します。

例1: マスター・テーブルでの外部結合

Discovererエンド・ユーザーが、従業員が現在部門に属していなくても全従業員の記録を表示しようとする場合を想定します。必要な結果は次のようになります。

DNAME ENAME
ACCOUNTS CLARK
RESEARCH SMITH
<NULL> ALLEN

次のSQL文により、必要な結果が得られます。

select dname, ename
from dept, emp
where
dept.deptno(+)=emp.deptno

外部結合がマスター・テーブルにあるときには、一致するマスター行が存在しない各ディテール行、および一致するすべてのディテール行とマスター行がデータベースから返されます。SQL文では、プラス(+)記号が外部結合を示します。

Discovererエンド・ユーザーが必要な結果を表示できるようにするには、次のいずれかを行います。

例2: ディテール・テーブルでの外部結合

Discovererエンド・ユーザーが、部門に従業員がいなくてもすべての部門の記録を表示しようとする場合を想定します。必要な結果は次のようになります。

DNAME ENAME
ACCOUNTS CLARK
RESEARCH SMITH
OPERATIONS <NULL>

次のSQL文により、必要な結果が得られます。

select dname, ename
from dept, emp
where
dept.deptno=emp.deptno(+)

外部結合がディテール・テーブルにあるときには、一致するディテール行が存在しないマスター行、および一致するすべてのマスター行とディテール行がデータベースから返されます。SQL文では、プラス(+)記号が外部結合を示します。

Discovererエンド・ユーザーが必要な結果を表示できるようにするには、次のいずれかを行います。

10.11 結合の作成方法

結合を作成し、エンド・ユーザーが、異なるフォルダからのアイテムを同じワークシートに含められるようにします。

結合を作成する手順は、次のとおりです。

  1. 「ワークエリア」の「データ」タブを表示し、ディテール・フォルダのアイテムに一致するマスター・フォルダのアイテムを選択します。

    ヒント: マスター・フォルダとディテール・フォルダの区別の詳細は、「結合」を参照してください。

  2. 「挿入」→「結合」を選択すると、「結合ウィザード: ステップ1」ダイアログが表示されます。

    「マスター・アイテム」フィールドにマスター・アイテムが表示されます。

    図10-11 「結合ウィザード: ステップ1」ダイアログ

    図10-11の説明は前後にあります。

    ヒント: 「マスター・アイテム」フィールドのフォルダおよびアイテムを変更する場合は、ドロップダウン・リストの最後にある「追加アイテム」オプションを選択します。

  3. 「演算子」の下向き矢印をクリックし、ドロップダウン・リストから結合演算子を選択して結合のタイプを指定します。

  4. 「ディテール・アイテム」の下向き矢印をクリックして、「新規結合」ダイアログを表示します。

  5. 結合するフォルダとディテール・アイテムを選択します。

    同じビジネスエリアのフォルダからディテール・アイテムを選択するか、開いている別のビジネスエリアのフォルダから選択できます。

    マスター・アイテム、ディテール・アイテムおよび結合演算子を指定することにより、結合条件が作成されます。結合条件が1つのみの結合は、単一アイテム結合と呼ばれます(詳細は、「単一アイテム結合」を参照)。

    ヒント: 「ディテール・アイテム」フィールドのフォルダおよびアイテムを変更する場合は、ドロップダウン・リストの最後にある「追加アイテム」オプションを選択します。

    状況によっては、複数の結合条件を作成する必要があります(詳細は、「マルチアイテム結合」を参照)。

  6. (オプション)マルチアイテム結合を作成する手順は、次のとおりです。

    1. 「追加」をクリックして、新規結合条件のための新しい行を表示します。

    2. 「マスター・アイテム」および「ディテール・アイテム」のドロップダウン・リストを使用して、すでに作成した結合条件と同じマスター・フォルダおよびディテール・フォルダから新しいアイテムのペアを選択します。

      注意: すでに作成した結合条件に含まれていないフォルダからマスター・アイテムまたはディテール・アイテムを指定した場合は、すでに作成した結合条件が削除されます。

    3. マスター・フォルダおよびディテール・フォルダの一致するアイテムをすべて指定するまで、新規結合条件を追加します。

  7. 「次へ」をクリックすると、「結合ウィザード: ステップ2」ダイアログが表示されます。

    図10-12 「結合ウィザード: ステップ2」ダイアログ

    図10-12の説明は前後にあります。
  8. この結合に対する結合の詳細を次のように選択します。

  9. (オプション)必要に応じてこの結合に次のオプションを選択します。

    • 外部結合なし

      外部結合を作成せずに、一致するすべてのマスター行およびディテール行を表示するには、このオプションを選択します。

    • ディテールでの外部結合

      対応するディテール・アイテムのないマスター行、および一致するすべてのマスター行とディテール行を表示するには、このオプションを選択します。

    • マスターでの外部結合

      対応するマスターのないディテール行、および一致するすべてのディテール行とマスター行を表示するには、このオプションを選択します。このチェック・ボックスを選択できるのは、「ディテール・アイテム値がマスター・フォルダに存在しない場合あり」オプションが選択されている場合のみです。

    • マスターとディテール間の1対1結合

      マスター・テーブルとディテール・テーブルの間に1対1の関係があることを指定するには、このチェック・ボックスを選択します。

      注意: 外部結合を作成する場合は、このチェック・ボックスの選択を解除します。

    これらのオプションの詳細は、次の各項目を参照してください。

  10. 「終了」をクリックして変更内容を保存し、ダイアログを閉じます。

    Discoverer Administratorによって2つのフォルダ間に結合が作成されます。ワークエリアの両方のフォルダの下に結合アイコンが表示されます。

注意

10.12 結合の表示および編集方法

次の方法のいずれかまたは両方を使用して、結合を表示または編集できます。

次にこれらの方法を説明します。

「結合の編集」ダイアログを使用して結合を編集する方法

「結合の編集」ダイアログを使用して、結合を編集することが必要になる場合があります。

「結合の編集」ダイアログを使用して結合を編集する手順は、次のとおりです。

  1. 「ワークエリア」の「データ」タブで結合を選択し、「編集」→「編集」を選択して、「結合の編集」ダイアログの「アイテム」タブを表示します。

    図10-13 「結合の編集」ダイアログの「アイテム」タブ

    図10-13の説明は前後にあります。
  2. 必要に応じて結合の名前、説明および結合条件を編集します。

  3. 「結合の編集」ダイアログの「オプション」タブを表示します。

    図10-14 「結合の編集」ダイアログの「オプション」タブ

    図10-14の説明は前後にあります。
  4. 必要に応じて結合オプションを編集します。

  5. 「OK」をクリックし、変更内容を保存してダイアログを閉じます。

    「結合プロパティ」ダイアログを使用して結合プロパティを表示または編集する手順は、次のとおりです。

「結合プロパティ」ダイアログを使用して結合を編集する方法

「結合プロパティ」ダイアログを使用して、結合を編集することが必要になる場合があります。

  1. 「ワークエリア」の「データ」タブで結合を選択し、「編集」→「プロパティ」を選択して、「結合プロパティ」ダイアログを表示します。

    図10-15 「結合プロパティ」ダイアログの「一般」タブ

    図10-15の説明は前後にあります。

    ヒント: 同時に複数の結合を選択するには、[Ctrl]キーを押しながら別の結合をクリックします。選択された結合それぞれに共通するプロパティがすべて表示されます。プロパティの値が選択されたすべての結合に共通しない場合、「値」フィールドには何も表示されません。

  2. 必要に応じて変更を行います。

  3. 「OK」をクリックし、変更内容を保存して「結合プロパティ」ダイアログを閉じます。

10.13 結合の削除方法

もはや不要になった結合は削除できます。たとえば、以前に結合した2つのフォルダのアイテムが含まれるワークシートをエンド・ユーザーが作成しないようにする場合などです。

注意: 結合を削除すると、その結合を使用する他のEULオブジェクト(複合フォルダなど)も影響を受ける可能性があります。結合を削除する前に、EULをエクスポートすることをお薦めします。

結合を削除する手順は、次のとおりです。

  1. 「ワークエリア」の「データ」タブで結合を選択し、「編集」→「削除」を選択して、「削除の確認」ダイアログを表示します。

    ヒント: 同時に複数の結合を選択するには、[Ctrl]キーを押しながら別の結合をクリックします。

  2. (オプション)結合の削除によって影響を受ける可能性があるオブジェクトを確認する手順は、次のとおりです。

    1. 「影響」をクリックして、「影響」ダイアログを表示します。

      図10-16 「影響」ダイアログ

      図10-16の説明は前後にあります。

      「影響」ダイアログでは、結合の削除による影響を受ける可能性のある別のEULオブジェクトを確認できます。

      注意: 「影響」ダイアログには、ファイル・システム(.disファイル内)に保存されたワークブックに対する影響は表示されません。

    2. (オプション)「影響」ダイアログの行を選択すると、現在の処理がEULオブジェクトに与える影響を示すテキストが、リストの一番下に表示されます。

    3. 結合の削除による影響を確認し終えたら、「閉じる」をクリックして「影響」ダイアログを閉じます。

  3. 選択した結合(1つまたは複数)を削除する場合は、「はい」をクリックします。

10.14 ファントラップの概要およびDiscovererでの処理方法

ファントラップとは、予期せぬ結果を返す可能性がある、結合されたデータベース・テーブルのグループです。最も一般的なファントラップは、マスター・テーブルが2つ以上のディテール・テーブルに個別に結合される場合に起こります。

図10-17 単純なファントラップ・スキーマ

図10-17の説明は前後にあります。

このような構成は、関係としては正しくても、簡単なSQL文を使用してデータ・ポイントを集計するときに不正な結果を返す傾向にあります。

ただし、Discovererを使用してデータ・ポイントを集計する場合は、不正な結果が返されることはありません(ファントラップ検出を有効にした場合)。Discovererが生成するすべてのクエリーは、ファントラップの可能性がないかどうかが検査されます。ファントラップが検出されると、正しいレベルで集計が行われるように、通常Discovererはインライン・ビューを使用してクエリーをリライトします。各マスター/ディテール集計について1つのインライン・ビューが作成され、外部クエリーの結果が組み合されます。

簡単なSQL文で不正な結果が返される場合に、Discovererでは正しい結果が返される様子の例は、「ファントラップの例」を参照してください。

状況によっては、次のような解決不可能なファントラップ・スキーマが含まれるクエリーが検出されることもあります。

このような場合、Discovererではクエリーが禁止され、エラー・メッセージが表示されます。

さらに、Discovererは合計できる列を制御します。マスター・フォルダとディテール・フォルダの両方のアイテムの値がワークシートに表示されている場合、Discovererではこれらの値が合計されません。そのかわりにNULL文字が表示され、不正な結果や予期せぬ結果が返るのを防ぎます。

Discovererでファントラップ検出を有効または無効にする場合の詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Discoverer Plusユーザーズ・ガイド』を参照してください。

10.15 ファントラップの例

1つのマスター・フォルダ(ACCOUNT)と2つのディテール・フォルダ(SALESおよびBUDGET)が含まれる次のようなファントラップ・スキーマの例を考えてみます。

図10-18 ファントラップ・スキーマの例

図10-18の説明は前後にあります。

すべての会計に、各期間の複数の販売数値と複数の予算数値を持つことができます。

Discovererエンド・ユーザーが「会計ごとの売上合計と予算合計はいくらか」という質問に回答する場合を想定します。2つのディテール・テーブルの集計(SUM)は、同じマスター・テーブル(ACCOUNT)から得たものです。

この比較的単純なクエリーによって返される結果は次のとおりです。

Discovererを使用した正しい結果の生成

「会計ごとの売上合計と予算合計はいくらか」という質問に回答するために、Discovererでは次の処理が行われます。

Discovererでは、次のような正しい結果が返されます。

Account (会計) Sales (販売) Budget (予算)
Account 1 400 400
Account 2 130 100
Account 3 200 750
Account 4 300 200

Discovererでは正しいレベルで集計が行われるように、クエリーの検査、ファントラップの検出、クエリーのリライトが行われます。各マスター/ディテール集計について1回、インライン・ビューを使用してクエリーがリライトされ、外部クエリーの結果が組み合されます。

次の例は、正しい結果を返すためにDiscovererで使用されるSQLを示しています。

SELECT inACC as Name, SUM(inSalesSum) as SALES_SUM, ,SUM(inBudgetSum) as BUDGET__SUM, 
FROM 
(SELECT masterID AS OutMasterIDSales, SUM(SalesDetailsSales) AS inSalesSum
FROM
(SELECT ID AS masterID, NAME AS masterName FROM ACCOUNT) INLineAccount,
(SELECT ID AS SalesDetailId, ACCID AS SalesDetailAccID, SALES AS SalesDetailsSales FROM SALES )INLineSales
WHERE(masterID = SalesDetailAccID(+))
GROUP BY masterID) inner1,
(SELECT masterID AS OutMasterIDBudget, SUM(BudgetDetailBudget) AS inBudgetSum, masterName AS inACC
FROM
(SELECT ID AS masterID, NAME AS masterName FROM ACCOUNT) INLineAccount,
(SELECT ID AS BudgetDetailId, ACCID AS BudgetDetailAccID, BUDGET AS BudgetDetailsSales FROM BUDGET )INLineBudget
WHERE(masterID = BudgetDetailAccID(+))
GROUP BY masterName, masterID ) inner2
WHERE ((OutMasterIDBudget = OutMasterIDSales))
GROUP BY inACC

各販売と各予算が個別に(各マスター/ディテール集計について1回)合計され、マスター・キー(1つまたは複数)に基づいて結合と組み合されるため、この結果は正しくなります。

簡単なSQL文を使用した不正な結果の生成

「会計ごとの売上合計と予算合計はいくらか」という質問に回答するために、次のような簡単なSQL文の使用が考えられます。

SELECT Account.Name, SUM(sales), SUM(budget) 
FROM 
Account, Sales, Budget
Where 
Account.id=Sales.accid
AND
Account.id=Budget.accid
GROUP BY
Account.Name

このような簡単なSQL文では、次のような不正な結果が返ります。

Account (会計) Sales (販売) Budget (予算)
Account 1 800 1200
Account 2 130 200
Account 3 600 750
Account 4 600 600

この結果は関係上は正しいのですが、あきらかに間違っています。たとえば、この結果ではAccount 1の売上合計が800となっていますが、SALESテーブルによればAccount 1の売上合計は400 (100+100+200)です。

このような不正な結果の原因は、各テーブルが最初に一時的なテーブルに結合されてから集計が行われる単一クエリーにあります。しかしこの処理では、集計が複数回(不正に)行われることになります。

10.16 複合フォルダ内でファントラップを設定した場合の作業

Discovererでは、複合フォルダ内でのファントラップ結合設定に関する警告が、無効な結合設定が存在することを示すメッセージとして表示されます。Discovererで複合ファイルに対して正しい結果が確実に返るようにするには、ディテール・アイテムの「計算式」プロパティを編集して、集計計算式を明示的に指定します。

たとえば次のように、複合フォルダの「Sales」アイテムの「計算式」プロパティを、Sales Fact.SalesからSUM(Sales Facts.Sales)に設定します。

図10-19 複合フォルダ内のアイテムについて指定された集計計算式の例

図10-19の説明は前後にあります。

10.17 結合にデータ型の不一致がある場合の作業

Discovererでは、異なるデータ型(VARCHAR、NUMBERまたはDATEなど)のアイテム間の結合は禁止されています。ただし、以前のDiscovererリリースからアップグレードしている場合、異なるデータ型間に既存の結合が存在することがあります。データ型が異なる2つのアイテム間の結合が存在する場合、クエリーは実行されますが、エラー・メッセージが表示されて、クエリーは完了しません。また、データ型が異なるアイテムを含む結合の編集を試みると、エラー・メッセージが表示されます。

次の方法で、データ型が異なる2つのアイテム間の結合を作成できます。

詳細は、「データ型の異なる2つのアイテム間に結合を作成する方法の例」を参照してください。

10.17.1 データ型の異なる2つのアイテム間に結合を作成する方法の例

この例では、次のアイテムを使用して、「Calendar Date」フォルダと「Store and Sales Detail」フォルダの間に結合を作成します。

  • 「Calendar Date」フォルダの「Day of Week」アイテム

  • 「Store and Sales Detail」フォルダの「Transaction Date」アイテム

これら2つのアイテムは、次のようにデータ型が異なります。

  • 「Day of Week」アイテムのデータ型はVARCHAR

  • 「Transaction Date」アイテムのデータ型はDATE

これら2つのアイテムを使用して2つのフォルダ間に結合を作成するには、次の手順を実行する必要があります。

10.17.1.1 ステップ1: 「Day of Week」アイテムをVARCHARからDATEデータ型に変換する新規アイテムの作成

「Day of Week」アイテムをVARCHARからDATEデータ型に変換する新規アイテムを作成する最初の手順は、次のとおりです。

  1. 「Video Store Tutorial」ビジネスエリアから「Calendar Date」フォルダを選択します。

  2. 「挿入」→「アイテム」を選択して、「新規アイテム」ダイアログを表示します。

  3. 「アイテム名」フィールドに「New Day of Week」と入力します。

  4. 「関数」オプションを選択して、関数フォルダを表示します。

  5. 「変換」フォルダの隣のプラス記号(+)をクリックして、変換関数を表示します。

  6. TO_DATE関数を選択し、「貼付け >>」をクリックして、TO_DATE関数を新規アイテムの「計算」フィールドに貼り付けます。

  7. 「計算」フィールドのTO_DATE関数のカッコ内のテキストを次のテキストで置き換えます。

    Day of Week,Day

    「計算」フィールドに次のテキストが表示されます。

    TO_DATE(Day of Week,Day)

  8. 「OK」をクリックして、新規アイテムを作成します。

「Day of Week」(VARCHAR)アイテムを基に、DATEデータ型に変換された新規アイテムが作成されました。

10.17.1.2 ステップ2: 作成した新規アイテムを使用した結合の作成

正しいデータ型の新規計算定義アイテムを作成したら、次の手順では新規アイテムを「Store and Sales Details」フォルダの「Transaction Date」アイテムに結合します。

  1. 「Calendar Date」フォルダの「New Day of Week」アイテムを選択します。

  2. 「挿入」→「結合」を選択すると、「結合ウィザード: ステップ1」ダイアログが表示されます。

  3. 「ディテール・アイテム」ドロップダウン・リストをクリックして、「新規結合」ダイアログを表示します。

    「新規結合」ダイアログでは、新規結合のディテール・フォルダおよびアイテムを選択できます。

  4. 「Store and Sales Details」フォルダの隣のプラス記号(+)をクリックして、フォルダのアイテムを展開します。

  5. 「Transaction Date」アイテムを選択し、「OK」をクリックして「新規結合」ダイアログを閉じます。

  6. 「次へ」をクリックすると、「結合ウィザード: ステップ2」ダイアログが表示されます。

  7. 「終了」をクリックしてデフォルトの結合オプションを受け入れ、「結合ウィザード: ステップ2」ダイアログを閉じます。

    「New Day of Week」アイテムと「Transaction Date」アイテムのデータ型が同じなので、Discovererではこれら2つのアイテムを使用して、「Calendar Date」フォルダを「Store and Sales Details」フォルダに結合できます。