| Oracle® Fusion Middleware Oracle Reportsレポート作成のためのユーザーズ・ガイド 11gリリース1 (11.1.1) B61376-03 |
|
![]() 前 |
![]() 次 |
この章では、Oracle Reports付属のXMLプラガブル・データ・ソース(PDS)のデータを含むレポートについて学習します。この章の手順に従うと、図45-1に示すレポート出力を生成できます。
概要
企業の様々なデータ・ソースから、公開の必要な情報を得ることがよくあります。これらのデータ・ソースは、SQLベース(リレーショナル・データベース)の場合もあれば、XMLなどの非SQLベースの場合もあります。意味のある情報を公開するために、1つ以上のデータ・ソースからのデータを結合する必要がある場合も少なくありません。たとえば、傾向とパフォーマンスを比較するために、リレーショナル・データベースのデータを多次元データベースのデータと結合する場合などです。
Oracle Reportsでは、あらゆるデータ・ソースのデータに対し、集計、要約、形式設定、スケジューリングなどの機能を利用できます。PDS(プラガブル・データ・ソース)アーキテクチャを利用すれば、ユーザー固有のデータ・ソースにも、Oracle Reportsで利用可能なデータ・ソース(XML、JDBCおよびテキスト)にも接続できます。
有効なXMLファイルには、DTD (Document Type Definition)またはXMLスキーマが含まれており、ファイルはこれに準拠しています。XMLファイルには、任意のソースを使用できます。ただし、Oracleでは、各種データをXMLデータ・ファイルおよびXMLのDTDまたはスキーマに変換するためのユーティリティおよびメソッドを多数提供しています。
使用するXMLデータ・ファイル(データ・ソース)の要素は、DTDまたはXMLスキーマ・ファイルに指定された要素と同じ順序およびフォーマットに従う必要があります。たとえば、DTDまたはXMLスキーマで2つの要素WAREHOUSE_ID(1番目)、PRODUCT_ID(2番目)が定義されているとします。この場合、XMLデータ・ファイルでもWAREHOUSE_IDがPRODUCT_IDより先にくる必要があります。各要素の名前は、一致している必要はありません。次のXMLデータファイルを例に考えてみます。
<WAREHOUSE>
<INVENTORY>
<WAREHOUSE_ID>3</WAREHOUSE_ID>
<PRODUCT_ID>2340</PRODUCT_ID>
<QUANTITY_ON_HAND>69</QUANTITY_ON_HAND>
<PRODUCT_NAME>Chemicals - SW</PRODUCT_NAME>
</INVENTORY>
<INVENTORY>
<WAREHOUSE_ID>3</WAREHOUSE_ID>
<PRODUCT_ID>2365</PRODUCT_ID>
<QUANTITY_ON_HAND>73</QUANTITY_ON_HAND>
<PRODUCT_NAME>Chemicals - TCS</PRODUCT_NAME>
</INVENTORY>
</WAREHOUSE>
このXMLに対する、接尾辞xsdの付いた有効なXMLスキーマは次のようになります。
</xsd:schema>
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
<xsd:element name="WAREHOUSE" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="INVENTORY" minOccurs="0" maxOccurs="unbounded"
<xsd:complexType>
<xsd:sequence>
<xsd:element name="WAREHOUSE_ID" type="xsd:integer"/>
<xsd:element name="PRODUCT_ID" type="xsd:integer"/>
<xsd:element name="QUANTITY_ON_HAND" type="xsd:integer"/>
<xsd:element name="PRODUCT_NAME" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
XML PDSの実装は、2次元のレコード・リストのみをサポートします。Oracle Reportsでは、XMLデータ・ファイルは、行および列で構成された簡単な表と見なされます。Oracle Reportsは、XMLの最上位要素の1つ下のレベルでXMLシーケンスを繰り返します。さらに低いレベルのシーケンス(ネストされた要素)がある場合、それらは処理されません。したがって、表形式のレポートを生成するには、次の例で示すように、XMLファイルを単純な行列形式に変換する必要があります。
例45-1は、G_EMPNO要素がネストしているG_DEPTNO要素を含むXMLデータ・ファイルを示しています。Oracle Reportsはすべての部門を解析しますが、各部門内の従業員もすべて解析されるわけではありません。各部門につき1人の従業員のレコードのみが表示されます。
例45-2は、このXMLデータ・ファイルを平面的なデータに変更する方法を示しています。この例では、G_EMPNOデータを含むG_DEPTNO要素にネストが存在しないことが分かります。これで、Oracle Reportsで、すべての部門が各部門内のすべての従業員も含めて解析されるようになりました。
例45-3および例45-4は、ネストしているXMLデータと平面化されたXMLデータにそれぞれ対応するXMLスキーマ・ファイルを示しています。
例45-1 ネストしているXMLデータ・ファイル
<?xml version="1.0" encoding="WINDOWS-1252"?>
<EMP>
<G_DEPTNO>
<DEPTNO>10</DEPTNO>
<G_EMPNO>
<EMPNO>7782</EMPNO>
<ENAME>CLARK</ENAME>
<JOB>MANAGER</JOB>
<MGR>7839</MGR>
<HIREDATE>09-JUN-81</HIREDATE>
<SAL>2450</SAL>
<COMM></COMM>
</G_EMPNO>
<G_EMPNO>
<EMPNO>7839</EMPNO>
<ENAME>MIKEb</ENAME>
<JOB>BOSS</JOB>
<MGR></MGR>
<HIREDATE></HIREDATE>
<SAL></SAL>
<COMM></COMM>
</G_EMPNO>
</G_DEPTNO>
<G_DEPTNO>
<DEPTNO>20</DEPTNO>
<G_EMPNO>
<EMPNO>7369</EMPNO>
<ENAME>SMITH</ENAME>
<JOB>CLERK</JOB>
<MGR>7902</MGR>
<HIREDATE>17-DEC-80</HIREDATE>
<SAL>800</SAL>
<COMM></COMM>
</G_EMPNO>
<G_EMPNO>
<EMPNO>7876</EMPNO>
<ENAME>ADAMS</ENAME>
<JOB>CLERK</JOB>
<MGR>7788</MGR>
<HIREDATE>12-JAN-83</HIREDATE>
<SAL>1100</SAL>
<COMM></COMM>
</G_EMPNO>
</G_DEPTNO>
</EMP>
例45-2 平面化されたXMLデータ・ファイル
<?xml version="1.0" encoding="WINDOWS-1252"?>
<EMP>
<G_DEPTNO>
<DEPTNO>10</DEPTNO>
<EMPNO>7782</EMPNO>
<ENAME>CLARK</ENAME>
<JOB>MANAGER</JOB>
<MGR>7839</MGR>
<HIREDATE>09-JUN-81</HIREDATE>
<SAL>2450</SAL>
<COMM></COMM>
</G_DEPTNO>
<G_DEPTNO>
<DEPTNO>10</DEPTNO>
<EMPNO>7839</EMPNO>
<ENAME>MIKEb</ENAME>
<JOB>BOSS</JOB>
<MGR></MGR>
<HIREDATE></HIREDATE>
<SAL></SAL>
<COMM></COMM>
</G_DEPTNO>
<G_DEPTNO>
<DEPTNO>20</DEPTNO>
<EMPNO>7369</EMPNO>
<ENAME>SMITH</ENAME>
<JOB>CLERK</JOB>
<MGR>7902</MGR>
<HIREDATE>17-DEC-80</HIREDATE>
<SAL>800</SAL>
<COMM></COMM>
</G_DEPTNO>
<G_DEPTNO>
<DEPTNO>20</DEPTNO>
<EMPNO>7876</EMPNO>
<ENAME>ADAMS</ENAME>
<JOB>CLERK</JOB>
<MGR>7788</MGR>
<HIREDATE>12-JAN-83</HIREDATE>
<SAL>1100</SAL>
<COMM></COMM>
</G_DEPTNO>
</EMP>
例45-3 対応するネストしているXMLスキーマ・ファイル
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
<xsd:element name="EMP">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="G_DEPTNO" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="DEPTNO" type="xsd:string"/>
<xsd:element name="G_EMPNO" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="EMPNO" type="xsd:string"/>
<xsd:element name="ENAME" type="xsd:string"/>
<xsd:element name="JOB" type="xsd:string"/>
<xsd:element name="MGR" type="xsd:string"/>
<xsd:element name="HIREDATE" type="xsd:string"/>
<xsd:element name="SAL" type="xsd:string"/>
<xsd:element name="COMM" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
例45-4 対応する平面化されたXMLスキーマ・ファイル
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
<xsd:element name="EMP">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="G_DEPTNO" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="DEPTNO" type="xsd:string"/>
<xsd:element name="EMPNO" type="xsd:string"/>
<xsd:element name="ENAME" type="xsd:string"/>
<xsd:element name="JOB" type="xsd:string"/>
<xsd:element name="MGR" type="xsd:string"/>
<xsd:element name="HIREDATE" type="xsd:string"/>
<xsd:element name="SAL" type="xsd:string"/>
<xsd:element name="COMM" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
プラガブル・データ・ソースの詳細は、Oracle Reportsオンライン・ヘルプを参照してください。データ・ソースで既存のPDSを使用できない場合は、PDS APIにより独自のPDSを記述して、Oracle Reportsに取り込むことが可能となり、一意の専用データ・ソースにアクセスできます。APIについては、Oracle Reports Java APIリファレンスに記載されています。
使用例
米国と海外に倉庫を置いて、国際的な取引を行っているとします。これらの倉庫では、各現場でローカルに業務データを保存する、分散型管理システムを運用しています。倉庫の在庫は、現地の責任者が管理しています。ところが、計画を行うために、本社のチームがすべての倉庫の最新データを含む在庫データ(SQL形式)にアクセスする必要が生じました。倉庫のデータは、XMLストリームとしてのみ入手できます。この例では、ローカル・データベースのデータ(つまり倉庫データ)とXML入力からのデータを結合して、Webレポートを作成する方法を習得します。この例では、静的XMLファイルを使用します。
このサンプル・レポートの作成過程では、次を行います。
データ・ウィザードでの、XMLデータ・ソースへのアクセスに使用するXML問合せの作成。
SQL問合せとXML問合せの、2つの問合せ間のデータ・リンクの作成。
フォーマット・トリガーおよびプロシージャを使用した、レポートの行カラーの交互適用。
グループ・フィルタを使用したXMLデータのフィルタリングによる、XMLデータのソート。
XML PDSを使用するレポートのサンプルを表示するには、サンプル・フォルダxml_pdsを開き、inventory_report.rdfを開きます。このファイルの開き方の詳細は、「はじめに」の「サンプル・レポートへのアクセス」を参照してください。この章で使用されているサンプル・ファイルのリストと説明を表45-1に示します。