2 OLAP Java APIメタデータの理解
この章では、OLAPディメンション・メタデータ・オブジェクトおよびリレーショナル・メタデータ・オブジェクトを表すOracle OLAP Java APIのクラスについて説明します。 また、メタデータ・オブジェクトおよびデータ・ソースへのアクセスを提供するクラス、またはメタデータ・オブジェクトに関する情報を含むクラスについても説明します。 この章では、次の項目について説明します。
既存のメタデータ・オブジェクトの取得の詳細は、「メタデータの検出」を参照してください。 メタデータ・オブジェクトの作成の詳細は、「メタデータおよびアナリティク・ワークスペースの作成」を参照してください。
2.1 OLAP Java APIメタデータ・クラスの概要
「OLAP Java APIの概要」は、OLAPディメンション・データ・モデルを示し、そのモデルを実装するOLAP Java APIクラスの一部について簡単に説明します。 これらのクラスは、oracle.olapi.metadata
パッケージにあります。 これらのクラスを使用して、次のタスクを実行できます。
-
使用可能なメタデータ・オブジェクトへのアクセスの取得
-
新規メタデータ・オブジェクトの作成
-
メタデータ・オブジェクトをアナリティク・ワークスペースまたはリレーショナル・オブジェクトとしてデプロイ
-
データ・ソースへのメタデータ・オブジェクトのマッピング
-
メタデータ・オブジェクトをXMLにエクスポートするか、XMLからインポート
-
データを問い合せる
Source
オブジェクトを作成
「図2-1」は、oracle.olapi.metadata
パッケージを示します。
図2-1 oracle.olapi.metadataパッケージ

「図2-1 oracle.olapi.metadataパッケージ」の説明
-
oracle.olapi.metadata
。メタデータ・オブジェクトおよびメタデータ・プロバイダの最も基本的な特性を指定するインタフェースおよび抽象クラスがあります。 -
oracle.olapi.metadata.mdm
。MDM (多次元モデル)メタデータ・モデルを実装するクラスがあります。 このパッケージには、メタデータ・オブジェクトを表すクラス、それらのオブジェクトへのアクセスを提供するクラス、およびオブジェクトに関する説明情報を含むクラスがあります。 -
oracle.olapi.metadata.deployment
。メタデータ・オブジェクトの編成をアナリティク・ワークスペース・オブジェクトまたはリレーショナル・オブジェクトとして指定するクラスがあります。 -
oracle.olapi.metadata.mapping
。メタデータ・オブジェクトをリレーショナル・データ・ソースにマップするクラスがあります。
oracle.olapi.metadata.mdm
パッケージの一部のクラスは、OLAPディメンション・メタデータ・オブジェクトに直接対応しています。 「表2-1」は、これらの対応の一部を示します。
表2-1 対応するディメンションおよびメーター・データ管理オブジェクト
ディメンション・メタデータ・オブジェクト | MDMメタデータ・オブジェクト |
---|---|
キューブ |
|
メジャー |
|
計算済メジャー |
|
メジャー・フォルダ |
|
ディメンション |
|
階層 |
|
レベル |
|
属性 |
|
パッケージ内の他のクラスは、リレーショナル・オブジェクトに対応しています。 「表2-2」は、これらの対応を示します。
表2-2 対応するリレーショナル・オブジェクトおよびMDMオブジェクト
リレーショナル・オブジェクト | MDMメタデータ・オブジェクト |
---|---|
スキーマ |
|
表 |
|
表の列 |
|
親トピック: OLAP Java APIメタデータの理解
2.2 メタデータ・オブジェクトの識別、説明および分類
ほとんどのOLAP Java APIメタデータ・オブジェクトには、一意の識別子(ID)、名前、所有者またはそれを含むオブジェクトがあります。 摘要および分類をほとんどのメタデータ・オブジェクトに関連付けることもできます。
ほとんどのメタデータ・クラスは、抽象oracle.olapi.metadata.BaseMetadataObject
クラスを拡張します。 BaseMetadataObject
には、名前とIDを指定できます。 ほとんどのメタデータ・オブジェクトは名前で取得できます。 このIDはOracle OLAPによって内部的に使用されますが、アプリケーションではIDを使用して一部のメタデータ・オブジェクトを取得することもできます。
BaseMetadataObject
には、getOwner
メソッドによって返される所有者もあります。 ほとんどのメタデータ・オブジェクトの場合、所有者はMdmDatabaseSchema
です。 MdmRootSchema
およびMdmMeasureDimension
オブジェクトの場合、所有者はルート・スキーマです。 BaseMetadataObject
のサブクラスではないMdmViewColumn
の場合、getOwner
メソッドは、MdmPrimaryDimension
、MdmBaseAttribute
、MdmMeasure
などのMdmViewColumnOwner
インタフェースの所有実装を返します。 MdmViewColumn
は、OLAPビューの列を表します。 OLAPビューの詳細は、「OLAPビューの使用」を参照してください。
一部のBaseMetadataObject
オブジェクトは、それらを作成したメタデータ・オブジェクトによって格納されます。 たとえば、MdmBaseMeasure
は、それを作成したMdmCube
によって含まれます。 メタデータ・オブジェクトのコンテナを取得するには、getContainedByObject
メソッドをコールします。
MdmObject
クラス(BaseMetadataObject
の抽象サブクラス)は、記述オブジェクトおよび分類との関連付けを追加します。 通常、記述オブジェクトには、メタデータ・オブジェクト自体に関連付ける名前または説明テキストが含まれます。 アプリケーションは、多くの場合、ユーザー・インタフェースでの表示目的で記述オブジェクトを使用します。 分類は、アプリケーションがメタデータ・オブジェクトに割り当てる文字列値です。 アプリケーションは、必要な目的のために分類を処理します。
- 「オブジェクトの識別」
- 「説明の使用」
MdmDescription
オブジェクトを使用すると、MdmObject
オブジェクトに説明情報を関連付けることができます。 - 「分類の使用」
親トピック: OLAP Java APIメタデータの理解
2.2.1 オブジェクトの識別
BaseMetadataObject
オブジェクトは、名前およびIDで識別できます。 名前空間は、レガシー・メタデータ・オブジェクトのタイプと形式を識別します。
2.2.1.1 名前の取得および設定
ほとんどのメタデータ・オブジェクトには、オブジェクトのgetName
メソッドをコールして取得できる名前があります。 オブジェクトによっては、オブジェクトの作成時に名前を割り当てることができます。 たとえば、oracle.olapi.metadata.deployment.AW
オブジェクトはアナリティク・ワークスペースを表します。 MdmDatabaseSchema
のfindOrCreateAW
メソッドをコールしてAW
を作成する場合、メソッドのpublicName
パラメータを使用して、メソッドが返すAW
オブジェクトの名前を指定します。
一部のオブジェクトでは、setName
メソッドを使用して既存のオブジェクトの名前を変更できます。 たとえば、ディメンション・オブジェクトのsetName
メソッドをコールして、MdmStandardDimension
の名前を変更できます。 新しい名前は、セッションのルートTransaction
をコミットするまで有効になりません。 setName
をコールした後、ルートTransaction
をコミットする前に、getNewName
メソッドは新しい名前を返し、getName
メソッドは既存の名前を返します。 名前によるオブジェクトの取得の詳細は、「トランザクションでのメタデータ・オブジェクトまたは問合せの作成について」を参照してください
一部のオブジェクトは、MdmDatabaseSchema
から名前で取得できます。 名前によるオブジェクトの取得の詳細は、「スキーマの表現」を参照してください。
ユーザー・インタフェースでの名前または説明の表示、または任意の目的で使用するために、MdmDescription
クラスを使用して、任意の数の名前および説明をMdmObject
に関連付けることができます。 そのクラスの使用方法の詳細は、「説明の使用」を参照してください。
親トピック: オブジェクトの識別
2.2.1.2 一意の識別子の説明
ほとんどのメタデータ・オブジェクトには、一意の識別子(ID)があります。 識別子には、次のいずれかの形式があります。
-
objectName
-
ownerName.objectName
-
ownerName.containerName.objectName
たとえば、ユーザーGLOBAL
のスキーマを表すMdmDatabaseSchema
の場合、getID
メソッドによって返される識別子はGLOBAL
です。 PRODUCT_AWJという名前のMdmPrimaryDimension
の場合、getID
メソッドはGLOBAL.PRODUCT_AWJ
を返し、PRODUCT_PRIMARYという名前のディメンションのMdmLevelHierarchy
の場合、メソッドはGLOBAL.PRODUCT_AWJ.PRODUCT_PRIMARY
を返します。
メタデータ・オブジェクトのIDは永続的です。 ただし、メタデータ・オブジェクトの名前または所有者が変更されると、IDも変更されます。 IDによるオブジェクトの取得の詳細は、「IDによるメタデータ・オブジェクトの取得」を参照してください。
従来の10gメタデータ・オブジェクトの場合、識別子の最初の部分はネームスペースです。 ネームスペースの後にネームスペース・デリミタ(2つのピリオド)が続きます。 10gディメンションの識別子の例は、AWXML_DIMENSION..GLOBAL.PRODUCT_AW
です。
親トピック: オブジェクトの識別
2.2.1.3 レガシー・メタデータ・オブジェクトのサポート
Oracle Database、リリース11g、Oracle Database、リリース11gでは、Oracle OLAPはレガシー10g OLAP Java APIアプリケーションをサポートしています。 ネームスペースは、10gメタデータ・オブジェクトを識別し、11gオブジェクトと同じセッションに存在できるようにします。
2.2.1.3.1 レガシー・アプリケーションのサポート
10gで作成されたOLAPメタデータ・オブジェクトを使用するレガシー・アプリケーションをサポートするために、oracle.olapi.data.source.DataProvider
クラスにはメタデータ・リーダー・モードがあります。 デフォルトでは、メタデータ・リーダーはOracle OLAPの10gおよび11gメタデータ・オブジェクトを認識します。 メタデータ・リーダー・モードは、java.util.Properties
オブジェクトのプロパティを使用して、または適切なXML形式の文字列を使用して指定できます。 モードおよびモードの指定方法の詳細は、「Oracle OLAP Java APIリファレンス」ドキュメントのDataProvider
クラスのコンストラクタ・メソッドを参照してください。
親トピック: レガシー・メタデータ・オブジェクトのサポート
2.2.1.3.2 ネームスペースの説明
Oracle Databaseのリリース10gでは、Oracle OLAPキューブ、ディメンションまたはメジャー・フォルダの名前がリレーショナル表またはビューと同じである可能性があります。 リリース11gでは、最上位レベルのOLAPメタデータ・オブジェクトはOracle Databaseデータ・ディクショナリに格納されるため、別のリレーショナル・オブジェクトと同じ名前を持つことはできません。 名前空間指定により、レガシーOLAP Java API 10gメタデータ・オブジェクトは、11gメタデータ・オブジェクトと同じセッションに存在できます。 このようなレガシー・メタデータ・オブジェクトは、Oracle OLAP Analytic Workspace Java APIのoracle.olapi.AWXML
パッケージのクラスを使用するか、CWM PL/SQLパッケージを使用して作成されました。 10gおよび11gオブジェクトを同じセッション内に存在させるには、DataProvider
のメタデータ・リーダー・モードをALL
に設定する必要があります。 ALL
モードは、デフォルトのメタデータ・リーダー・モードです。 メタデータ・リーダー・モード設定の詳細は、「Oracle OLAP Java APIリファレンス」のDataProvider
クラスのドキュメントを参照してください。
10gキューブ、ディメンションおよびメジャー・フォルダのメタデータ・オブジェクトは、11gでMdmCube
、MdmPrimaryDimension
およびMdmSchema
クラスによって表されます。 いずれかのクラスのインスタンスには、getNamespace
メソッドによって返されるネームスペースを関連付けることができます。 11gオブジェクトの場合、ネームスペースはnullです。
10gオブジェクトの11g XML定義には、Namespace
属性があります。 メタデータ・オブジェクトのXML定義のエクスポートおよびインポートの詳細は、「XMLテンプレートとしてのメタデータのエクスポートおよびインポート」を参照してください。
レガシー・メタデータ・オブジェクトのネームスペースは、メタデータ形式とオブジェクトのタイプを識別します。 AWXML_
またはCWM_
のいずれかで始まり、CUBE
やDIMENSION
などのオブジェクトのタイプを持ちます。 たとえば、Oracle Database 10gリリース2 (10.2)でOracle OLAP Analytic Workspace Java APIを使用して作成されたディメンションは、11gでネームスペースAWXML_DIMENSION
を持ちます。
有効なネームスペースは、MdmMetadataProvider
クラスの静的定数フィールドによって表されます。 そのクラスのgetValidNamespaces
メソッドは、デフォルト・ネームスペースを含む有効なネームスペースのリストを返します。 新しいネームスペースは作成できません。
定数フィールドを使用して、MdmDatabaseSchema
からレガシー・メタデータ・オブジェクトを取得できます。 たとえば、次のコードはPRODUCT_AWディメンションを取得します。 コードでは、mdmDBSchema
はGLOBALユーザーのMdmDatabaseSchema
です。
MdmStandardDimension mdmProdAWDim = mdmDBSchema.findOrCreateStandardDimension("PRODUCT_AW", MdmMetadataProvider.AWXML_DIMENSION_NAMESPACE);
ALL
メタデータ・リーダー・モードでは、既存の10gメタデータ・オブジェクトを取得しますが、新しいメタデータ・オブジェクトは作成できません。 レガシー・メタデータ・オブジェクトが存在しない場合、メソッドは、指定された名前を持つ11gオブジェクトを返します。
親トピック: レガシー・メタデータ・オブジェクトのサポート
2.2.2 説明の使用
MdmDescription
オブジェクトを使用すると、MdmObject
オブジェクトに説明情報を関連付けることができます。
MdmDescriptionType
オブジェクトは、MdmDescription
の説明のタイプを表します。 MdmDescription
オブジェクトを使用すると、ユーザー・インタフェースでメタデータ・オブジェクトの名前、説明またはその他の情報を表示できます。 MdmDescription
オブジェクトは、アプリケーションによって作成、割当ておよび処理されます。
ノート:
MdmDescription
を介してMdmObject
に関連付けるわかりやすい名前は、MdmObject.getName
メソッドによって返されるオブジェクト名ではありません。 オブジェクト名は、Oracle OLAPによって内部的にオブジェクトを識別するために使用されます。 わかりやすい名前は、アプリケーションによってのみ使用されます。
OLAP Java APIは、いくつかのタイプの説明を定義します。 MdmDescriptionType
クラスには、次の説明タイプを提供する静的メソッドがあります:
-
名前
-
短い名前
-
長い名前
-
複数名
-
短い複数名
-
長い複数名
-
説明
-
短い説明
-
長い説明
MdmDescriptionType
のメソッドをコールして、これらの定義済の説明タイプのいずれかを取得します。 たとえば、次のコードは、詳細名と詳細説明の摘要タイプ・オブジェクトを取得します。
MdmDescriptionType mdmLongNameDescrType = MdmDescriptionType.getLongNameDescriptionType(); MdmDescriptionType mdmLongDescrDescrType = MdmDescriptionType.getLongDescriptionDescriptionType();
MdmDescriptionType
のコンストラクタ・メソッドを使用して、新しいタイプの記述を作成できます。 getDescriptiveType
メソッドを使用して、MdmDescriptionType
オブジェクトの型を取得できます。 次の最初の図は、MdmDescriptionType
のメソッドを示しています。
定義済摘要タイプの中には、関連付けられたデフォルト摘要タイプがあるものがあります。 MdmDescriptionType(java.lang.String type, MdmDescriptionType defaultType)
コンストラクタ・メソッドを使用して、デフォルトの説明タイプを変更するか、新規または既存のMdmDescriptionType
にデフォルトの説明タイプを割り当てます。 getDescriptiveTypeDefault
メソッドを使用すると、MdmDescriptionType
オブジェクトのデフォルト・タイプを取得できます。
例2-1 説明とMdmObjectの関連付け
MdmDescription
オブジェクトをMdmObject
に関連付けるには、MdmObject
のfindOrCreateDescription
またはsetDescription
メソッドを使用します。 findOrCreateDescription
メソッドは、MdmDescription
オブジェクトを返します。 説明の値を指定するには、MdmDescription
のsetValue
メソッドを使用します。
この例では、MdmDescription
をMdmObject
に関連付ける両方の方法を示します。 この例では、mdmProdDim
はMdmStandardDimension
オブジェクトです。
MdmDescription mdmShortNameDescr = mdmProdDim.findOrCreateDescription( MdmDescriptionType.getShortNameDescriptionType(), "AMERICAN"); mdmShortNameDescr.setValue("Product"); mdmProdDim.setDescription( MdmDescriptionType.getLongNameDescriptionType(), "Product Dimension");
この図は、MdmDescription
およびMdmDescriptionType
オブジェクトを使用するMdmObject
のメソッドを示しています。 また、MdmDescription
クラスとMdmDescriptionType
クラスとそのメソッド、およびクラス間の関連付けも表示されます。 MdmObject
には、ゼロから多数のMdmDescription
オブジェクトを指定できます。 MdmDescription
は、1つのMdmObject
と1つのMdmDescriptionType
に関連付けられます。 MdmDescriptionType
は、1つ以上のMdmDescription
オブジェクトに関連付けることができます。
図2-2 MdmObjectおよびMdmDescription関連付け

「図2-2 MdmObjectとMdmDescriptionの関連付け」の説明
11gより前のOLAP Java APIのバージョンには、MdmDescription
クラスおよびMdmDescriptionType
クラスがありませんでした。 これらのバージョンでは、MdmObject
クラスには、説明を取得および設定するための次のメソッドのみがありました。
図2-3 11gの前に説明を取得および設定する方法

「図2-3 11gの前に説明を取得および設定するためのメソッド」の説明
下位互換性のために、OLAP Java APIはこれらのメソッドを引き続きサポートしますが、MdmDescription
およびMdmDescriptionType
オブジェクトを使用して内部的に実装します。
親トピック: メタデータ・オブジェクトの識別、説明および分類
2.2.3 分類の使用
分類は、MdmObject
のプロパティです。 分類をオブジェクトに割り当ててから、必要に応じて分類を使用します。 たとえば、値がHIDDENの分類を追加して、アプリケーションがユーザー・インタフェースにオブジェクトを表示しないように指定できます。 MdmObject
に分類を割り当てるには、オブジェクトのaddObjectClassification
メソッドを使用します。 getObjectClassifications
メソッドを使用して分類を取得し、removeObjectClassification
メソッドを使用して分類を削除できます。
親トピック: メタデータ・オブジェクトの識別、説明および分類
2.3 メタデータ・オブジェクトの指定
Oracle OLAP Java APIメタデータ・オブジェクトへのアクセスは、最初はMdmMetadataProvider
オブジェクトとMdmSchema
オブジェクトによって提供されます。 MdmMetadataProvider
には、メタデータ・オブジェクトのXML表現をインポートまたはエクスポートする機能もあります。 次のトピックでは、MdmMetadataProvider
クラスとその使用方法について説明します。
2.3.1 メタデータ・プロバイダの説明
OLAP Java APIメタデータ・オブジェクトを取得または作成するには、まずMdmMetadataProvider
を作成する必要があります。 MdmMetadataProvider
の作成については、「MdmMetadataProviderの作成」を参照してください。
MdmMetadataProvider
のgetRootSchema
メソッドを使用すると、MdmRootSchema
クラスのインスタンスであるルートMdmSchema
オブジェクトを取得できます。 ルート・スキーマは、MdmDatabaseSchema
オブジェクトのコンテナです。
MdmDatabaseSchema
オブジェクトは、AW
、MdmCube
、MdmPrimaryDimension
オブジェクトなどのトップレベル・メタデータ・オブジェクトの所有者です。 トップレベル・オブジェクトはファースト・クラスのデータ・オブジェクトであり、Oracle Databaseデータ・ディクショナリで表されます。 データ・ディクショナリ内にあるため、これらのOLAPデータ・オブジェクトはSQL問合せで使用できます。 MdmDatabaseSchema
のfindOrCreate
メソッドを使用して、最上位レベルのメタデータ・オブジェクトを作成します。
最上位のオブジェクトは、MdmMeasure
、MdmHierarchy
、MdmAttribute
オブジェクトなどのオブジェクトのコンテナです。 最上位オブジェクトのメソッドを使用して、含まれるオブジェクトを作成します。
MdmSchema
オブジェクトの詳細は、「スキーマの表現」を参照してください。 トップレベルのメタデータ・オブジェクトの詳細は、「データ・ソースへのアクセスの提供」を参照してください。
MdmMetadataProvider
のgetMetadataObject
またはgetMetadataObjects
メソッドをコールし、メタデータ・オブジェクトのIDを指定して、既存のメタデータ・オブジェクトを取得することもできます。
次のトピックでは、メタデータ・オブジェクトの取得について説明します:
2.3.1.1 IDによるメタデータ・オブジェクトの取得
通常は、所有オブジェクトのfindOrCreate
メソッドをコールして、メタデータ・オブジェクトを取得または作成します。 たとえば、MdmCube
を取得または作成するには、MdmDatabaseSchema
オブジェクトのfindOrCreateCube
メソッドをコールします。 ただし、オブジェクトのIDを指定して、MdmMetadataProvider
から既存のメタデータ・オブジェクトを取得することもできます。 MdmMetadataProvider.getMetadataObject
メソッドは、オブジェクトのIDであるString
を取り、オブジェクトを返します。 getMetadataObjects
メソッドは、IDのList
を取り、オブジェクトのList
を返します。
メタデータ・オブジェクトのIDは、あるセッションから格納し、そのIDで別のセッションで取得できます。 もちろん、格納されたIDによるオブジェクトの取得は、そのオブジェクトがまだ存在し、オブジェクトのIDが変更されていないことを前提としています。 一部のメタデータ・オブジェクトでは、名前または所有者を変更できます。 オブジェクトの名前または所有者が変更されると、オブジェクトのIDが変更されます。
親トピック: メタデータ・プロバイダの説明
2.3.1.2 XMLテンプレートとしてのメタデータのエクスポートおよびインポート
MdmMetadataProvider
クラスには、これらのオブジェクトのXML定義との間でメタデータ・オブジェクトをエクスポートおよびインポートするための多数のメソッドがあります。 XML定義は、Oracle OLAPが定義したメタデータ・オブジェクトを作成できるテンプレートです。
XMLテンプレートを使用して、Oracle Databaseインスタンス間でメタデータ・オブジェクトを転送できます。 Analytic Workspace ManagerとOLAP Java APIアプリケーションの間でXMLテンプレートを交換できます。つまり、Analytic Workspace Managerでは、MdmMetadataProvider
エクスポートXMLメソッドで作成したテンプレートをインポートできます。また、importXML
メソッドを使用して、Analytic Workspace Managerで作成されたXMLテンプレートをインポートできます。
XMLをエクスポートする場合、オブジェクトの名前を変更したり、XML属性の値のバインド変数を指定できます。 XMLWriterCallback
インタフェースの実装を指定して、エクスポート・プロセスのいくつかの側面を管理することもできます。 XMLをインポートする場合、インポートされたオブジェクトを所有するMdmDatabaseSchema
、エクスポートされたXMLのバインド変数を置換するバインド値、およびインポート・プロセスの一部を管理するためのXMLParserCallback
インタフェースの実装を指定できます。
次のトピックでは、XMLテンプレートを使用したメタデータ・オブジェクトのエクスポートおよびインポートについて説明します。
2.3.1.2.1 XMLテンプレートのエクスポート
メタデータ・オブジェクトをXMLテンプレートにエクスポートする場合、MdmMetadataProvider
には、exportFullXML
メソッドとexportIncrementalXML
メソッドの多くのシグネチャがあります。 メソッドは、テンプレートをjava.lang.String
またはjava.io.Writer
にエクスポートします。
これらのメソッドによって生成されたXMLテンプレートを使用して、MdmMetadataProvider
のimportXML
メソッドを介してメタデータ・オブジェクトをインポートできます。 XMLテンプレートを使用して、Analytic Workspace Managerでメタデータ・オブジェクトをインポートすることもできます。
exportFullXML
メソッドは、指定されたオブジェクトまたは指定したoracle.olapi.transaction.Transaction
以降に作成または変更したオブジェクトの完全なXML定義をエクスポートします。 exportFullXML
メソッドの使用例は、「例4-10」を参照してください。
exportIncrementalXML
メソッドは、指定されたTransaction
以降にメタデータ・オブジェクトに対して変更されたXML属性のみをエクスポートします。 オブジェクトのList
を指定すると、エクスポートされたテンプレートには、リスト内のオブジェクトに対して変更されたXML属性が含まれます。 エクスポートされた増分XMLには、変更されたオブジェクトの所有権および包含階層内のオブジェクトのタイプと名前が含まれます。
exportFullXML
およびexportIncrementalXML
メソッドは、次のパラメータの様々な組合せを取ります。
-
エクスポートするオブジェクトの
List
またはTransaction
。 -
Oracle OLAPがXMLをエクスポートする
Writer
。Writer
を指定しない場合、メソッドはXMLを含むjava.lang.String
を返します。 -
メタデータ・オブジェクト参照がキーとしてあり、キーに対するオブジェクトとして、参照オブジェクトの新しい名前を含む
String
値を持つjava.util.Map
。 このMap
を使用すると、エクスポートするオブジェクトの名前を変更できます。 オブジェクトの名前を変更しない場合は、パラメータにnull
を指定できます。この
renameMap
パラメータにMap
を指定すると、Oracle OLAP XMLジェネレータはエクスポート中に参照オブジェクトの名前を変更します。 XMLテンプレートのエクスポート中にオブジェクトの名前を変更してからテンプレートをインポートすることで、既存のオブジェクトの定義をこの方法でコピーできます。 -
エクスポートされたXMLに所有オブジェクトの名前を含めるかどうかを指定する
boolean
。 -
キーとしてメタデータ・オブジェクト参照を持ち、キーのオブジェクトとして、SQLバインド変数と同様に機能する
String
値を持つ、オプションのMap
。 このパラメータのバインド変数の詳細は、「XMLテンプレートでのバインド変数の説明」を参照してください。 -
oracle.olapi.metadata.XMLWriterCallback
インタフェースのオプションの実装。XMLWriterCallback
を使用すると、エクスポートされたXMLから属性名または所有者名を除外するかどうかを指定できます。
祖先を共有するすべてのメタデータ・オブジェクトは、エクスポートされたXMLにグループ化されます。 最上位レベルのオブジェクトではなく、最上位レベルのコンテナがエクスポートするオブジェクトのList
にないオブジェクトの場合、エクスポートされたテンプレートには、オブジェクトに対する増分定義と、その下の完全な定義が含まれます。 これにより、キューブ・テンプレート全体をエクスポートせずに、キューブ内の計算済メジャーなどのオブジェクトのエクスポートがサポートされます。
MdmDatabaseSchema
がエクスポートするオブジェクトのList
にある場合、エクスポートされたテンプレートには、データベース・スキーマ内のすべてのオブジェクトが含まれます。 oracle.olapi.metadata.deployment.AW
オブジェクトがList
にある場合、エクスポートされたテンプレートには、AW
に含まれるすべてのオブジェクトが含まれます。 リスト内のMdmRootSchema
は無視されます。
2.3.1.2.2 XMLテンプレートのインポート
メタデータ・オブジェクトをXMLテンプレートとしてインポートする場合、MdmMetadataProvider
にはimportXML
メソッドのいくつかのシグネチャがあります。
importXML
メソッドは、オブジェクトのXML定義をインポートし、新しいオブジェクトを作成するか、既存のオブジェクトを変更します。 importXML
メソッドは、次のパラメータの様々な組合せを取ります。
-
XMLの入力用の
java.io.Reader
、またはインポートするXMLを含むString
。 -
新規または変更されたメタデータ・オブジェクトを含む
MdmDatabaseSchema
。 -
boolean
、modifyIfExists
は、インポートされたXML定義の差異で同じ名前の既存のオブジェクトを変更するかどうかを示します。 -
キーとしてバインド変数を含み、キーのオブジェクトとしてバインド変数を置換する
String
値を含む、オプションのMap
、bindValues
。 このパラメータのバインド値の詳細は、「XMLテンプレートでのバインド変数の説明」を参照してください。 -
oracle.olapi.metadata.XMLParserCallback
インタフェースのオプションの実装。
modifyIfExists
パラメータの値がtrue
で、インポートされたXMLにすでに存在するオブジェクトの完全な定義が含まれていて、オブジェクト定義がXMLと異なる場合、メソッドはオブジェクト定義の新しい要素または変更された要素をオブジェクトの既存の定義とマージします。 modifyIfExists
の値がfalse
で、すでに存在するオブジェクトの完全な定義がXMLに含まれている場合、importXML
メソッドは例外をスローします。
bindValues
パラメータを使用すると、Oracle OLAPがXMLテンプレートのインポート時にバインド変数の置換に使用するキー/オブジェクトのペアを持つMap
を指定できます。 Map
のキーは置換するバインド変数で、キーとペアになるオブジェクトはバインド変数を置換する値です。 テンプレートをインポートするときに、バインド変数をキーとして含むMap
を指定すると、Oracle OLAPは、インポートされたXMLのバインド変数を、bindValues
Map
のバインド変数に指定された値に置き換えます。
XMLParserCallback
インタフェースの実装をparserCallback
パラメータとしてimportXML
メソッドに渡すことができます。 XMLParserCallback
を使用すると、XMLのインポート時に発生する可能性のあるエラーをOracle OLAPが処理する方法を指定できます。 XML11_2_ParserCallback
インタフェースは、インポートされたオブジェクトの名前を変更したり、インポートされたオブジェクトの属性を抑制するためのメソッドを追加します。
2.3.1.2.3 XMLテンプレートでのバインド変数の説明
exportFullXML
およびexportIncrementalXML
メソッドには、オプションのbindVariables
パラメータがあります。 このパラメータは、メタデータ・オブジェクトをキーとして、String
値をキーのオブジェクトとして持つMap
です。 String
値は、SQLバインド変数と同様に機能します。 XMLのエクスポート時に、Oracle OLAP XMLジェネレータによって、参照されるオブジェクトの名前がバインド変数に置き換えられます。
exportFullXML
またはexportIncrementalXML
メソッドにbindVariables
パラメータにMap
を指定した場合、メソッドによって生成されるXMLは次の宣言で始まります。
<!DOCTYPE Metadata [ <!ENTITY % BIND_VALUES PUBLIC "OLAP BIND VALUES" "OLAP METADATA"> %BIND_VALUES; ]>
bindVariables
マップで指定された値は、エクスポートされたXMLの書式"&BV;"
(ここでBV
はバインド変数)で表示されます。
importXML
メソッドのbindValues
パラメータは、XMLテンプレートのインポート時にOracle OLAPがバインド変数の置換に使用する値を指定します。 テンプレートをインポートする際に、バインド変数をキーとして含むMap
を指定すると、Oracle OLAPは、インポートされたXMLのバインド変数を、Map
のバインド変数キーのオブジェクトとして指定されたString
に置き換えます。
bindValues
パラメータにMap
を指定する場合、メソッドに指定するinXML
文字列には!DOCTYPE Metadata
宣言が含まれ、インポートするXMLのバインド変数は"&BV;"
形式である必要があります。
2.3.2 スキーマの表現
スキーマは、MdmSchema
クラスとそのサブクラスで表されます。 MdmSchema
は、MdmCube
、MdmDimension
およびその他のMdmObject
オブジェクト(他のMdmSchema
オブジェクトを含む)の所有者またはコンテナです。 10g以前のバージョンのOLAP Java APIでは、MdmSchema
クラスに複数のロールがありました。 APIには、メジャー・フォルダごとに1つのルートMdmSchema
、MdmSchema
、およびアプリケーションが作成できるカスタムMdmSchema
オブジェクトがありました。
11g OLAP Java APIでは、異なるロールを分離および定義するためにMdmSchema
のサブクラスが導入されました。 11gでは、MdmSchema
は、以前のバージョンとの互換性、および10gメタデータ・リーダー・モードで使用するための具象クラスです。
11gでは、MdmSchema
は、MdmSchema
の次のサブクラスのインスタンスです:
-
MdmRootSchema
。これは、MdmDatabaseSchema
オブジェクトのコンテナであり、システムによって提供されます。 -
MdmDatabaseSchema
。データベース・ユーザーのリレーショナル・スキーマを表し、MdmCube
、MdmDimension
およびその他のMdmObject
オブジェクトを作成して所有します。MdmDatabaseSchema
オブジェクトは、システムによって提供されます。 -
MdmOrganizationalSchema
。メジャーおよびその他のMdmOrganizationalSchema
オブジェクトを編成するために使用できます。
次のトピックでは、MdmSchema
のサブクラスについて説明します。
- 「ルート・スキーマの表現」
- 「データベース・スキーマの表現」
データベース・ユーザーが所有するリレーショナル・スキーマは、MdmDatabaseSchema
オブジェクトで表されます。 - 「組織スキーマの表現」
親トピック: メタデータ・オブジェクトの指定
2.3.2.1 ルート・スキーマの表現
ルート・スキーマは、データベース・スキーマ・オブジェクトのコンテナです。 この最上位スキーマは、MdmRootSchema
クラスで表されます。 MdmRootSchema
は、MdmMetadataProvider
のgetRootSchema
メソッドを使用して取得します。 MdmRootSchema
から、すべてのMdmDatabaseSchema
オブジェクトを取得することも、名前で個々のMdmDatabaseSchema
を取得することもできます。
MdmRootSchema
クラスには、MdmMetadataProvider
によって提供されるすべてのMdmCube
、MdmMeasure
およびMdmPrimaryDimension
オブジェクトも含まれており、これらのオブジェクトを取得するためのメソッドがあります。 ただし、これらのメソッドによって返されるオブジェクトのList
には、ユーザーが表示する権限を持つキューブ、メジャーまたはディメンションのみが含まれます。
「図2-4」は、MdmMetadataProvider
とMdmSchema
のサブクラスの間の関連付けを示します。
図2-4 MdmMetadataProviderとMdmSchemaサブクラスの関連付け

「図2-4 MdmMetadataProviderとMdmSchemaサブクラスの関連付け」の説明
親トピック: スキーマの表現
2.3.2.2 データベース・スキーマの表現
データベース・ユーザーが所有するリレーショナル・スキーマは、MdmDatabaseSchema
オブジェクトで表されます。
MdmRootSchema
には、データベース・ユーザーごとに1つのMdmDatabaseSchema
オブジェクトがあります。 MdmDatabaseSchema
の名前はデータベース・ユーザーと同じです。 たとえば、ユーザーGLOBALのMdmDatabaseSchema
の名前はGLOBAL
です。
MdmRootSchema
のメソッドを使用して、1つまたはすべてのMdmDatabaseSchema
オブジェクトを取得できます。 ただし、MdmDatabaseSchema
が所有するオブジェクトへのアクセスは、セッションのユーザーに付与されるセキュリティ権限によって決まります。
MdmDatabaseSchema
は、最上位レベルのOLAPメタデータ・オブジェクトおよびそれらによって作成されたオブジェクトの所有者です。 MdmDatabaseSchema
を使用して、既存のメタデータ・オブジェクトを取得したり、新しいメタデータ・オブジェクトを作成します。 最上位オブジェクトは次のとおりです:
-
AW
-
MdmCube
-
MdmNamedBuildProcess
-
MdmOrganizationalSchema
-
MdmPrimaryDimension
-
MdmTable
MdmTable
を除き、findOrCreateAW
やfindOrCreateStandardDimension
などのfindOrCreate
メソッドを使用して、新しい最上位オブジェクトを作成したり、既存のオブジェクトを取得したりできます。 オブジェクトの作成については、「メタデータの検出」を参照してください。
最上位レベルのOLAPメタデータ・オブジェクトを作成したTransaction
をコミットすると、それらのオブジェクトがOracleデータ・ディクショナリに存在します。 これらのオブジェクトは通常のSQL問合せによって使用でき、Oracle OLAP Java APIを使用するアプリケーションでも使用できます。
メタデータ・オブジェクトはOracleデータ・ディクショナリに存在するため、Oracle Database DBAは特定のタイプのメタデータ・オブジェクトへのアクセスを制限できます。 クライアント・アプリケーションでは、JDBC APIを使用して、ユーザー・セッションのJDBC接続を介して標準のSQL GRANT
およびREVOKE
コマンドを送信することで、このような制限を設定できます。
getTopLevelObject
メソッドを使用して、MdmTable
またはその他のトップレベル・オブジェクトを取得できます。 getAWs
、getDimensions
、getOrganizationalSchemas
などのメソッドを使用して、特定のタイプのトップレベル・オブジェクトのすべてのインスタンスを取得することも、getSchemaObjects
を使用してMdmDatabaseSchema
が所有するすべてのオブジェクトを取得することもできます。 addAW
やremoveSchemaObject
などのメソッドを使用して、最上位レベルのオブジェクトを追加または削除できます。
親トピック: スキーマの表現
2.3.2.3 組織スキーマの表現
OLAPメジャー・フォルダは、メジャー、キューブおよびディメンションを編成します。 メジャー・フォルダは、MdmOrganizationalSchema
クラスで表されます。 メジャー・フォルダは、類似した名前のメジャーを区別する方法を提供します。 たとえば、ユーザーは、SALESまたはCOSTSという名前のメジャーを持つ複数のスキーマにアクセスできます。 同じ名前のメジャーを異なるMdmOrganizationalSchema
オブジェクトに分離できます。 MdmOrganizationalSchema
には、キューブ、ディメンションおよびメジャーを追加または削除するためのメソッドがあります。 組織スキーマをネストできるため、クラスには他のMdmOrganizationalSchema
オブジェクトを追加および削除するためのメソッドもあります。
親トピック: スキーマの表現
2.4 データ・ソースへのアクセスの提供
mdm
パッケージの一部のクラスで、データ・ストア内のデータを含むオブジェクトまたはデータへのアクセスを提供するオブジェクトを表します。 これらのクラスの中には、キューブ、メジャー、ディメンション、レベル、階層および属性を含むOLAPディメンション・データ・モデル・オブジェクトを表すものもあります。 その他のmdm
クラスは、表などのリレーショナル・オブジェクト、またはビューや表の列を表します。
「図2-5」は、ディメンション・データ・モデル・オブジェクトを実装するクラス間の関連付けを示します。 MdmCube
には、ゼロから多数のMdmMeasure
オブジェクトを含めることができます。 MdmMeasure
は、1つのMdmCube
オブジェクトに含まれます。 MdmCube
には、ゼロから多数のMdmPrimaryDimension
オブジェクトを指定できます。これらのオブジェクトは、MdmDimensionality
オブジェクトを介して関連付けられます。 MdmPrimaryDimension
には、ゼロから多数のMdmDimensionLevel
オブジェクト、MdmHierarchy
オブジェクトおよびMdmAttribute
オブジェクトを含めることができます。
図2-5 ディメンション・データ・モデル・クラスの関連付け

「図2-5 ディメンション・データ・モデル・クラスの関連付け」の説明
これらのディメンション・データ・オブジェクトまたはリレーショナル・データ・オブジェクトを表すクラスは、MdmSource
クラスのサブクラスです。 MdmSource
のサブクラスには、Source
オブジェクトを戻すgetSource
メソッドがあります。 Source
オブジェクトを使用して、データの問合せを定義します。 次に、Cursor
オブジェクトを使用してデータを取得します。 Source
およびCursor
オブジェクトの操作の詳細は、「Sourceオブジェクトの理解」および「カーソル・クラスおよび概念の理解」を参照してください。
SQLを使用して、Oracle OLAPがキューブ、ディメンションおよび階層に対して自動的に生成するビューを問い合せることもできます。 これらのビューの問合せの詳細は、「ディメンションおよび階層ビューおよびビュー列名の取得」を参照してください。
次のトピックでは、データ・ソースへのアクセスを提供するクラスについて説明します。
2.4.1 キューブおよびメジャーの表現
キューブは、ディメンション・モデルの物理実装です。 同じディメンション・セットを持つメジャーを編成します。 キューブとメジャーはディメンション化されたオブジェクトで、キューブに関連付けられたディメンションはメジャーのデータを識別して分類します。 次のトピックでは、キューブおよびメジャーについて説明します。
親トピック: データ・ソースへのアクセスの提供
2.4.1.1 キューブの表示
OLAPキューブは、MdmCube
クラスで表されます。 MdmCube
は、MdmMeasure
オブジェクトのコンテナで、同じMdmPrimaryDimension
オブジェクトのセットによってディメンション化されます。 アプリケーションは、MdmCube
のfindOrCreateBaseMeasure
およびfindOrCreateDerivedMeasure
メソッドを使用して、MdmBaseMeasure
またはMdmDerivedMeasure
オブジェクトを作成します。 addDimension
メソッドを使用して、メジャーの各ディメンションをキューブに関連付けます。
MdmCube
は、通常、単一のファクト表またはビューに対応します。 表またはビューをキューブに関連付けるには、Query
およびCubeMap
オブジェクトを使用します。 表またはビューのQuery
を取得し、CubeMap
のsetQuery
メソッドを使用してQuery
をCubeMap
に関連付けます。
CubeMap
には、キューブのメジャーおよびディメンションをデータ・ソースにマップするMeasureMap
およびCubeDimensionalityMap
オブジェクトが含まれます。 MeasureMap
では、メジャーのベース・データを含むファクト表またはビューの列を識別するMdmBaseMeasure
およびExpression
を指定します。
キューブのディメンションをマップするには、キューブのMdmDimensionality
オブジェクトを取得します。 MdmDimensionality
ごとにCubeDimensionalityMap
を作成します。 次に、ファクト表またはビュー内のディメンションの外部キー列を識別するCubeDimensionalityMap
にExpression
を指定します。 リーフ・レベルのディメンション・メンバーに列以外のディメンション列を指定する場合は、CubeDimensionalityMap
のsetJoinCondition
メソッドを使用して結合Condition
を指定する必要があります。
MdmCube
には、CubeOrganization
が関連付けられています。 CubeOrganization
は、キューブをアナリティク・ワークスペースまたはリレーショナル・データベース・オブジェクトとしてデプロイします。 キューブをアナリティク・ワークスペースにデプロイするには、MdmCube
のfindOrCreateAWCubeOrganization
メソッドをコールします。 そのメソッドによって戻されたAWCubeOrganization
を使用して、キューブの特性(Oracle OLAPによるキューブのビルド方法、キューブのメジャー・データの格納方法、データベースによるキューブのマテリアライズド・ビューのビルドなど)を指定します。 AWCubeOrganization
クラスの詳細は、「Oracle OLAP Java APIリファレンス」を参照してください。
AWCubeOrganization
のマテリアライズド・ビュー・オプションがREWRITE_MV_OPTION
の場合、Oracle OLAPは、データベースの問合せリライト・システムで使用できるキューブ用のマテリアライズド・ビューを作成します。 マテリアライズド・ビュー・オプションがREWRITE_WITH_ATTRIBUTES_MV_OPTION
の場合、Oracle OLAPはリライト・マテリアライズド・ビューに、isPopulateLineage
メソッドがtrue
を戻すディメンション属性を含めます。 マテリアライズド・ビュー・オプションは、AWCubeOrganization
のsetMVOption
メソッドを使用して設定します。
MdmCube
にはConsistentSolveSpecification
オブジェクトもあります。このオブジェクトには、Oracle OLAPによるキューブのメジャーの値の計算方法(または「解決」)を指定する1つ以上のConsistentSolveCommand
オブジェクトが含まれます。 たとえば、ConsistentSolveCommand
として、SUM
またはMAX
関数を表すAggregationCommand
を指定できます。 ConsistentSolveSpecification
は、キューブのsetConsistentSolveSpecification
メソッドで指定します。
メジャーの値が仕様と一致する場合(親の値が子の値のSUM
と等しい場合など)、キューブは「一貫性」です。 BuildProcess
がConsistentSolveCommand
を実行すると、キューブの一貫性が保たれます。
MdmCube
およびMdmMeasure
オブジェクトの作成とそれらのマッピング、およびこのトピックで説明するその他の操作の例は、「例4-7」および「例4-8」を参照してください。
「図2-6」は、MdmCube
と、このトピックで説明する一部のクラスの関連付けを示します。 この図は、アナリティク・ワークスペースにデプロイされたMdmCube
を示しています。
図2-6 MdmCubeと関連オブジェクト

「図2-6 MdmCubeと関連オブジェクト」の説明
親トピック: キューブおよびメジャーの表現
2.4.1.2 メジャーの表現
MdmMeasure
は、1つ以上のMdmPrimaryDimension
オブジェクトによって編成されるデータ・セットを表す抽象クラスです。 データの構造は、多次元配列の構造に類似しています。 配列内の特定のセルを識別するための索引を提供する配列のディメンションと同様に、MdmMeasure
を編成するMdmPrimaryDimension
オブジェクトは、MdmMeasure
の特定の値を識別するための索引を提供します。
たとえば、ある期間および販売チャネルを介して顧客に販売された製品ユニットの数を記録するデータを含むMdmMeasure
があるとします。 メジャーのデータは、製品、時間、顧客およびチャネルのディメンション別に編成されます(カタログやインターネットなどの販売収益を表すチャネルを使用)。 この場合、製品ディメンション、時間ディメンション、顧客ディメンションおよびチャネル・ディメンションによって編成構造が提供され、データは4次元配列を持つと考えることができます。 これらの4つのディメンションの値は、配列内の特定の各セルを識別するための索引です。 各セルには、販売台数の1つのデータ値が格納されます。 配列の中の値を識別するために、各ディメンションに値を指定する必要があります。
MdmMeasure
の値は通常数値ですが、メジャーには他のデータ型の値を指定できます。 MdmMeasure
の具象サブクラスは、MdmBaseMeasure
およびMdmDerivedMeasure
です。
アナリティク・ワークスペースのMdmBaseMeasure
には、物理記憶域構造が関連付けられています。 通常、MdmCube
は、ファクト表の列からMdmBaseMeasure
のベース・データを取得します。 Oracle OLAPは、メジャーの集計値を計算し、その値をキューブのOLAPビューに格納します。
MdmBaseMeasure
を作成するときに、setSQLDataType
メソッドを使用してメジャーのSQLデータ型を指定できます。 指定しない場合、MdmBaseMeasure
には、マップ先のソース・データのデータ型が含まれます。
setAllowAutoDataTypeChange
メソッドでtrue
を指定すると、Oracle OLAPがメジャーのSQLデータ型を自動的に設定できるようになります。 これは、メジャーのデータ型が変更された場合に役立ちます。 SQLデータ型の自動変更を許可すると、Oracle OLAPは、setSQLDataType
メソッドでSQLデータ型を指定したかどうかに関係なく、適切なSQLデータ型を決定します。
MdmDerivedMeasure
には、関連付けられた物理記憶域がありません。 Oracle OLAPは、必要に応じてMdmDerivedMeasure
の値を動的に計算します。
MdmMeasure
の値は、MdmMeasure
のMdmPrimaryDimension
オブジェクトの構造によって決まります。 つまり、MdmMeasure
の各値はタプルで識別されます。タプルは、MdmPrimaryDimension
オブジェクトのメンバーの一意の組合せです。
MdmMeasure
のMdmPrimaryDimension
オブジェクトは、MdmStandardDimension
またはMdmTimeDimension
オブジェクトです。 通常、これらのオブジェクトは1つ以上の階層構造を持ちます。 これらのMdmPrimaryDimension
オブジェクトには、そのコンポーネントMdmHierarchy
オブジェクトのすべてのメンバーが含まれます。 この構造のため、MdmMeasure
の値は、次の1つ以上です:
-
MdmMeasure
のベースとなるファクト表の列、ビューまたは計算からの値。 これらの値は、ディメンションの階層のリーフ・レベルのメンバーの組合せによって識別されます。 -
Oracle OLAPが提供した集計値。 これらのメジャー値は、階層の集計レベルから少なくとも1つのメンバーによって識別されます。
-
MdmDerivedMeasure
またはカスタム・ディメンション・メンバーに対してExpression
で指定された値。
たとえば、製品のMdmTimeDimension
およびMdmStandardDimension
によってディメンション化されるMdmBaseMeasure
を想像します。 メジャーおよびディメンションのメタデータ・オブジェクトは、mdmUnitCost
、mdmTimeDim
およびmdmProdDim
です。 各mdmTimeDim
およびmdmProdDim
オブジェクトには、表すディメンションのすべてのリーフ・メンバーおよび集計メンバーが含まれます。 リーフ・メンバーは、子を持たないメンバーです。 集計メンバーには1つ以上の子があります。
2つのメンバーの一意の組合せ(mdmTimeDim
から1つ、mdmProdDim
から1つ)は、各mdmUnitCost
値を識別し、ディメンション・メンバーのすべての組合せを使用してmdmUnitCost
値のセット全体を指定します。
一部のmdmUnitCost
値は、リーフ・メンバー(特定の製品アイテムや特定の月など)の組合せによって識別されます。 その他のmdmUnitCost
値は、集計メンバー(特定の製品ファミリや特定の四半期など)の組合せによって識別されます。 さらに、他のmdmUnitCost
値は、リーフ・メンバーと集計メンバーを混在させて識別されます。
リーフ・メンバーによってのみ識別されるmdmUnitCost
の値は、データベース・ファクト表の列(またはファクト表の計算)から直接取得されます。 これらの値は、最下位レベルのデータを表します。 ただし、少なくとも1つの集計メンバーによって識別される値は、Oracle OLAPによって計算されます。 これらの上位レベルの値は、集計またはロールアップされたデータを表します。 したがって、MdmBaseMeasure
で表されるデータは、データ・ストアからのファクト表データと、Oracle OLAPがアナリティク操作に使用できる集計データを組み合せたものです。
親トピック: キューブおよびメジャーの表現
2.4.2 ディメンション、レベルおよび階層の表示
ディメンションは、データ・セットを編成できるメンバーのリストの一般的な概念を表します。 たとえば、月期間中の製品アイテムの価格である数値のセットがある場合、単価データは、時間と製品値のディメンションでディメンション化されるMdmMeasure
で表されます。 時間ディメンションには月の値が含まれ、製品ディメンションには項目の値が含まれます。 月および項目の値は、単位価格データセットの特定の値を識別するための索引として機能します。
ディメンションには、レベルと階層を含めることができます。 レベルでは、ディメンション・メンバーを親子関係にグループ化できます。下位レベルのメンバーは、上位レベルの親の子です。 階層は、レベル間の関係を定義します。 ディメンションには通常、関連する属性があります。
ディメンション・オブジェクト、レベル・オブジェクトおよび階層オブジェクトのベース・クラスは、MdmSource
を拡張する抽象クラスMdmDimension
です。 MdmDimension
には、オブジェクトに関連付けられた属性を取得および削除するためのメソッドがあります。 また、オブジェクトのメンバーのカーディナリティおよびカスタム順序を取得および設定するためのメソッドもあります。 MdmDimension
の直接サブクラスは、抽象MdmPrimaryDimension
クラスおよびMdmSubDimension
クラスです。
MdmPrimaryDimension
およびMdmHierarchyLevel
オブジェクトには、MdmAttribute
オブジェクトを関連付けることができます。 属性の詳細は、「ディメンション属性の表示」を参照してください。
次のトピックでは、ディメンション、レベルおよび階層について説明します。
2.4.2.1 ディメンションの表示
ディメンションは、MdmDimension
の抽象サブクラスであるMdmPrimaryDimension
クラスのインスタンスによって表されます。 MdmPrimaryDimension
クラスの具象サブクラスは、様々なタイプのデータを表します。 MdmPrimaryDimension
の具象サブクラスは次のとおりです:
-
MdmMeasureDimension
。ディメンション・メンバーの値として、データ・ストア内のすべてのMdmMeasure
オブジェクトが含まれます。 データ・ストアには、MdmMeasureDimension
が1つのみあります。MdmMeasureDimension
を取得するには、MdmRootSchema
のgetMeasureDimension
メソッドをコールします。 データ・ストアのメジャーを取得するには、MdmMeasureDimension
のgetMeasures
メソッドをコールします。 -
MdmStandardDimension
。特別な特性がなく、通常は製品、顧客、流通チャネルなどのディメンションを表します。 -
MdmTimeDimension
。メンバーの値として期間があります。 各期間には、終了日と期間があります。MdmTimeDimension
には、その情報を記録する属性を取得するためのメソッドがあります。
MdmPrimaryDimension
は、次のインタフェースを実装します。
-
MdmMemberListMapOwner
。MemberListMap
オブジェクトを検索または作成または取得するためのメソッドを定義します。 -
MdmViewColumnOwner
。これは、MdmViewColumn
を関連付けることができるオブジェクトのマーカー・インタフェースです。 -
MdmQuery
。実装クラスに関連付けられたQuery
オブジェクトを取得し、Query
に関する情報を取得するためのメソッドを定義します。
MdmPrimaryDimension
には、ディメンション・メンバーをレベルに編成するコンポーネントMdmDimensionLevel
オブジェクトを含めることができます。 また、階層にレベルを編成するMdmHierarchy
オブジェクトも使用できます。 MdmPrimaryDimension
にはコンポーネントMdmHierarchy
オブジェクトのすべてのメンバーが含まれますが、各MdmHierarchy
オブジェクトにはその階層内のメンバーのみが含まれます。
オブジェクトのgetDimensions
メソッドをコールすると、MdmDatabaseSchema
またはMdmOrganizationalSchema
によって含まれているすべてのMdmPrimaryDimension
オブジェクトを取得できます。 MdmDatabaseSchema
には、MdmTimeDimension
またはMdmStandardDimension
を名前で検索したり、オブジェクトが存在しない場合は作成するためのメソッドがあります。
MdmStandardDimension
およびMdmTimeDimension
オブジェクトには、MdmAttribute
オブジェクトが含まれます。 属性の中には、親属性などのOracle OLAPによって導出されるものと、リレーショナル表のデータ、またはExpression
で指定したデータにマップするものがあります。 属性の詳細は、「ディメンション属性の表示」を参照してください。
MdmPrimaryDimension
は、ディメンション・メンバーを1つ以上のレベルに編成できます。 各レベルは、MdmDimensionLevel
オブジェクトで表されます。 MdmStandardDimension
またはMdmTimeDimension
には、レベルを階層関係に編成するMdmHierarchy
オブジェクトを含めることができます。 MdmLevelHierarchy
では、ディメンション・レベルはMdmHierarchyLevel
オブジェクトで表されます。 具体的なMdmDimensionLevel
クラスとMdmHierarchyLevel
クラス、および抽象MdmHierarchy
クラスは、抽象MdmSubDimension
クラスの直接サブクラスです。
親トピック: ディメンション、レベルおよび階層の表示
2.4.2.2 ディメンション・レベルの表現
MdmDimensionLevel
は、同じレベルのディメンション・メンバーのセットを表します。 ディメンション・メンバーは、最大1つのディメンション・レベルにすることができます。 MdmPrimaryDimension
のfindOrCreateDimensionLevel
を使用してMdmDimensionLevel
を取得または作成します。 MemberListMap
を使用して、MdmDimensionLevel
をデータ・ソースにマップできます。
MdmPrimaryDimension
には、それに含まれるすべてのMdmDimensionLevel
オブジェクトのリストを取得するメソッドがあります。 また、名前でMdmDimensionLevel
を検索したり、オブジェクトが存在しない場合は作成するためのメソッドもあります。
親トピック: ディメンション、レベルおよび階層の表示
2.4.2.3 階層の表示
MdmHierarchy
は、MdmSubDimension
の抽象サブクラスです。 MdmHierarchy
の具象サブクラスは、MdmLevelHierarchy
およびMdmValueHierarchy
です。
MdmHierarchy
は、ディメンションのメンバーを階層構造に編成します。 MdmLevelHierarchy
の親子階層関係は、ディメンションのレベルに基づきます。 MdmValueHierarchy
では、階層関係はレベルではなくディメンション・メンバー値に基づきます。 MdmPrimaryDimension
には、いずれかの階層または両方の階層を複数持つことができます。
階層メンバーの親は親MdmAttribute
に記録されます。この親は、MdmHierarchy
のgetParentAttribute
メソッドをコールして取得できます。 階層メンバーの祖先は、getAncestorsAttribute
メソッドをコールして取得できる祖先MdmAttribute
に記録されます。
MdmPrimaryDimension
には、それに含まれるすべてのMdmHierarchy
オブジェクトのリストを取得するメソッドがあります。 また、MdmLevelHierarchy
またはMdmValueHierarchy
を名前で検索したり、オブジェクトが存在しない場合は作成するためのメソッドもあります。
次のトピックでは、レベルベース階層と値ベース階層を表すオブジェクトについて説明します。
2.4.2.3.1 レベルベース階層の表現
MdmLevelHierarchy
は、MdmHierarchy
のサブクラスです。 MdmLevelHierarchy
には、最上位、最上位、レベルおよびリーフ(最下位)レベルのツリー状の構造があります。 各メンバーは、階層内にゼロまたは1つの親を持つことができます。 メンバーAがメンバーBの親、メンバーBがメンバーCの親、メンバーCがメンバーAの親など、サイクルは許可されません。
他のメンバーの子ではないメンバーは、「独楽」メンバーです。 子を持つメンバーは、階層の「総計」または「集計メンバー」です。 子を持たないメンバーは、階層の「葉」または「リーフ・メンバー」です。
各メンバーはレベルにあります。 レベルは、最上位レベルからリーフ・レベルの順に並べられます。 順序は、MdmPrimaryDimension
のMdmDimensionLevel
オブジェクトを作成する順序によって決まります。 最初に作成するMdmDimensionLevel
は最上位レベルであり、最後に作成するMdmDimensionLevel
はリーフ・レベルです。 たとえば、TIME_AWJディメンションのCALENDAR_YEAR階層の場合、CreateAndBuildAW.java
およびSpecifyAWValues
サンプル・プログラムでは、次の順序で4つのMdmDimensionLevel
オブジェクトが作成されます: TOTAL_TIME、YEAR、QUARTERおよびMONTH。 最上位レベルはTOTAL_TIMEで、リーフ・レベルはMONTHです。
階層のメンバーに親がある場合、その親は上位レベルである必要があります。 Oracle OLAPでは、階層内のすべてのリーフ・メンバーがリーフ・レベルであることを想定しています。 Oracle OLAPが階層を「ラグ済」にすることを許可するように指定できます。 不規則階層では、1つ以上のリーフ・メンバーがリーフ・レベルにありません。 MdmLevelHierarchy
のsetIsRagged(true)
メソッドをコールして、階層の不規則化を許可するように指定できます。
Oracle OLAPでは、メンバーが最上位レベルより下のレベルにある場合、そのメンバーには親があり、その親がメンバーのレベルのすぐ上のレベルにあることも想定しています。 メンバーが最上位レベルではなく、そのメンバーに親がないか、親が次の上位レベルにない場合、階層はskip-level
階層になります。 MdmLevelHierarchy
のsetIsSkipLevel(true)
メソッドをコールして、スキップ・レベルの階層を許可するように指定できます。
「図2-7」は、通常の階層内のメンバーの関係、不規則な階層および2つのタイプのスキップ・レベル階層を示します。
図2-7 通常、不規則、スキップ・レベルの階層

「図2-7 標準、不規則、スキップ・レベルの階層」の説明
MdmLevelHierarchy
の様々なレベルは、MdmHierarchyLevel
オブジェクトで表されます。 レベルベースの階層の作成例は、「MdmLevelHierarchyの作成およびマッピング」を参照してください。
MdmLevelHierarchy
には階層のすべてのメンバーがあり、各コンポーネントMdmHierarchyLevel
オブジェクトには、そのオブジェクトが表すレベルのメンバーのみが含まれます。 MdmLevelHierarchy
は、メンバーの非階層リストも表すことができます。その場合、MdmLevelHierarchy
は1つのMdmHierarchyLevel
を持ち、両方のオブジェクトが同じメンバーを持ちます。 MdmLevelHierarchy
のレベルを取得するには、getHierarchyLevels
メソッドをコールします。
MdmLevelHierarchy
には、それに含まれるすべてのMdmHierarchyLevel
オブジェクトのリストを取得するメソッドがあります。 また、名前でMdmHierarchyLevel
を検索したり、オブジェクトが存在しない場合は作成するためのメソッドもあります。
MdmPrimaryDimension
には、複数のMdmLevelHierarchy
を含めることができます。 たとえば、MdmTimeDimension
ディメンションには、2つのMdmLevelHierarchy
オブジェクトがあり、1つはカレンダ年の期間別に編成され、もう1つは会計年度の期間別に編成されます。 1つの階層のMdmHierarchyLevel
オブジェクトは、カレンダ年の期間のMdmDimensionLevel
オブジェクトを階層に関連付けます。 他方の階層のMdmHierarchyLevel
オブジェクトは、会計年度の期間のMdmDimensionLevel
オブジェクトをその階層に関連付けます。 通常、レベルベースの階層は最下位レベルを共有するため、各階層の最下位レベルのMdmHierarchyLevel
は、同じMdmDimensionLevel
を各階層に関連付けます。 たとえば、カレンダ年の階層と会計年度の階層では、月の期間のMdmHierarchyLevel
が同じです。
親トピック: 階層の表示
2.4.2.3.2 値ベース階層の表現
値ベースの階層は、階層関係の定義においてレベルに意味がない階層です。 このタイプの階層は、MdmHierarchy
のサブクラスであるMdmValueHierarchy
クラスによって表されます。 値階層の例としては、会社の従業員レポート構造があり、親子関係では表すことができますが、レベルはありません。 値ベースの階層の作成例は、「MdmValueHierarchyの作成およびマッピング」を参照してください。
値階層のOLAPビューには、マネージャである従業員を含め、すべての従業員を含む列があります。 親メンバーを含む別の列があります。 別の列には、階層内のメンバーの深さが示されます。この階層では、マネージャを持たないメンバーが深さ0 (ゼロ)、そのマネージャの部下である従業員がレベル1などになります。
親トピック: 階層の表示
2.4.2.4 階層レベルの表現
MdmHierarchyLevel
は、MdmSubDimension
のサブクラスです。 MdmHierarchyLevel
は、MdmDimensionLevel
をMdmLevelHierarchy
に関連付けます。
階層内のレベルの順序は、MdmLevelHierarchy
のMdmHierarchyLevel
オブジェクトを作成する順序によって指定されます。 最初に作成するMdmHierarchyLevel
は最上位レベルであり、最後に作成するMdmHierarchyLevel
は最下位レベルです。 階層の作成例は、「MdmLevelHierarchyの作成およびマッピング」を参照してください。
親トピック: ディメンション、レベルおよび階層の表示
2.4.3 ディメンション属性の表示
OLAPディメンション属性は、MdmAttribute
オブジェクトで表されます。 MdmAttribute
には、MdmPrimaryDimension
のメンバーに関連する値があります。 MdmAttribute
クラスはMdmDimensionedObject
のサブクラスです。これは、MdmMeasure
と同様に、MdmAttribute
の値はディメンションのメンバーに関連して意味を持つためです。
リレーションは、1対1、多対1、または1対多のいずれかです。 たとえば、PRODUCT_AWJディメンションには、短い説明属性、パッケージ属性および祖先属性があります。 概略属性には、ディメンション・メンバーごとに個別の値があります。 パッケージ属性には値のセットがあり、それぞれが複数のディメンション・メンバーに適用されます。 祖先属性には、1つのディメンション・メンバーに適用される複数の値があります。 MdmAttribute
がMdmDimension
のメンバーに適用されない場合、そのメンバーのMdmAttribute
値はnull
です。
「表2-3」は、PRODUCT_AWJディメンションの最初の数個のメンバー、および関連する短い説明とパッケージ属性値を示します。 ディメンションのITEMレベルの一部のメンバーのみにパッケージ属性があります。 他のアイテム、および上位レベルの場合、パッケージ属性値はnull
で、表にはNA
として表示されます。
表2-3 ディメンション・メンバーと関連属性値
ディメンション・メンバー | 関連する簡単な説明 | 関連するパッケージ |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
... |
... |
... |
MdmAttribute
から値を取得するには、MdmAttribute
のSource
と、MdmDimension
の1つ以上のメンバーを指定するSource
を結合する必要があります。 Source
オブジェクトの結合の詳細は、「Sourceオブジェクトの理解」を参照してください。 MdmAttribute
およびMdmDimension
のSource
オブジェクトを結合する例については、「例4-5」および「例5-7」や「例6-10」などの「Sourceオブジェクトの理解」および「Sourceメソッドを使用した問合せの作成」の例を参照してください。
次のトピックでは、ディメンション属性を表すクラスについて説明します。
2.4.3.1 MdmAttributeクラスの説明
抽象MdmAttribute
クラスには、抽象クラスMdmSingleValuedAttribute
であるサブクラスがあります。 そのクラスには2つの具象サブクラスがあります: MdmBaseAttribute
およびMdmDerivedAttribute
。
親トピック: ディメンション属性の表示
2.4.3.1.1 属性のタイプの説明
MdmAttribute
は、それを作成するMdmPrimaryDimension
によって格納されます。 親属性やレベル属性などの一部の属性は、Oracle OLAPによってディメンションの構造から導出されます。 その他は、長い説明属性や短い説明属性などのアクセッサ・メソッド、またはMdmTimeDimension
が必要とする終了日時スパン属性を持つMdmPrimaryDimension
の共通属性です。 これらの属性の1つを作成したら、MdmPrimaryDimension
のsetShortValueDescriptionAttribute
メソッドやMdmTimeDimension
のsetTimeSpanAttribute
メソッドなどのメソッドを使用してディメンションに関連付けます。 GLOBAL_AWJサンプル・アナリティク・ワークスペースのPACKAGE属性など、独自の目的で属性を作成することもできます。
親トピック: MdmAttributeクラスの説明
2.4.3.1.2 属性とMdmSubDimensionの関連付け
属性を作成したら、それをMdmSubDimension
に関連付けます。 MdmSubDimension
のaddAttribute
メソッドを使用して、1つのMdmSubDimension
のみに関連付けることができます。 また、MdmAttribute
のsetIsVisibleForAll
メソッドを使用して、MdmPrimaryDimension
のすべてのMdmDimensionLevel
オブジェクトに関連付けることもできます。 setIsVisibleForAll
メソッドでtrue
を指定すると、その属性は、MdmPrimaryDimension
によって現在含まれているすべてのMdmDimensionLevel
オブジェクトと、その後にディメンションを作成または追加するすべてのMdmDimensionLevel
オブジェクトに適用されます。
親トピック: MdmAttributeクラスの説明
2.4.3.1.3 MdmAttributeオブジェクトの取得
MdmPrimaryDimension
のgetAttributes
メソッドは、クライアント・アプリケーションによって作成されたすべてのMdmAttribute
オブジェクトを戻します。 MdmSubDimension
のgetAttributes
メソッドは、アプリケーションがaddAttribute
メソッドを使用して追加した属性のみを返します。 MdmPrimaryDimension
のその他のメソッドは、Oracle OLAPが生成する特定の属性(getHierarchyAttribute
、getLevelDepthAttribute
、getParentAttribute
メソッドなど)を返します。
親トピック: MdmAttributeクラスの説明
2.4.3.1.4 ターゲット・ディメンションの指定
属性のターゲット・ディメンションは、表内の列間の外部キー制約の定義に似ています。 属性のすべての値も、ターゲット・ディメンションのキーである必要があります。
MdmAttribute
のsetTargetDimension
メソッドを使用して、属性のターゲット・ディメンションを指定できます。 ターゲット・ディメンションのQuery
であるリレーショナル表には、属性のマップ先となるディメンション表の列にあるすべての値を含む列が必要です。
親トピック: MdmAttributeクラスの説明
2.4.3.2 MdmBaseAttributeクラスの説明
MdmBaseAttribute
には、それを含むディメンションおよびそれが適用される階層のOLAPビューに格納されている値があります。 OLAPビューの詳細は、「OLAPビューの使用」を参照してください。
MdmBaseAttribute
は、MdmPrimaryDimension
のfindOrCreateBaseAttribute
メソッドを使用して作成します。 MdmBaseAttribute
をリレーショナル表またはビューの列にマップします。 属性をビルドしたMdmPrimaryDimension
をビルドすると、Oracle OLAPはMdmBaseAttribute
の値をOLAPビューに格納します。 OLAPビューでMdmBaseAttribute
の列を取得するには、getETAttributeColumn
メソッドを使用します。 このメソッドは、MdmViewColumn
オブジェクトを戻します。
MdmBaseAttribute
オブジェクトの例には、「例4-5」で作成およびマップされた名前属性と、「例4-6」で作成される詳細説明属性があります。 その詳細記述属性のマッピングは、「例4-3」にあります。
通常のOLAP問合せでは、Source
オブジェクトを使用する場合、MemberListMap
オブジェクトを使用してMdmBaseAttribute
をMdmDimensionLevel
オブジェクトにマップするだけです。 OLAPビューに対するSQL問合せの場合、HierarchyLevelMap
オブジェクトを使用して属性をMdmHierarchyLevel
オブジェクトにマップする必要があります。
親トピック: ディメンション属性の表示
2.4.3.2.1 データ型の指定
MdmBaseAttribute
を作成するときに、setSQLDataType
メソッドを使用してSQLデータ型を指定できます。 指定しない場合、MdmBaseAttribute
には、マップ先のソース・データのデータ型が含まれます。 たとえば、短い説明属性のSQLデータ型はVARCHAR2
で、終了日属性のデータ型はDATE
です。
setAllowAutoDataTypeChange
メソッドでtrue
を指定することで、Oracle OLAPでSQLデータ型を自動的に設定できます。 SQLデータ型の自動変更を許可すると、Oracle OLAPはsetSQLDataType
メソッドで指定されたSQLデータ型を無視します。 これは、データ型が異なるレベルに同じ属性をマップする場合や、レベルのデータ型が変更される場合に役立ちます。
親トピック: MdmBaseAttributeクラスの説明
2.4.3.2.2 グループ化属性
MdmBaseAttribute
のsetAttributeGroupName
メソッドを使用すると、属性グループの名前を指定できます。 他の属性に同じグループ名を指定できます。 たとえば、ディメンション・レベルごとに長い説明属性を作成し、各属性にLONG_DESCRIPTIONというグループ名を指定できます。 グループ名を使用して、類似する種類の属性を識別できます。 グループ名は、getAttributeGroupName
メソッドで取得します。
親トピック: MdmBaseAttributeクラスの説明
2.4.3.2.3 索引の作成
属性の索引を作成することで、属性ベースの問合せのパフォーマンスを向上できます。 索引をビルドすると、メンテナンス時間が長くなり、アナリティク・ワークスペースのサイズが大きくなるため、非常に大きなディメンションのビルド時間が長くなる可能性があります。 属性の索引を作成するには、MdmBaseAttribute
のAWAttributeOrganization
のsetCreateAttributeIndex
メソッドでtrue
を指定します。
親トピック: MdmBaseAttributeクラスの説明
2.4.3.2.4 属性の言語の指定
MdmBaseAttribute
のAttributeMap
を作成する場合、属性の言語を指定できます。 たとえば、CHANNEL
という名前のMdmDimensionLevel
のlong description属性の言語としてフランス語を指定するには、MemberListMap.findOrCreateAttributeMap
メソッドをコールして、言語を指定するString
としてMdmBaseAttribute
およびFRENCH
という長い説明を渡すことによって、AttributeMap
を作成します。 次に、AttributeMap
のExpression
としてGLOBAL.CHANNEL_DIM.CHANNEL_DSC_FRENCH
を指定します。 AttributeMap
のsetLanguage
メソッドを使用すると、作成後にAttributeMap
の言語を指定できます。
親トピック: MdmBaseAttributeクラスの説明
2.4.3.2.5 多言語属性の指定
MdmBaseAttribute.setMultiLingual
メソッドを使用すると、複数の言語列を同じ属性にマップできます。 これを行うには、属性のsetMultiLingual
メソッドでtrueを指定します。 次に、言語ごとに個別のAttributeMap
を作成しますが、同じMdmBaseAttribute
を使用します。
データベースで使用されている言語によって、ディメンションのOLAPビューに表示される言語が決まります。 1つのセッションで一度に使用されている言語は1つのみですが、使用中の言語が変更されると、OLAPビューの属性列の言語も変更されます。 データベース・セッションの言語の指定の詳細は、「Oracle Databaseグローバリゼーション・サポート・ガイド」の「グローバリゼーション・サポート環境の設定」を参照してください。
マテリアライズド・ビューの場合は、言語ごとに個別の属性を作成して、英語、フランス語などに長い説明属性が存在するようにしてください。 この動作は、SQLではより一般的であり、複数値列は想定されません。
親トピック: MdmBaseAttributeクラスの説明
2.4.3.2.6 OLAPビューへの階層属性値の移入
SQL問合せの場合は、MdmBaseAttribute.setPopulateLineage
メソッドでtrue
を指定して、ビューの属性の系統を移入する必要があります。 系統の移入は、OLAPビューの属性の列で、Oracle OLAPがディメンション階層の下位レベルの行に、上位レベルでマップされる属性値を移入することを意味します。 属性の系統の移入は、アナリティク・ワークスペース・キューブのマテリアライズド・ビューを作成する場合にも役立ちます。
設定のデフォルトであるsetPopulateLineage(false)
を指定した場合、属性値は、属性がマップされるレベルの階層メンバーの行にのみ表示されます。 他のレベルの階層メンバーの場合、属性値はnull
です。 setPopulateLineage(true)
を指定すると、属性値は、マップされたレベルのメンバーの行、およびマップされたレベルの子孫であるすべてのレベルの階層メンバーに表示されます。
OLAPビューに階層系統を移入すると、ビューの内容がスター・スキーマのリレーショナル表の内容と同様になります。 たとえば、ディメンションのMdmDimensionLevel
ごとに、ディメンションに個別の詳細記述属性を作成できます。 各属性のsetPopulateLineage(true)
メソッドをコールして、これらの属性の系統の移入を指定します。 次に、addAttribute
メソッドを使用してMdmHierarchyLevel
に属性を追加して、階層レベルで属性を表示できるようにします。
ディメンションの階層のOLAPビューには、詳細記述属性ごとに列があります。 これらの列には、マップされた階層レベルのメンバーと、マップされたレベルの子孫であるすべてのレベルの階層メンバーの詳細な説明属性値が含まれます。
たとえば、CreateAndBuildAW
サンプル・クラスには、個々のMdmHierarchyLevel
に追加するMdmBaseAttribute
オブジェクトの系統の移入を指定するコード行があります。 クラスのcreateLineageAttributes
メソッドには次の行が表示されます。
mdmAttr.setPopulateLineage(true);
「例2-2」は、そのコード行がコメント・アウトされた場合の次のSQL問合せの結果を示します。 「例2-3」は、行がクラスに含まれている場合のSQL問合せの結果を示します。 どちらの例も、PRODUCT_PRIMARY階層のOLAPビューの選択された列にある値を示しています。 ビュー名はPRODUCT_AWJ_PRODUCT_PRIMA_VIEWです。 例では、SQL問合せによって返される行のいくつかのみを示しています。
SELECT TOTAL_PRODUCT_SHORT_DESC || '*' || CLASS_SHORT_DESC || '*' || FAMILY_SHORT_DESC || '*' || ITEM_SHORT_DESC FROM PRODUCT_AWJ_PRODUCT_PRIMA_VIEW ORDER BY TOTAL_PRODUCT nulls first, CLASS nulls first, FAMILY nulls first, ITEM nulls first;
例2-2 OLAPビューのsetPopulateLineage(false)後の列の値
この例では、OLAPビューの属性行には、ディメンション・メンバーが属する階層レベルの属性値のみが含まれます。
TOTAL_PRODUCT_SHORT_DESC||'*'||CLASS_SHORT_DESC||'*'||FAMILY_SHORT_DESC||'*'||IT -------------------------------------------------------------------------------- Total Product*** *Hardware** **CD/DVD* ***External 48X CD-ROM ***External - DVD-RW - 8X ***Internal - DVD-RW - 8X ... **Desktop PCs* ***Sentinel Financial ***Sentinel Multimedia ***Sentinel Standard **Portable PCs* ***Envoy Ambassador ***Envoy Executive ***Envoy Standard ...
例2-3 OLAPビューのsetPopulateLineage(true)後の列の値
この例では、OLAPビューの属性行に、ディメンション・メンバーの祖先の属性値が移入されます。 たとえば、TOTAL_PRODUCTは階層の最上位レベルであるため、最初の行にはTotal Productという値のみが含まれます。 値Envoy Standard
を含む行には、TOTAL_PRODUCT、CLASSおよびFAMILYレベルの値もあります。
TOTAL_PRODUCT_SHORT_DESC||'*'||CLASS_SHORT_DESC||'*'||FAMILY_SHORT_DESC||'*'||IT -------------------------------------------------------------------------------- Total Product*** Total Product*Hardware** Total Product*Hardware*CD/DVD* Total Product*Hardware*CD/DVD*External 48X CD-ROM Total Product*Hardware*CD/DVD*External - DVD-RW - 8X Total Product*Hardware*CD/DVD*Internal - DVD-RW - 8X ... Total Product*Hardware*Desktop PCs* Total Product*Hardware*Desktop PCs*Sentinel Financial Total Product*Hardware*Desktop PCs*Sentinel Multimedia Total Product*Hardware*Desktop PCs*Sentinel Standard Total Product*Hardware*Portable PCs* Total Product*Hardware*Portable PCs*Envoy Ambassador Total Product*Hardware*Portable PCs*Envoy Executive Total Product*Hardware*Portable PCs*Envoy Standard ...
親トピック: MdmBaseAttributeクラスの説明
2.4.3.2.7 マテリアライズド・ビューの属性の準備
OLAPメタデータ・オブジェクトのマテリアライズド・ビューを生成するには、MdmDimensionLevel
ごとにMdmBaseAttribute
を作成し、MdmDimensionLevel
の一意キーにマップして、MdmDimensionLevel
に追加する必要があります。 MdmDimensionLevel
には、一意キー属性を追加、取得および削除するためのメソッドがあります。 EnableMVs.java
サンプル・プログラムは、一意のキー属性を作成し、ディメンションのMdmDimensionLevel
オブジェクトに追加します。
Oracle OLAPは、キューブのマテリアライズド・ビューを作成すると、キューブのディメンションの属性の列を作成します。 列の名前には、ディメンションのOLAPビューの属性列の名前が使用されます。 列名が一意であることを確認するために、Oracle OLAPによって名前にデフォルトのプレフィクスが追加されます。 プレフィクスを指定するには、キューブのディメンションに対してMdmDimensionality
オブジェクトのsetETAttrPrefix
メソッドを使用します。
親トピック: MdmBaseAttributeクラスの説明
2.4.3.3 MdmDerivedAttributeクラスの説明
MdmDerivedAttribute
には、Oracle OLAPが必要に応じてその場で計算される値があります。 Oracle OLAPでは、getParentAttribute
によって返される属性やMdmPrimaryDimension
のgetAncestorsAttribute
メソッドなど、複数のMdmDerivedAttribute
オブジェクトが生成されます。
親トピック: ディメンション属性の表示
2.4.4 OLAPビューの使用
アナリティク・ワークスペース内のMdmCube
、MdmPrimaryDimension
およびMdmHierarchy
の各インスタンスに対して、Oracle OLAPは関連するリレーショナル・ビューを自動的に作成します。 Oracle OLAPは、これらのビューを内部的に使用して、アナリティク・ワークスペースによって生成される集計データおよび計算データへのアクセスを提供します。 OLAP Java API問合せでは、ビューが透過的に使用されます。 OLAP Java APIでは、これらのビューはETビュー(埋込み合計)と呼ばれます。 SQLアプリケーションは、スター・スキーマまたはスノーフレーク・スキーマのファクト表およびディメンション表と同様に、これらのビューを直接問い合せることができます。
クライアントOLAP Java APIアプリケーションでは、OLAPビューの名前を取得し、ビュー内の列の名前を取得できます。 アプリケーションはアプリケーションのエンド・ユーザーに名前を表示でき、エンド・ユーザーはSQL SELECT
文で名前を使用してOLAPオブジェクトを問い合せることができます。
次のトピックでは、これらのビューの取得および使用について説明します。
親トピック: データ・ソースへのアクセスの提供
2.4.4.1 キューブ・ビューおよびビュー列名の取得
キューブ・ビューの名前を取得するには、MdmCube.getViewName()
メソッドをコールします。 たとえば、次のコードでは、UNITS_CUBE_AWJという名前のMdmCube
のビューの名前を取得します。 コードのmdmDBSchema
オブジェクトは、GLOBALユーザーのMdmDatabaseSchema
です。
MdmCube mdmUnitsCube = (MdmCube)mdmDBSchema.getTopLevelObject("UNITS_CUBE_AWJ"); String cubeViewName = mdmUnitsCube.getViewName(); println("The name of the view for the " + mdmUnitsCube.getName() + " cube is " + cubeViewName + ".");
コードの出力は次のとおりです。
The name of the view for the UNITS_CUBE_AWJ cube is UNITS_CUBE_AWJ_VIEW.
OLAPビューの名前は、MdmCube.setViewName
メソッドを使用して変更できます。 名前の変更を永続的にするには、Transaction
をコミットする必要があります。
MdmCube
のOLAPビューには、キューブの各メジャー(各導出メジャーを含む)の列があります。 「Oracle OLAPユーザーズ・ガイド」では、導出メジャーは計算済メジャーと呼ばれます。 キューブ・ビューには、キューブの各ディメンションの列もあります。 たとえば、UNITS_CUBE_AWJという名前のMdmCube
の場合、ビューの名前はUNITS_CUBE_AWJ_VIEWです。 次のコードは、ビュー列の名前を取得します。
MdmCube mdmUnitsCube = mdmDBSchema.findOrCreateCube("UNITS_CUBE_AWJ"); List<MdmQueryColumn> mdmQCols = mdmUnitsCube.getQueryColumns(); for (MdmQueryColumn mdmQCol : mdmQCols ) { MdmViewColumn mdmViewCol = (MdmViewColumn) mdmQCol; println(mdmViewCol.getViewColumnName()); }
コードに次の出力が表示されます。
TIME_AWJ PRODUCT_AWJ CUSTOMER_AWJ CHANNEL_AWJ UNITS SALES COST
UNITS
、SALES
およびCOST
列はキューブのメジャー用で、他の4列はキューブのディメンション用です。
親トピック: OLAPビューの使用
2.4.4.2 ディメンションおよび階層ビューおよびビュー列名の取得
ディメンションまたは階層のOLAPビューの名前を取得するには、MdmPrimaryDimension
またはMdmHierarchy
のgetETViewName()
メソッドをコールします。 ビュー内の列の名前を取得するには、メタデータ・オブジェクトの適切なメソッドをコールします。 たとえば、次のコードでは、CHANNEL_AWJディメンションのキー列の名前と、CHANNEL_PRIMARY階層の親列を取得します。
println(mdmChanDim.getETKeyColumn().getViewColumnName()); MdmViewColumn mdmParentCol =(MdmViewColumn) mdmChanHier.getETParentColumn(); println(mdmParentCol.getViewColumnName());
コードに次の出力が表示されます。
DIM_KEY PARENT
OLAPビューの名前は、MdmPrimaryDimension
またはMdmHierarchy
のsetETViewName
メソッドを使用して変更できます。
MdmPrimaryDimension
のOLAPビューには、ディメンション・キー用の列、各ディメンション・レベルの列、およびディメンションに関連付けられた各属性の列があります。 たとえば、CHANNEL_AWJという名前のMdmStandardDimension
の場合、ビューの名前はCHANNEL_AWJ_VIEWです。 SQLコマンドDESCRIBE CHANNEL_AWJ_VIEW
は、次の列の名前を表示します。
DIM_KEY LEVEL_NAME MEMBER_TYPE DIM_ORDER LONG_DESCRIPTION SHORT_DESCRIPTION TOTAL_CHANNEL_LONG_DESC TOTAL_CHANNEL_SHORT_DESC CHANNEL_LONG_DESC CHANNEL_SHORT_DESC
MdmHierarchy
のOLAPビューには、ディメンション・キー用の列と階層メンバーの親用の列があります。 MdmLevelHierarchy
の場合、各階層レベルの列とレベルの深さの列も表示されます。 階層に1つ以上の属性が追加されている場合、ビューには属性ごとに列があります。 たとえば、CHANNEL_PRIMARYという名前のMdmLevelHierarchy
の場合、ビューの名前はCHANNEL_AWJ_CHANNEL_PRIMA_VIEWです。 SQLコマンドDESCRIBE CHANNEL_AWJ_CHANNEL_PRIMA_VIEW
は、次の列の名前を表示します。
DIM_KEY LEVEL_NAME MEMBER_TYPE DIM_ORDER HIER_ORDER LONG_DESCRIPTION SHORT_DESCRIPTION TOTAL_CHANNEL_LONG_DESC TOTAL_CHANNEL_SHORT_DESC CHANNEL_LONG_DESC CHANNEL_SHORT_DESC PARENT DEPTH TOTAL_CHANNEL CHANNEL
親トピック: OLAPビューの使用
2.4.4.3 OLAPビュー列の使用
OLAPビューを使用してSQL問合せを作成する方法のいくつかの例は、「Oracle OLAPユーザーズ・ガイド」を参照してください。 Source
オブジェクトを使用するOLAP Java API問合せでは、これらのビューが自動的に使用されます。
OLAP Java APIアプリケーションのユーザーにOLAPビューへの直接アクセスを提供することもできます。 ユーザーは、ビューを使用するSQL SELECT
文を指定してから、そのSQL問合せをデータベースに送信できます。
「例2-4」は、アナリティク・ワークスペースのキューブおよびディメンションを使用する点を除き、「Oracle OLAPユーザーズ・ガイド」の例4-2 を再現します。 この例では、UNITS_CUBE_AWJ_VIEWからSALESメジャーを選択し、キューブ・ビューから階層ビューにキーを結合してデータを選択します。
この例では、mdmDBSchema
はGLOBALユーザーのMdmDatabaseSchema
です。 例は、BasicCubeViewQuery.java
サンプル・プログラムからの抜粋です。
例2-4 基本キューブ・ビュー問合せ
// In a method... // Get the cube. MdmCube mdmUnitsCube = MdmCube)mdmDBSchema.getTopLevelObject("UNITS_CUBE_AWJ"); // Get the OLAP view for the cube. String cubeViewName = mdmUnitsCube.getViewName(); // Display the name of the OLAP view for the cube. println("The name of the OLAP view for the " + mdmUnitsCube.getName() + " cube is:\n " + cubeViewName); // Get the dimensions and the hierarchies of the dimensions. MdmPrimaryDimension mdmTimeDim = (MdmPrimaryDimension)mdmDBSchema.getTopLevelObject("TIME_AWJ"); MdmLevelHierarchy mdmCalHier = mdmTimeDim.findOrCreateLevelHierarchy("CALENDAR_YEAR"); // Display the name of the OLAP view name for the hierarchy and // display the names of the hierarchy levels. displayViewAndLevelNames(mdmCalHier); MdmPrimaryDimension mdmProdDim = (MdmPrimaryDimension)mdmDBSchema.getTopLevelObject("PRODUCT_AWJ"); MdmLevelHierarchy mdmProdHier = mdmProdDim.findOrCreateLevelHierarchy("PRODUCT_PRIMARY"); displayViewAndLevelNames(mdmProdHier); MdmPrimaryDimension mdmCustDim = (MdmPrimaryDimension)mdmDBSchema.getTopLevelObject("CUSTOMER_AWJ"); MdmLevelHierarchy mdmShipHier = mdmCustDim.findOrCreateLevelHierarchy("SHIPMENTS"); displayViewAndLevelNames(mdmShipHier); MdmPrimaryDimension mdmChanDim = (MdmPrimaryDimension)mdmDBSchema.getTopLevelObject("CHANNEL_AWJ"); MdmLevelHierarchy mdmChanHier = mdmChanDim.findOrCreateLevelHierarchy("CHANNEL_PRIMARY"); displayViewAndLevelNames(mdmChanHier); // Create a SQL SELECT statement using the names of the views and the // levels. // UNITS_CUBE_AWJ_VIEW has a column named SALES for the sales measure. // TIME_AWJ_CALENDAR_YEAR_VIEW has a column named LONG_DESCRIPTION // for the long description attribute. // The hierarchy views have columns that have the same names as the levels. String sql = "SELECT t.long_description time,\n" + " ROUND(f.sales) sales\n" + " FROM TIME_AWJ_CALENDAR_YEAR_VIEW t,\n" + " PRODUCT_AWJ_PRODUCT_PRIMA_VIEW p,\n" + " CUSTOMER_AWJ_SHIPMENTS_VIEW cu,\n" + " CHANNEL_AWJ_CHANNEL_PRIMA_VIEW ch,\n" + " UNITS_CUBE_AWJ_VIEW f\n" + " WHERE t.level_name = 'YEAR'\n" + " AND p.level_name = 'TOTAL_PRODUCT'\n" + " AND cu.level_name = 'TOTAL_CUSTOMER'\n" + " AND ch.level_name = 'TOTAL_CHANNEL'\n" + " AND t.dim_key = f.time_awj\n" + " AND p.dim_key = f.product_awj\n" + " AND cu.dim_key = f.customer_awj\n" + " AND ch.dim_key = f.channel_awj\n" + " ORDER BY t.end_date"; // Display the SQL SELECT statement. println("\nThe SQL SELECT statement is:\n" + sql); // Display the results of the SQL query. String title = "\nThe results of the SQL query are:\n"; executeSQL(sql, title); // ... } // End of method. private void displayViewAndLevelNames(MdmLevelHierarchy mdmLevelHier) { // Get the OLAP view name for the hierarchy. String levelHierViewName = mdmLevelHier.getETViewName(); // Display the name of the OLAP view for the hierarchy. println("\nThe OLAP view for the " + mdmLevelHier.getName() + " hierarchy is:\n " + levelHierViewName); // Display the names of the levels of the hierarchy. displayLevelNames(mdmLevelHier); } private void displayLevelNames(MdmLevelHierarchy mdmLevelHier) { List<MdmHierarchyLevel> mdmHierLevelList = mdmLevelHier.getHierarchyLevels(); println("The names of the levels of the " + mdmLevelHier.getName() + " hierarchy are:"); for (MdmHierarchyLevel mdmHierLevel : mdmHierLevelList) { println(" " + mdmHierLevel.getName()); } } // The executeSQL method is in the BaseExample11g class. protected void executeSQL(String sql, String heading) { try { Statement statement = dp.getConnection().createStatement(); println(heading); ResultSet rs = statement.executeQuery(sql); SQLResultSetPrinter.printResultSet(getCursorPrintWriter(), rs); rs.close(); statement.close(); } catch (SQLException e) { println("Could not execute SQL statement. " + e); } }
この例の出力は次のようになります。
The name of the OLAP view for the UNITS_CUBE_AWJ cube is: UNITS_CUBE_AWJ_VIEW The OLAP view for the CALENDAR_YEAR hierarchy is: TIME_AWJ_CALENDAR_YEAR_VIEW The names of the levels of the CALENDAR_YEAR hierarchy are: TOTAL_TIME YEAR QUARTER MONTH The OLAP view for the PRODUCT_PRIMARY hierarchy is: PRODUCT_AWJ_PRODUCT_PRIMA_VIEW The names of the levels of the PRODUCT_PRIMARY hierarchy are: TOTAL_PRODUCT CLASS FAMILY ITEM The OLAP view for the SHIPMENTS hierarchy is: CUSTOMER_AWJ_SHIPMENTS_VIEW The names of the levels of the SHIPMENTS hierarchy are: TOTAL_CUSTOMER REGION WAREHOUSE SHIP_TO The OLAP view for the CHANNEL_PRIMARY hierarchy is: CHANNEL_AWJ_CHANNEL_PRIMA_VIEW The names of the levels of the CHANNEL_PRIMARY hierarchy are: TOTAL_CHANNEL CHANNEL The SQL SELECT statement is: SELECT t.long_description time, ROUND(f.sales) sales FROM TIME_AWJ_CALENDAR_YEAR_VIEW t, PRODUCT_AWJ_PRODUCT_PRIMA_VIEW p, CUSTOMER_AWJ_SHIPMENTS_VIEW cu, CHANNEL_AWJ_CHANNEL_PRIMA_VIEW ch, UNITS_CUBE_AWJ_VIEW f WHERE t.level_name = 'YEAR' AND p.level_name = 'TOTAL_PRODUCT' AND cu.level_name = 'TOTAL_CUSTOMER' AND ch.level_name = 'TOTAL_CHANNEL' AND t.dim_key = f.time_awj AND p.dim_key = f.product_awj AND cu.dim_key = f.customer_awj AND ch.dim_key = f.channel_awj ORDER BY t.end_date The results of the SQL query are: TIME SALES ---------- ---------------------- 1998 100870877 1999 134109248 2000 124173522 2001 116931722 2002 92515295 2003 130276514 2004 144290686 2005 136986572 2006 140138317 2007 <null>
親トピック: OLAPビューの使用
2.4.4.4 Sourceオブジェクトの使用
「例2-4」は、OLAPビューを使用してSQL文を作成する方法を示しています。 「例2-5」に示すように、OLAP Java API Source
オブジェクトを使用して同じ結果を生成できます。 「例2-5」のコードは、「例2-4」のMdmLevelHierarchy
オブジェクトを使用します。
例2-5 Sourceオブジェクトを使用した基本キューブ問合せ
// Get the SALES measure and the Source for it. MdmBaseMeasure mdmSales = mdmUnitsCube.findOrCreateBaseMeasure("SALES"); NumberSource sales = (NumberSource)mdmSales.getSource(); // Get the Source objects for the PRODUCT_PRIMARY, CHANNEL_PRIMARY // and the SHIPMENTS hierarchies. StringSource prodHier = (StringSource)mdmProdHier.getSource(); StringSource shipHier = (StringSource)mdmShipHier.getSource(); StringSource chanHier = (StringSource)mdmChanHier.getSource(); // Get the YEAR hierarchy level. List<MdmHierarchyLevel> hierLevels = mdmCalHier.getLevels(); MdmHierarchyLevel mdmYearHierLevel = null; for(MdmHierarchyLevel mdmHierLevel : hierLevels) { mdmYearHierLevel = mdmHierLevel; if(mdmYearHierLevel.getName().equals("YEAR")) { break; } } // Get the Source for the YEAR level of the CALENDAR_YEAR hierarchy. Source yearLevel = mdmYearHierLevel.getSource(); // Select single values for the hierarchies except for the time hierarchy. Source prodSel = prodHier.selectValue("PRODUCT_PRIMARY::TOTAL_PRODUCT::TOTAL"); Source custSel = shipHier.selectValue("SHIPMENTS::TOTAL_CUSTOMER::TOTAL"); Source chanSel = chanHier.selectValue("CHANNEL_PRIMARY::TOTAL_CHANNEL::TOTAL"); // Get the long description attribute for the TIME_AWJ dimension. MdmBaseAttribute mdmTimeLDAttr = (MdmBaseAttribute) mdmTimeDim.getValueDescriptionAttribute(); Source timeLDAttr = mdmTimeLDAttr.getSource(); Source yearsWithLDValue = timeLDAttr.join(yearLevel); Source result = sales.joinHidden(prodSel) .joinHidden(custSel) .joinHidden(chanSel) .join(yearsWithLDValue); getContext().commit(); getContext().displayResult(result);
result
Source
のCursor
の値は、次のとおりです。 値を書式設定するためのコードは表示されません。 「例2-4」および「例2-5」の完全なコードについては、BasicCubeViewQuery.java
サンプル・プログラムを参照してください。
Year Sales ---- ------------ 1998 100870876.58 1999 134109248.15 2000 124173521.55 2001 116931722.03 2002 92515295.02 2003 130276513.86 2004 144290685.55 2005 136986571.96 2006 140138317.39 2007 NA
親トピック: OLAPビューの使用