Oracle® Fusion Middleware Oracle Business Intelligence Publisherデータ・モデリング・ガイド 12c (12.2.1.4.0) E96100-05 |
|
![]() 前 |
![]() 次 |
データ・モデルのダイアグラムは、複数のデータ・セットに基づいたレポート用のデータ・セット、ブレーク・グループおよび合計の定義を短時間で簡単に実行するために役立ちます。
データ・セット(または問合せ)をリンクしていない場合、データ・エンジンはマルチパート非関連問合せデータ・セットを生成します。
たとえば、次のイメージに示すデータ・モデルでは、一方の問合せで製品を選択して、もう一方の問合せで顧客を選択しています。製品と顧客の間にはリレーションシップがありません。
結果は、次のイメージに示すようなデータ構造で表示されます。
データ・セットまたは問合せのある部分のためにフェッチされたデータは、他の部分のためにフェッチされたデータによって判別できます。この結果は通常、マスター/ディテール関係または親子関係と呼ばれ、2つのデータ・セットまたは問合せ間のデータ・リンクで定義されます。
マスター/ディテールのデータ・モデルを実行すると、マスター(または親)問合せの行ごとに、ディテール(または子)に対する問合せが実行され、一致する行のみが取り出されます。
次のイメージに示す例では、2つのデータ・セットが要素Customer IDでリンクされています。Ordersデータ・セットはCustomersデータ・セットの子です。
この例では、次のイメージに示すデータ構造が生成されます。
データ・モデルの構築には、特定のガイドラインをお薦めします。
データ・モデル内のデータ・セットまたは問合せの数は、できるかぎり少なくしてください。一般的に、データ・セットおよび問合せの数を少なくするほど、データ・モデルの実行が高速になります。傾向としては、複数問合せデータ・モデルのほうがわかりやすく、単一問合せデータ・モデルのほうが速く実行できます。親子関係のある問合せでは、親ごとに子問合せが実行されることを理解しておく必要があります。
複数問合せデータ・モデルは、次の場合にのみ使用してください。
直接サポートされていないタイプの問合せ(SQL問合せなど)の関数を実行する場合。
複合ビュー(分散問合せ、GROUP BY問合せなど)をサポートする場合。
ビューがないときやビューが必要なときにビューをシミュレートする場合。
データ・モデル・エディタを使用すると、複数のデータ・セットからのデータを単一のXMLデータ構造に結合できます。
複数のデータソースからのデータ・セットは、シーケンシャルXMLとしてマージするか、行レベルでマージすることで、単一の結合された階層XMLを作成できます。データ・モデル・エディタを使用すると、各タイプ(SQL問合せ、OLAP (MDX問合せ)、LDAPおよびMicrosoft Excel)のデータ・セットからのデータを簡単に結合できます。
データ・モデル・エディタは、左側がコンポーネント・ペインになり、右側が作業ペインになるように設計されています。左ペインでコンポーネントを選択すると、そのコンポーネントに該当するフィールドが作業領域に現れます。
データ・モデル・エディタがサポートする機能は、次のとおりです。
データのグループ化 - レポートの列を編成するためにグループを作成します。グループを使用すると、1つの問合せのデータをいくつかのセットに分けることと、問合せのデータをフィルタすることの2つが可能となります。
問合せを作成すると、データ・エンジンはその問合せで選択される列を含むグループを作成します。ユーザーは、グループを作成して、データ・モデル内に現れるデータの階層を変更できます。グループは、主に、一部の列をそれ以外の列とは別に扱う必要があるときに使用します。たとえば、小計を生成する場合やブレークを作成する場合に、グループを作成します。
データのリンク - 複数のレベルでデータをグループ化するために、データ・セット間のマスター/ディテール・リンクを定義します。
データの集約 - グループ・レベルの合計と小計を生成します。
データの変換 - ビジネス用語やレポート要件に適合するように、ソース・データを変換します。
計算の作成 - 基のデータソースではレポートに必要なデータ値が得られない場合に、そのデータ値を計算します。
データ・モデル・エディタには、要素レベル、グループ・レベルおよびグローバル・レベルの関数が用意されています。すべてのデータ・セットのタイプですべての関数をサポートするわけではないことに注意してください。制限事項については、使用するデータ・セットのタイプに付記されている「重要なノート」の項を参照してください。次の図に、データ・モデル・エディタで使用できる機能とアクションの一部を示します。
デフォルトでは、ユーザーが作成したデータ・セットは個別のオブジェクトとして「ダイアグラム」ビューに示されます。
データ・セットの構造ビルダーには、次の3つのビューがあります。
「ダイアグラム」ビュー - 「ダイアグラム」ビューにはデータ・セットが表示され、リンクやフィルタの作成、式に基づいた要素の追加、集計関数やグローバル・レベル関数の追加、要素プロパティの編集および要素の削除をグラフィカルに実行できます。通常、「ダイアグラム」ビューは、データ構造を構築するために使用するビューです。
「構造」ビュー - 「構造」ビューには、次の2つのモードがあります。
「表ビュー」および「出力」
表ビューでは、表内に要素のプロパティが表示されます。また、XML要素の別名、要素の表示名、ソート順およびNULL値の更新、ならびにオプションのリセットを行うことができます。次のイメージに、「構造」の「表ビュー」を示します。
「出力」ビューには、生成されたXML構造がわかりやすく示されます。「出力」ビューは更新できません。図に、「出力」ビューを示します。
「コード」ビュー - 「コード」ビューには、データ構造ビルダーで作成したデータ構造のコードが表示されます。このコードは、データ・エンジンに読み込まれます。コード・ビューのコンテンツは更新できます。図に、「コード」ビューを示します。
BI Publisherデータ・エンジンを使用すると、データソースからデータを抽出した後で、そのデータを結合したり構造化できます。
ソース側では、データを1つの結合されたデータ・セットに結合したり構造化できない場合があります。たとえば、データが異種のデータソース(Microsoft SQL ServerやOracle Databaseなど)に存在するときには、ソースではデータを結合できません。データの取得元が同一のソースだとしても、行数やページ数が数十万におよぶ可能性のある巨大なレポートやドキュメントを作成している場合には、目的のレイアウトと一致するようにデータを構造化することでドキュメント生成が最適化されます。
2つのデータ・セット間にマスター/ディテール(または、親子)関係を定義するためにリンクを作成します。リンクは、要素レベルのリンクまたはグループ・レベルのリンクとして作成できます。結果としての、階層XMLデータは同じになります。要素レベルのリンクとしてリンクを作成することをお薦めします。グループ・レベルのリンクは、以前のバージョンのOracle BI Publisherによるデータ・テンプレートとの下位互換性を維持するために用意されています。
データ・リンク(または親子関係)は、複数の問合せの結果を関連付けます。データ・リンクによって、次のようなリレーションシップを確立できます。
ある問合せの列と別の問合せの列の間
ある問合せのグループと別の問合せのグループの間(子問合せで親のデータを知る必要がある場合に役立ちます)。
要素レベルのリンクによって、2つのデータ・セット間にバインド(結合)を作成し、それらのデータ・セット間のマスター/ディテール(親子)関係を定義します。
要素レベルのリンクを作成します。データ・セット間にマスター/ディテール関係を定義するには、この方法をお薦めします。要素レベルのリンクを使用してデータ・セットをリンクさせる場合、バインド変数によって2つのデータ・セット間を結合するコードは必要ありません。
データ・セットをリンクして、2つのデータ・セット間のマスター/ディテール(または親子)関係を定義します。
要素レベルのリンクを定義することで、マスターとディテールのデータ・セットに含まれる要素間のバインディングを確立できます。
グループ・レベルのリンクでは、2つのデータ・セット間のマスター/ディテール関係を定義します。
次の図は、グループ・レベルのリンクが定義されている2つのデータ・セットを示しています。データ・セットの横に結果のXMLデータ構造が表示されます。
2つのデータ・セットをリンクして親子構造を作成することに加え、同じデータ・セット内の要素を、その他の要素を基準にしてグループ化することもできます。
サブグループの作成は、問合せが返すデータに、ディテール行ごとに繰り返されるヘッダー・データが含まれている場合に役立ちます。サブグループを作成すると、ドキュメント生成の効率が高まるようにXMLデータの形式を整えることができます。
データ・セット内にグループを作成すると、要素のアクション・メニューに2つの新しいオプションが表示され、これを使用すると、親グループと子グループ間で要素を移動できます。
移動する要素については、その要素のアクション・アイコンをクリックしてメニューを開きます。その要素が親グループ内にあり、それを子グループに移動するときには、「選択した要素を子グループに移動」を選択します。
その要素が子グループ内にあり、それを親グループに移動するときには、「選択した要素を親グループに移動」を選択します。次の図では、OFFICE_DSC要素のアクション・メニューに、その要素を親グループに移動するためのオプションが表示されています。
要素を移動する前に、他の要素との依存関係について注意してください。
データ・モデル・エディタを使用すると、グループ・レベルまたはレポート・レベルでデータを集計できます。
たとえば、顧客名を基準に販売高データをグループ化すると、その販売高を集計することで各顧客の販売高の小計を求めることができます。親レベルでのみ子要素のデータを集計できます。
集計関数は、次のとおりです。
平均 - 出現するすべての要素の平均を計算します。
件数 - 要素の出現数を総計します。
最初 - グループ内で最初に出現する要素の値を表示します。
最後 - グループ内で最後に出現する要素の値を表示します。
最大 - グループ内で出現するすべての要素から最高値を表示します。
最小 - グループ内で出現するすべての要素から最低値を表示します。
サマリー - グループ内で出現するすべての要素の値を合計します。
フィルタを使用すると、問合せで選択されたレコードを条件に応じて削除することができます。
グループに設定できるフィルタには、次の2種類があります。
式 - 事前定義済の関数と演算子を使用して式を作成します。
PL/SQLファンクション - カスタム・フィルタを作成します。
「メニュー」をクリックし、「グループ・フィルタの作成」を選択します。
次に示されているように、「グループ・フィルタの編集」ダイアログが表示されます。
「グループ・フィルタ・タイプ」で、「式」またはPL/SQLを選択します。
ノート:
PL/SQLフィルタの場合は、最初にデータ・モデルのプロパティで「Oracle DBデフォルト・パッケージ」としてPL/SQLパッケージを指定する必要があります。データ・モデルのプロパティの設定を参照してください。
次のように、フィルタを入力します。
式を入力するには、要素を選択して、その要素を「グループ・フィルタ」定義ボックスに移動するために送りボタンをクリックします。事前定義済の関数と演算子をクリックして、それらを「グループ・フィルタ」ボックスに挿入します。
使用可能な関数の説明は、「関数リファレンス」を参照してください。
「式の検証」をクリックして、エントリが有効であることを確認します。
PL/SQL関数を入力するには、「使用可能」ボックスからPL/SQLパッケージを選択して、その関数を「グループ・フィルタ」ボックスに移動するために送りボタンをクリックします。
デフォルト・パッケージ内のPL/SQL関数は、ブール型を返すものにする必要があります。
次に示されているように、グループ・フィルタを追加すると、データ・セット・オブジェクトにはフィルタ・インジケータが表示されます。
様々な関数を要素レベルで実行できます。
サブグループの作成で説明されているような、要素を基準にしたサブグループの作成
要素レベルのリンクの作成で説明されているような、データ・セット間での要素レベルのリンクの作成
要素のプロパティの設定で説明されているような、要素のプロパティの設定
個別の要素に対してプロパティを設定できます。
これらのプロパティは、「構造」ビューからも編集できます。複数の要素のプロパティを更新する必要がある場合は、「構造」ビューを使用したほうが効率的になります。構造ビューを使用したデータ構造の編集を参照してください。
要素ダイアログを使用して要素レベルのプロパティを設定するには:
ソートは、親グループのブレーク列に対してのみサポートされます。
たとえば、従業員のデータ・セットが部門と管理職でグループ化されている場合は、部門によってXMLデータをソートできます。それぞれの部門内では、管理職によってデータをグループ化およびソートできます。最終的なレポートで、どのようにデータをソートしておく必要があるかがわかっている場合は、データ生成時にソートを指定するとドキュメント生成が最適化されます。
グループにソート順序を適用するには:
「メニュー」ボタンはグループ・レベルで使用でき、様々な機能を実行できるようになります。
グループのリンクの作成および削除。詳細は、グループ・レベルのリンクの作成を参照してください。
グループ・フィルタの作成、編集および削除。詳細は、グループ・フィルタの作成を参照してください。
式に基づいたグループへの要素の追加。詳細は、グループ・レベルまたはグローバル・レベルの要素の式による追加を参照してください。
データ・セットの編集。詳細は、データ・セットの編集を参照してください。
グループからの要素の削除。詳細は、グループからの要素の削除を参照してください。
グループのプロパティの編集。詳細は、グループのプロパティの編集を参照してください。
グループ・レベルの「メニュー」ボタンを次に示します。
データ・セット・エディタを起動して、選択したデータ・セットのプロパティを変更します。
詳細は、データ・セットの作成からデータ・セットのタイプに該当する項を参照してください。
必要に応じてグループから要素を削除できます。
グループから要素を削除するには:
ノート:
削除できる要素は、グループ関数(SumやCountなど)として追加した要素か、式として追加した要素のみです。
「グローバル・レベル関数」オブジェクトを使用すると、最上位のレポート・レベルでレポート・データ・セットに要素を追加できます。
最上位レベル・データとして、次のタイプの要素を追加できます。
集計関数に基づく要素
式に基づく要素
PL/SQL文に基づく要素(Oracle Databaseデータソースの場合)
ノート:
小数を返す計算要素と式にはデータ型に「整数」を選択すると、データが切り捨てられなくなります。
「グローバル・レベル関数」オブジェクトを次に示します。集計関数に基づく要素を追加するには、オブジェクトの「ここに集計関数をドロップ」領域に要素をドラッグします。式またはPL/SQLに基づく要素を追加するには、「メニュー」をクリックし、該当するアクションを選択します。
選択した要素に基づいてグローバル・レベルの集計関数を追加できます。
使用可能な関数は次のとおりです。
Count
Average
First
Last
Maximum
Minimum
Summary
「構造」ビューを使用すると、データ・モデルの構造を表示確認できます。
「データソース」列には、日付要素が階層ツリー形式で表示されます。この階層ツリーは、閉じたり開いたりできます。このビューを使用して、データ・モデル構造の正確さを検証し、次の編集を実行します:
「構造」ビューを次に示します。
「構造」ページを使用して、データ・モデル内の要素に対して、ユーザーにとってわかりやすい名前を定義します。
XML要素タグの名前(「XML表示」)と、レポート・レイアウト・ツールに表示される名前(「ビジネス・ビュー」)のどちらも変更できます。次の図に、Data Source要素の名前を、使用しやすい「ビジネス・ビュー」の名前に変更する方法を示します。
次の表では、「式による要素の追加」ダイアログと「グループ・フィルタの編集」ダイアログでサポートされている使用可能な関数について説明しています。
関数 | 説明 | 構文 | 例 |
---|---|---|---|
IF |
論理IF演算子 boolean_exprを評価して、boolean_exprがtrueの場合はtrue_returnを返し、boolean_exprがfalseの場合はfalse_returnを返します。 |
IF (boolean_expr, true_return, false_return) |
IF (G_1.DEPARTMENT_ID == 10, 'PASSED', 'FAIL')は、DEPARTMENT_ID = 10の場合に'PASSED'を返し、それ以外の場合は'FAIL'を返します。 |
NOT |
論理NOT演算子 boolean_exprを評価して、boolean_exprがfalseの場合にtrueを返します。 |
STRING(NOT(boolean_expr)) |
STRING(NOT(G_1.JOB_ID == 'MANAGER'))は、JOB_ID = MANAGERの場合に'TRUE'を返し、それ以外の場合は'FALSE'を返します。 |
AND |
論理AND演算子 boolean_expr1とboolean_expr2を評価して、両方のブール式がtrueの場合にtrueを返し、それ以外の場合はfalseを返します。 |
STRING(AND(boolean_expr1, boolean_expr2, ...)) |
STRING(AND (G_1.JOB_ID == 'MANAGER', G_1.DEPARTMENT_ID == 10))は、JOB_ID = MANAGERとDEPARTMENT_ID = 10の両方がtrueの場合に'TRUE'を返し、それ以外の場合は'FALSE'を返します。 |
&& |
論理AND演算子 boolean_expr1とboolean_expr2を評価して、両方のブール式がtrueの場合にtrueを返し、それ以外の場合はfalseを返します。 |
STRING(boolean_expr1 && boolean_expr2) |
STRING(G_1.JOB_ID == 'MANAGER' && G_1.DEPARTMENT_ID == 10) JOB_ID = MANAGERとDEPARTMENT_ID = 10の両方がtrueの場合に'TRUE'が返され、それ以外の場合は'FALSE'が返されます。 |
|| |
論理OR演算子 boolean_expr1とboolean_expr2を評価して、両方のブール式がtrueの場合にtrueを返し、それ以外の場合はfalseを返します。 |
STRING(OR(boolean_expr1, boolean_expr2) |
STRING(OR (G_1.JOB_ID == 'MANAGER', G_1.DEPARTMENT_ID == 10)) JOB_ID = MANAGERまたはDEPARTMENT_ID = 10がtrueの場合に'TRUE'が返され、それ以外の場合は'FALSE'が返されます。 |
MAX |
セット内の要素の最大値を戻します。 |
MAX(expr1, expr2, expr3, ...) |
MAX(G1_Salary, 10000) salaryと10000のうち、大きい方が返されます。 |
MIN |
セット内の要素の最小値を戻します。 |
MIN(expr1, expr2, expr3, ...) |
MIN(G1_Salary,5000) salaryと5000のうち、小さい方が返されます。 |
ROUND |
数値を、指定の小数点以下桁数で丸めた結果を返します。 |
ROUND(number[,integer]) integerが省略された場合は、numberの小数点以下が丸められます。 integerが負の場合は、整数部の桁が丸められます。 integerは整数でなければなりません。 |
ROUND(2.777) 3が返されます ROUND(2.777, 2) 2.78が返されます |
FLOOR |
n以下の最小整数を返します。 |
FLOOR(n) |
FLOOR(2.777) 2が返されます |
CEILING |
n以上の最大整数を返します。 |
CEILING(n) |
CEILING(2.777) 3が返されます |
ABS |
nの絶対値を返します。 |
ABS(n) |
ABS(-3) 3が返されます |
AVG |
式の平均値を返します。 |
AVG(expr1, expr2, expr3, ...) |
AVG(G_1.SALARY,G_1.COMMISSION_PCT*G_1.SALARY) SALARYとCOMMISSIONの平均が返されます。 たとえば、SALARY = 14000でCOMMISSION_PCT = .4の場合は、式を評価した結果は9800.0となります。 |
LENGTH |
配列の長さを返します。 LENGTH関数は、入力文字セットの文字数によって長さを計算します。 charがNULLの場合、この関数はNULLを返します。 charが配列の場合、この関数は配列の長さを返します。 |
LENGTH(expr) |
配列の長さを返す例であるLENGTH{1, 2, 4, 4})は4を返します。 文字列の長さを返す例: LENGTH('countries')は9を返します。 |
SUM |
式の値の合計を返します。 |
SUM(expr1, expr2, ...) |
SUM (G_1.SALARY, G_1.COMMISSION_PCT*G_1.SALARY) salaryとcommissionの合計が返されます。 たとえば、SALARY = 14000でCOMMISSION_PCT =.4の場合は、式を評価した結果は19,600.0となります。 |
NVL |
問合せの結果の中のnull (空白として返される)を文字列で置き換えます。 |
NVL(expr1, expr2) expr1がNULLの場合、NVLはexpr2を返します。 expr1がNULLでない場合、NVLはexpr1を返します。 |
NVL(G_1.COMMISSION_PCT, .3)は、G_1.COMMISSION_PCTがnullのときに.3を返します。 |
CONCAT |
char1とchar2を連結したものを返します。 |
CONCAT(char1, char2) |
CONCAT(CONCAT(First_Name, ' '), Last_Name) First_Name = JoeでLast_Name = Smithの場合は Joe Smithが返されます |
STRING |
charを文字列データ型として返します。 |
STRING(expr) |
STRING(G1_SALARY) salary = 4400の場合は 4400が文字列として返されます。 |
SUBSTRING |
文字列から部分文字列を取り出します。 |
SUBSTRING(string, start_pos, end_pos) stringは、ソース文字列です。 start_posは取出しを開始する位置です。 end_posは文字列の取出しを終了する位置です(省略可能)。 |
SUBSTRING('this is a test', 5, 7)は「is」(つまり、文字6から7まで)を返し、SUBSTRING('this is a test', 5)は「is a test」を返します。 |
INSTR |
文字列の中の部分文字列の、最初の文字の位置を返します。 |
INSTR(string1, string2) string1は検索対象の文字列です。 string2は、string1内で検索する部分文字列です。 |
INSTR('this is a test', 'is a') 5が返されます |
DATE |
有効なJava日付文字列を、標準書式の日付データ型に変換します。 |
DATE(char, format_string) (1) charは任意の有効なJava日付文字列(例: 13-JAN-2013)で、(2) format_stringは入力文字列のJava日付書式(例: dd-MMM-yyyy)です。入力と書式の文字列は、有効なJava日付書式文字列であることが必要です。 |
DATE(01-Jan-2013,'dd-MMM-yyyy') 2013-01-01T08:00:00.000+00:00が返されます |
FORMAT_DATE |
Java日付書式の日付引数を、書式設定済の文字列に変換します。 |
FORMAT_DATE(date,format_string) |
FORMAT_DATE(SYSDATE,'dd-MMM-yyyy') SYSDATEの値が2013-01-24T16:32:45.000-08:00の場合は、24-Jan-2013が返されます。 |
FORMAT_NUMBER |
数値または数値文字列を、指定された数値書式の文字列に変換します。 |
FORMAT_NUMBER(number,format_string) |
FORMAT_NUMBER(SOME_NUMBER, '$9,999.00') SOME_NUMBER = 12345.678の場合は、$12,345.68が返されます。 |
DECODE |
式の値を、指定された検索および置換の条件に基づいて別の値で置き換えます。 |
DECODE(expr, search, result [, search, result]...[, default]) |
DECODE(PROD_FAMILY_CODE,100,'Colas',200,'Root Beer',300,'Cream Sodas',400,'Fruit Sodas','Other')は、(1) PROD_FAMILY_CODE = 100の場合に'Colas'を返し、(2) PROD_FAMILY_CODE = 200の場合に'Root Beer'を返し、(3) PROD_FAMILY_CODE = 300の場合に'Cream Sodas'を返し、(4) PROD_FAMILY_CODE = 400の場合に'Fruit Sodas'を返し、(5) PROD_FAMILY_CODEの値がそれ以外の場合は'Other'を返します。 |
REPLACE |
文字列内の一連の文字を、別の文字のセットで置き換えます。 |
REPLACE(expr,string1,string2) string1は検索する文字列で、string2は置き換える文字列です。 |
REPLACE(G_1.FIRST_NAME,'B','L') G_1.FIRST_NAME = Barryの場合は Larryが返されます |