Oracle Business Intelligence Discoverer 管理ガイド 10gリリース2(10.1.2.1) B25101-01 |
|
この章では、Discoverer Administratorを使用した結合の実装方法について説明します。項目は次のとおりです。
Discovererの結合では、1つ以上の一致するアイテムを使用して2つのフォルダを関連付けます。データベースの結合では、一致する列を使用して2つのテーブルを関連付けます。
たとえば、DEPTとEMPという2つのテーブルを考えてみます。
DEPTテーブルの各部門には、部門名および部門番号が付いています。EMPテーブルの各従業員には名前があり、各自が1つの部門に属しています(部門は部門番号で識別します)。
従業員の名前およびその従業員が働く部門の名前を確認するには、両方のテーブルから情報を抽出する必要があります。しかし、同じクエリーで両方のテーブルから情報を抽出できるようにするには、テーブルの間に結合が存在する必要があります。
結合を定義するには、通常は他のテーブルの列と一致する1つの列をテーブルの中で指定します。DEPTテーブルとEMPテーブルの例では、DEPTテーブルのDEPTNO列がEMPテーブルのDEPTNO列と一致します。つまり、DEPTテーブルのDEPTNO列の各値には、EMPテーブルのDEPTNO列に一致する値があります。
結合は、一般にマスター・テーブルとディテール・テーブルで構成されます。マスター・テーブルの1行に対し、ディテール・テーブルには複数の行が存在します。前述の例では、DEPTテーブルがマスター・テーブルでEMPテーブルがディテール・テーブルです。各部門には複数の従業員がいるからです。
ディテール・テーブルの一致する列は、一般的に外部キー列と呼ばれます。
Discoverer Administratorを使用して結合を作成するときは、マスター・フォルダ内のアイテムとディテール・フォルダ内の一致するアイテムを識別する結合条件を指定します。次の点に留意することが重要です。
2つのフォルダ間に結合を定義すると、次のことが可能になります。
Discovererの単一アイテム結合では、両方のフォルダに共通するアイテムを結合条件で指定して、2つのフォルダを関連付けます。結合条件とは、結合演算子によって関連付けられる2つの結合アイテムの組合せです。通常、結合演算子には等号(=)が使用されるため、このような結合は等価結合と呼ばれます(他の結合演算子の詳細は、「非等価結合」を参照)。
たとえば次のスキーマでは、共通する列であるDEPTNOを使用してDEPTテーブルとEMPテーブルを結合します。
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エンド・ユーザーが必要な結果を表示できるようにするには、次のいずれかを行います。
結合を定義すると、次のことが可能になります。
Discovererのマルチアイテム結合では、すべての結合条件が満たされたときに結合が真になるように、複数の結合条件を使用して2つのフォルダが関連付けられます(結合条件の詳細は、「単一アイテム結合」を参照)。
たとえば次のスキーマでは、COUNTRY_CODEとPRODUCT_CODEの組合せを使用して、製品を一意に識別します。
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エンド・ユーザーが必要な結果を表示できるようにするには、次のいずれかを行います。
マルチアイテム結合を定義すると、次のことが可能になります。
注意: 各テーブルの複数の列を使用して行を識別する結合も、コンポジット結合キーと呼ばれます。
Discovererで3つ以上のフォルダを結合するには、各フォルダの間に別個の結合を定義する必要があります。
たとえば次のスキーマでは、2つの結合を使用して3つのテーブルを関連付けます。1つの結合がVIDEO_SALES_ORDERSテーブルをSALES_ORDER_LINE_ITEMSテーブルに関連付け、もう1つの結合がVIDEO_PRODUCTSテーブルをSALES_ORDER_LINE_ITEMSテーブルに関連付けます。
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エンド・ユーザーが必要な結果を表示できるようにするには、次のいずれかを行います。
2つの別個の結合を定義すると、次のことが可能になります。
Discovererでは、非等価結合により、テーブルの列の間に直接の対応関係がない2つのフォルダを結合できます。非等価結合では、非等価結合演算子を使用する1つ以上の結合条件を使用して、2つのフォルダを関連付けます。
たとえば次のスキーマでは、2つのテーブルに一致する列がないため、非等価結合を使用してEMPテーブルとSALGRADEテーブルを結合します。
従業員の等級は給料に依存します。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エンド・ユーザーが必要な結果を表示できるようにするには、次のいずれかを行います。
結合を定義すると、次のことが可能になります。
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対多結合に変更できます。ごくまれに、多対多結合が有効な構成になる場合があります。
複合フォルダを作成するときに、複数の結合を使用して2つのフォルダを結合することが必要になる場合があります。たとえば同じアイテムを含む複合フォルダを複数作成して、各複合フォルダで1つ以上の結合を使用する場合などです。これらの結合は、それぞれ異なる結合オプションを使用して定義できます。
次の表は、2つのフォルダ(例ではempとdept)を4つの異なる結合を使用して結合する方法を示しています。複合フォルダにアイテムを追加するときに、これらの結合を1つ以上選択できます。
複合フォルダを作成し、複数の結合を有する2つのフォルダからアイテムをドラッグすると、Discoverer Administratorによって「結合の選択」ダイアログが表示され、使用する結合を1つまたは複数選択できます。
詳細は、「複合フォルダの作成方法」を参照してください。
Discoverer PlusまたはDiscoverer Desktopのユーザーが複数フォルダのアイテムを使用するワークシートを作成し、複数の結合を使用して結合された2つのフォルダからアイテムを選択すると、Discovererでは次のいずれかの処理が行われます。
Discoverer PlusまたはDiscoverer Desktopで「複数の結合パスの検出を使用しない」オプションが選択されているときの処理です。
Discoverer PlusまたはDiscoverer Desktopで「複数の結合パスの検出を使用しない」オプションが選択解除されているときの処理です。
詳細は、『Oracle Business Intelligence Discoverer Plusユーザーズ・ガイド』を参照してください。
状況によっては、マスター・フォルダおよびディテール・フォルダにクエリーを行うときに、常にDiscovererで結合を使用する場合があります。たとえば、次のような場合です。
結合の解決には比較的時間がかかるため、このようなクエリーでは結果が返るまでに比較的長い時間がかかる可能性があります。
他の状況では、Discovererでマスター・フォルダとディテール・フォルダの両方にクエリーを行う必要はありません。たとえば、次のような場合です。
Discovererでマスター・フォルダにクエリーを行う必要がないことを示す適切なオプションを設定すると、クエリーのパフォーマンスが向上します。ただし、マスター・テーブルにクエリーを行わないことにより、予期せぬ結果が返される可能性がありますので注意してください。マスター・フォルダを含める必要があるかどうかわからない場合は、「複合フォルダからのクエリー結果に結合が影響する例」を参照してください。
複合フォルダ内の3つ以上のフォルダを組み合せる場合(結合を使用)、Discovererでは不要な結合を検出して削除することにより、クエリーのパフォーマンスを向上できます(結合トリミング)。SQLJoinTrimのDiscovererレジストリ設定が有効になっている(デフォルト値である1に設定されている)ときは、次の条件の両方が満たされた場合にクエリーから結合が削除されます。
Discovererレジストリ設定の詳細は、第21章「Discovererのレジストリ設定」を参照してください。
「ディテール・アイテム値がマスター・フォルダに存在しない場合あり」オプションが選択されている結合を使用するクエリーを満たすために、Discovererでサマリー・フォルダが使用されることはありません(詳細は「「結合の編集」ダイアログ: 「オプション」タブ」を参照)。
次の例は、Discoverer Administratorを使用してEmp_and_Deptという複合フォルダが作成されていることを前提にしています。この複合フォルダは、DEPTテーブルおよびEMPテーブルに基づくもので、結合条件DEPT.DEPTNO=EMP.DEPTNOを使用します。
次の2つの使用例を考えてみます。
使用例1では、EMPテーブルの従業員はDEPTテーブルの部門の1つに常に属する必要があります。
この使用例で示されるスキーマでは、マスター・フォルダをクエリーに含めるかどうかにかかわらず、ENAMEに対するクエリーで同じ結果が生成されます。
使用例2では、次に示すように、EMPテーブルの従業員がDEPTテーブルの部門に属する必要はありません。
この使用例で示されるスキーマでは、マスター・フォルダをクエリーに含めるかどうかにより、ENAMEに対するクエリーで異なる結果が生成される可能性があります。
マスター・フォルダを含めても結果に違いがないときや、マスター・フォルダを含めても必要な結果が返らないときは、クエリーからマスター・フォルダを除外します。
注意: マスター・フォルダをクエリーの実行対象(複合フォルダのアイテムのみを使用するもの)から除外することは、Discoverer PlusまたはDiscoverer Desktopでマスター・フォルダとディテール・フォルダ間の結合を使用しないという意味です。クエリー・アイテムを複合フォルダから選択する場合(Discoverer PlusまたはDiscoverer Desktopでワークシートを作成する場合)、Discovererでは結合が使用されません。クエリー・アイテムはディテール・フォルダ(例ではEMP)からのみ返ります。
Discovererエンド・ユーザーが、Emp_and_Dept複合フォルダからENAMEアイテムを選択することにより、EMPテーブルの全従業員の名前を表示しようとする場合を想定します。
使用例1では、必要な結果は次のようになります。
ENAME |
---|
CLARK |
SMITH |
ALLEN |
マスター・フォルダをクエリーに含めても結果に違いはありません。クエリーによってすべての従業員が返されるためです。クエリーのパフォーマンスを向上させるには、「結合の編集」ダイアログ: 「オプション」タブでディテール・アイテムが常にマスター・フォルダに存在するというオプションを選択して、Discovererでマスター・フォルダにクエリーを行わないように指定します。同時にSQLJoinTrimのDiscovererレジストリ設定も有効になっている場合、Discovererはマスター・フォルダにクエリーを行いません(詳細は、第21章「Discovererのレジストリ設定」を参照)。
使用例2では、必要な結果は次のようになります。
ENAME |
---|
CLARK |
SMITH |
ALLEN |
マスター・フォルダをクエリーに含めると、DEPTテーブルの部門番号に一致する部門番号を持つ従業員のみが返ります。しかしDiscovererエンド・ユーザーは、EMPテーブルの全従業員を表示しようとしています。EMPテーブルの全従業員が返るようにするには、「結合の編集」ダイアログ: 「オプション」タブでディテール・アイテムが常にマスター・フォルダに存在するというオプションを選択して、Discovererでマスター・フォルダにクエリーを行わないように指定します。同時にSQLJoinTrimのDiscovererレジストリ設定も有効になっている場合、Discovererはマスター・フォルダにクエリーを行いません(詳細は、第21章「Discovererのレジストリ設定」を参照)。
マスター・フォルダの除外によってディテール・テーブルから必要な結果が返らなくなる場合は、クエリーにマスター・フォルダを含めます。
注意: マスター・フォルダをクエリーの実行対象(複合フォルダのアイテムのみを使用する)に含めることは、Discoverer PlusまたはDiscoverer Desktopでマスター・フォルダとディテール・フォルダ間の結合を使用するという意味です。クエリー・アイテムを複合フォルダから選択する場合(Discoverer PlusまたはDiscoverer Desktopでワークシートを作成する場合)、Discovererでは結合が使用されます。クエリー・アイテムはマスター・フォルダまたはディテール・フォルダのいずれか(例ではそれぞれDEPTまたはEMP)から返ります。
Discovererエンド・ユーザーが、Emp_and_Dept複合フォルダからENAMEアイテムを選択することにより、EMPテーブルの現在の従業員の名前を表示しようとする場合を想定します。DEPTテーブルにない部門に属している従業員はすべて現在の従業員ではないため、必要ではありません。
使用例1では、必要な結果は次のようになります。
ENAME |
---|
CLARK |
SMITH |
ALLEN |
マスター・フォルダをクエリーに含めても結果に違いはありません。すべての従業員が部門に属しているためです。クエリーのパフォーマンスを向上させるには、「結合の編集」ダイアログ: 「オプション」タブで「ディテール・アイテム値が常にマスター・フォルダに存在」オプションを選択して、Discovererでマスター・フォルダにクエリーを行わないように指定します。同時にSQLJoinTrimのDiscovererレジストリ設定も有効になっている場合、Discovererはマスター・フォルダにクエリーを行いません(詳細は、「Discovererのレジストリ設定について」を参照)。
使用例2では、必要な結果は次のようになります。
ENAME |
---|
CLARK |
SMITH |
マスター・フォルダをクエリーに含めると、DEPTテーブルの部門番号に一致する部門番号を持つ従業員のみが返ります。これはDiscovererエンド・ユーザーが必要としている結果です。「結合の編集」ダイアログ: 「オプション」タブで「ディテール・アイテム値がマスター・フォルダに存在しない場合あり」オプションを選択することによって、常にマスター・フォルダにクエリーを行うように指定できます。
マスター・フォルダとディテール・フォルダの両方からの情報が結果に含まれるようにする場合は、常にクエリーにマスター・フォルダを含めます。
注意: マスター・フォルダをクエリーの実行対象(複合フォルダのアイテムのみを使用する)に含めることは、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値とともに)返されるのは、「結合の編集」ダイアログ: 「オプション」タブで「マスターでの外部結合」オプションを選択した場合のみです(詳細は、「外部結合」を参照)。
外部結合とは、結合されたテーブルに一致する行が存在しない場合に、テーブルから行が返るようにするためのSQL構文です。
次の使用例を考えてみます。
次の各例では、前述の図のスキーマを使用して、外部結合の場所によってクエリーから返る行が決まる様子を示します。
Discovererエンド・ユーザーが、従業員が現在部門に属していなくても全従業員の記録を表示しようとする場合を想定します。必要な結果は次のようになります。
DNAME | ENAME |
---|---|
ACCOUNTS |
CLARK |
RESEARCH |
SMITH |
<NULL> |
ALLEN |
次のSQL文により、必要な結果が得られます。
select dname, ename from dept, emp where dept.deptno(+)=emp.deptno
外部結合がマスター・テーブルにあるとき、一致するマスター行が存在しないディテール行(および一致するすべてのディテール行とマスター行)がデータベースから返ります。SQL文では、プラス(+)記号が外部結合を示します。
Discovererエンド・ユーザーが必要な結果を表示できるようにするには、次のいずれかを行います。
結合を定義すると、次のことが可能になります。
Discovererエンド・ユーザーが、部門に従業員がいなくてもすべての部門の記録を表示しようとする場合を想定します。必要な結果は次のようになります。
DNAME | ENAME |
---|---|
ACCOUNTS |
CLARK |
RESEARCH |
SMITH |
OPERATIONS |
<NULL> |
次のSQL文により、必要な結果が得られます。
select dname, ename from dept, emp where dept.deptno=emp.deptno(+)
外部結合がディテール・テーブルにあるとき、一致するディテール行が存在しないマスター行(および一致するすべてのマスター行とディテール行)がデータベースから返ります。SQL文では、プラス(+)記号が外部結合を示します。
Discovererエンド・ユーザーが必要な結果を表示できるようにするには、次のいずれかを行います。
結合を定義すると、次のことが可能になります。
結合を作成し、エンド・ユーザーが、異なるフォルダからのアイテムを同じワークシートに含められるようにします。
結合を作成する手順は、次のとおりです。
ヒント: マスター・フォルダとディテール・フォルダの区別の詳細は、「結合」を参照してください。
「マスター・アイテム」フィールドにマスター・アイテムが表示されます。
ヒント: 「マスター・アイテム」フィールドのフォルダおよびアイテムを変更する場合は、ドロップダウン・リストの最後にある「追加アイテム」オプションを選択します。
同じビジネスエリアのフォルダからディテール・アイテムを選択するか、開いている別のビジネスエリアのフォルダから選択できます。
マスター・アイテム、ディテール・アイテムおよび結合演算子を指定することにより、結合条件が作成されます。結合条件が1つのみの結合は、単一アイテム結合と呼ばれます(詳細は、「単一アイテム結合」を参照)。
ヒント: 「ディテール・アイテム」フィールドのフォルダおよびアイテムを変更する場合は、ドロップダウン・リストの最後にある「追加アイテム」オプションを選択します。
状況によっては、複数の結合条件を作成する必要があります(詳細は、「マルチアイテム結合」を参照)。
クエリーのパフォーマンスを向上させるには、このラジオ・ボタンを選択します(詳細は、「クエリー結果およびクエリーのパフォーマンスに結合が与える影響」を参照)。
ディテール・フォルダのすべての値に対して一致する値がマスター・フォルダにあるかどうかわからない場合は、このラジオ・ボタンを選択します。このオプションを選択すると、予期せぬ結果が返される可能性がありますので注意してください(詳細は、「クエリー結果およびクエリーのパフォーマンスに結合が与える影響」を参照)。
外部結合を作成せずに、一致するすべてのマスター行およびディテール行を表示するには、このラジオ・ボタンを選択します。
対応するディテール・アイテムのないマスター行を、一致するすべてのマスター行およびディテール行とともに表示するには、このラジオ・ボタンを選択します。
対応するマスターのないディテール行を、一致するすべてのディテール行およびマスター行とともに表示するには、このラジオ・ボタンを選択します。このチェックボックスを選択できるのは、「ディテール・アイテム値がマスター・フォルダに存在しない場合あり」オプションが選択されている場合のみです。
マスター・テーブルとディテール・テーブルの間に1対1の関係があることを指定するには、このチェックボックスを選択します。
注意: 外部結合を作成する場合は、このチェックボックスの選択を解除します。
これらのオプションの詳細は、次の各項目を参照してください。
Discoverer Administratorによって2つのフォルダ間に結合が作成されます。ワークエリアの両方のフォルダの下に結合アイコンが表示されます。
次の方法のいずれかまたは両方を使用して、結合を表示または編集できます。
次にこれらの方法を説明します。
「結合の編集」ダイアログを使用して、結合を編集することが必要になる場合があります。
「結合の編集」ダイアログを使用して結合を編集する手順は、次のとおりです。
「結合プロパティ」ダイアログを使用して結合プロパティを表示または編集する手順は、次のとおりです。
「結合プロパティ」ダイアログを使用して、結合を編集することが必要になる場合があります。
ヒント: 同時に複数の結合を選択するには、[Ctrl]キーを押しながら別の結合をクリックします。選択された結合それぞれに共通するプロパティがすべて表示されます。プロパティの値が選択されたすべての結合に共通しない場合、「値」フィールドには何も表示されません。
もはや不要になった結合は削除できます。たとえば、以前に結合した2つのフォルダのアイテムが含まれるワークシートをエンド・ユーザーが作成しないようにする場合などです。
注意: 結合を削除すると、その結合を使用する他のEULオブジェクト(複合フォルダなど)も影響を受ける可能性があります。結合を削除する前に、EULをエクスポートすることをお薦めします。
結合を削除する手順は、次のとおりです。
ヒント: 同時に複数の結合を選択するには、[Ctrl]キーを押しながら別の結合をクリックします。
ファントラップとは、予期せぬ結果を返す可能性がある、結合されたデータベース・テーブルのグループです。最も一般的なファントラップは、マスター・テーブルが2つ以上のディテール・テーブルに個別に結合される場合に起こります。
このような構成は、関係としては正しくても、簡単なSQL文を使用してデータ・ポイントを集計するときに不正な結果を返す傾向にあります。
ただし、Discovererを使用してデータ・ポイントを集計する場合は、不正な結果が返されることはありません(ファントラップ検出を有効にした場合)。Discovererが生成するすべてのクエリーは、ファントラップの可能性がないかどうかが検査されます。ファントラップが検出されると、正しいレベルで集計が行われるように、通常Discovererはインライン・ビューを使用してクエリーをリライトします。各マスター−ディテール集計について1つのインライン・ビューが作成され、次に外部クエリーの結果が組み合されます。
簡単なSQL文で不正な結果が返る場合に、Discovererでは正しい結果が返される様子の例は、「ファントラップの例」を参照してください。
状況によっては、次のような解決不可能なファントラップ・スキーマが含まれるクエリーが検出されることもあります。
このような場合、Discovererではクエリーが禁止され、エラー・メッセージが表示されます。
さらに、Discovererは合計できる列を制御します。マスター・フォルダとディテール・フォルダの両方のアイテムの値がワークシートに表示されている場合、Discovererではこれらの値が合計されません。そのかわりにNULL文字が表示され、不正な結果や予期せぬ結果が返るのを防ぎます。
Discovererでファントラップ検出を有効または無効にする場合の詳細は、『Oracle Business Intelligence Discoverer Plusユーザーズ・ガイド』を参照してください。
1つのマスター・フォルダ(ACCOUNT)と2つのディテール・フォルダ(SALESおよびBUDGET)が含まれる次のようなファントラップ・スキーマの例を考えてみます。
すべての会計に、各期間の複数の販売数値と複数の予算数値を持つことができます。
Discovererエンド・ユーザーが「会計ごとの売上合計と予算合計はいくらか」という質問に回答する場合を想定します。2つのディテール・テーブルの集計(SUM)は、同じマスター・テーブル(ACCOUNT)から得たものです。
この比較的単純なクエリーによって返される結果は次のとおりです。
「会計ごとの売上合計と予算合計はいくらか」という質問に回答するために、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文の使用が考えられます。
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)です。
このような不正な結果の原因は、各テーブルが最初に一時的なテーブルに結合されてから集計が行われる単一クエリーにあります。しかしこの処理では、集計が複数回(不正に)行われることになります。
Discovererでは、複合フォルダ内でのファントラップ結合設定に関する警告が、無効な結合設定が存在することを示すメッセージとして表示されます。Discovererで複合ファイルに対して正しい結果が確実に返るようにするには、ディテール・アイテムの「計算式」プロパティを編集して、集計計算式を明示的に指定します。
たとえば次のように、複合フォルダのSalesアイテムの「計算式」プロパティを、Sales Fact.SalesからSUM(Sales Facts.Sales)に設定します。
Discovererでは、異なるデータ型(VARCHAR、NUMBERまたはDATEなど)のアイテム間の結合は禁止されています。ただし、以前のDiscovererリリースからアップグレードしている場合、異なるデータ型間に既存の結合が存在することがあります。データ型が異なる2つのアイテム間の結合が存在する場合、クエリーは実行されますが、エラー・メッセージが表示されて、クエリーは完了しません。また、データ型が異なるアイテムを含む結合の編集を試みると、エラー・メッセージが表示されます。
次の方法で、データ型が異なる2つのアイテム間の結合を作成できます。
詳細は、「データ型の異なる2つのアイテム間に結合を作成する方法の例」を参照してください。
この例では、次のアイテムを使用して、「Calendar Date」フォルダと「Store and Sales Detail」フォルダの間に結合を作成します。
これら2つのアイテムは、次のようにデータ型が異なります。
これら2つのアイテムを使用して2つのフォルダ間に結合を作成するには、次の手順を実行する必要があります。
「Day of Week」アイテムをVACHARからDATEデータ型に変換する新規アイテムを作成する最初の手順は、次のとおりです。
New Day of Week
」と入力します。
Day of Week,Day
「ユーザー定義アイテム」フィールドに次のテキストが表示されます。
TO_DATE(Day of Week,Day)
「Day of Week」(VARCHAR)アイテムを基に、DATEデータ型に変換された新規アイテムが作成されました。
正しいデータ型の新規ユーザー定義アイテムを作成したら、次の手順では新規アイテムを「Store and Sales Details」フォルダの「Transaction Date」アイテムに結合します。
「新規結合」ダイアログでは、新規結合のディテール・フォルダおよびアイテムを選択できます。
「New Day of Week」アイテムと「Transaction Date」アイテムのデータ型が同じなので、Discovererではこれら2つのアイテムを使用して、「Calendar Date」フォルダを「Store and Sales Details」フォルダに結合できます。
|
Copyright © 1996, 2005 Oracle. All Rights Reserved. |
|