この章では、OLAPメタデータ・オブジェクトを表すOracle OLAP Java APIのクラスについて説明します。この章では、次の項目について説明します。
第1章では、OLAPの次元データ・モデル、およびOLAPオブジェクトを表すOLAP Java APIの一部のクラスについて簡単に説明しました。この章では、メタデータ・オブジェクトを表すOLAP Java APIのクラス、およびそれらのクラスをアプリケーションで使用する方法について説明します。
OLAP Java APIでは、MDM(多次元メタデータ)と呼ばれるメタデータ・モデルが提供されます。このモデルを実装するクラスは、oracle.olapi.metadata.mdmパッケージにあります。
アプリケーションでこのパッケージ内のクラスを使用すると、既存のメタデータ・オブジェクトを検出したり、新しいメタデータ・オブジェクトを作成することができます。メタデータ・オブジェクトにアクセスするには、Oracle Databaseインスタンスへの接続に指定されているユーザーが必要なシステム権限を持っている必要があります。アプリケーションでメタデータ・オブジェクトを作成するには、Oracle Databaseインスタンス内のデータ構造がOLAPの要件を満たしている必要があります。これらのシステム権限および要件については、『Oracle OLAPユーザーズ・ガイド』を参照してください。
oracle.olapi.metadata.mdm内の一部のクラスは、OLAPメタデータ・オブジェクトに直接対応しています。次の表に、これらの対応の一部を示します。
| Oracle OLAPメタデータ・オブジェクト | MDMメタデータ・オブジェクト |
|---|---|
| キューブ | MdmCube |
| メジャー | MdmBaseMeasure |
| ディメンション | MdmTimeDimensionまたはMdmStandardDimension |
| 階層 | MdmLevelHierarchyまたはMdmValueHierarchy |
| レベル | MdmDimensionLevelおよびMdmHierarchyLevel |
| 属性 | MdmAttribute |
| メジャー・フォルダ | MdmOrganizationalSchema |
oracle.olapi.metadata.mdmパッケージ内のほとんどのクラスは、MdmObjectのサブクラスです。この章の以降の項では、これらのクラスの一部について説明します。
MdmSchemaオブジェクトは、MdmCube、MdmMeasure、MdmDimension、およびその他のMdmSchemaオブジェクトのコンテナです。MdmSchemaには、それに含まれるすべてのMdmMeasure、MdmPrimaryDimensionおよびMdmSchemaオブジェクトを取得するためのメソッドが存在します。この項では、MdmSchemaクラスのサブクラスであるMdmRootSchema、MdmDatabaseSchemaおよびMdmOrganizationalSchemaについて説明します。
OLAP Java APIを介してアクセス可能なデータは、MdmRootSchemaのインスタンスである最上位のMdmSchemaの下に配置されます。MdmRootSchemaの下にはMdmDatabaseSchemaオブジェクトが配置されます。
アプリケーションは、MdmRootSchemaから、データ・ストアにあるMdmCube、MdmDatabaseSchema、MdmDimensionおよびMdmMeasureオブジェクトのすべてを格納するListオブジェクトを取得できます。MdmRootSchemaは、データ・ストア内のすべてのMdmMeasureオブジェクトをメンバーに持つMdmMeasureDimensionを取得するためのメソッドも持ちます。
MdmRootSchemaは、Oracle DatabaseユーザーごとにMdmDatabaseSchemaオブジェクトを1つ持ちます。MdmDatabaseSchemaは、ユーザーが所有するリレーショナル・スキーマに対応します。MdmDatabaseSchemaの名前はユーザーの名前と同じです。
MdmRootSchemaには、使用可能なすべてのMdmDatabaseSchemaオブジェクトのリストを取得するためのメソッドが存在します。名前によってMdmDatabaseSchemaを取得するためのメソッドも存在します。
MdmDatabaseSchemaは、データベース・ユーザーに関連付けられた最上位のOLAPメタデータ・オブジェクトを所有します。最上位のオブジェクトには、MdmCubeおよびMdmDimensionオブジェクトが含まれます。MdmDatabaseSchemaは、MdmCube、MdmMeasureおよびMdmDimensionオブジェクトをグループ化する1つ以上のサブスキーマを持つことができます。これらのサブスキーマはMdmOrganizationalSchemaのインスタンスです。
MdmDatabaseSchemaは、名前によって最上位オブジェクトを検出する(存在しない場合はそのオブジェクトを作成する)ためのメソッドを持ちます。オブジェクトの作成方法については、第3章を参照してください。
MdmOrganizationalSchemaは、関連する項目を含むフォルダまたはディレクトリに相当します。このクラスは、Oracleデータベースのリレーショナル・スキーマには対応しません。かわりに、このクラスはOracle OLAPメジャー・フォルダに対応します。メジャー・フォルダは複数のリレーショナル・スキーマのデータを格納できます。
MdmOrganizationalSchemaは、MdmCube、MdmMeasureおよびMdmDimensionオブジェクトを格納できます。また、ネストしたサブスキーマとしてその他のMdmOrganizationalSchemaオブジェクトを持つこともできます。
MdmDatabaseSchemaクラスは、所有するすべてのMdmOrganizationalSchemaオブジェクトのリストを取得するためのメソッドを持ちます。また、名前によってMdmOrganizationalSchemaを検出する(存在しない場合はオブジェクトを作成する)ためのメソッドも持ちます。
MdmSourceオブジェクトは、アプリケーションで利用可能なデータを表すメタデータ・オブジェクトです。MdmSourceのサブクラスには、MdmDimension、MdmDimensionedObjectおよびMdmTableが含まれます。
MdmSourceのgetSourceメソッドを使用すると、アプリケーションで問合せの作成に使用可能なSourceオブジェクトを取得できます。次のコードでは、mdmProductDimという名前のMdmStandardDimensionのSourceが取得されます。
Source productDim = mdmProductDim.getSource();
MdmSourceのgetSourceメソッドによって戻されたSourceを、プライマリSourceといいます。アプリケーションは、データを選択、計算または操作する際に、このプライマリSourceから新しいSourceオブジェクトを導出します。アプリケーションは、作成する問合せを表すSourceを導出する際、そのSourceのCursorを作成します。このCursorがデータを取得します。
SourceおよびCursorオブジェクトの処理の詳細は、第5章「Sourceオブジェクトの理解」および第8章「CursorクラスおよびCursorの概念」を参照してください。
MdmDimensionは、データセットの編成が可能なメンバーのリストの一般的な概念を表すMdmSourceの抽象サブクラスです。たとえば、月の期間における製品項目の価格である一連の数値がある場合、単位価格データは、時間および製品値のディメンションによってディメンション化されたMdmMeasureによって表されます。時間ディメンションには月の値が含まれ、製品ディメンションには項目の値が含まれます。月および項目の値は、単位価格データセットの特定の値を識別するための索引として機能します。
MdmDimensionは、1つ以上のMdmAttributeオブジェクトを持つことができます。MdmAttributeは、MdmDimensionの各メンバーの値を、そのメンバー値のある特性を表している値にマップします。MdmDimensionのMdmAttributeオブジェクトを取得するには、getAttributesメソッドをコールするか、getHierarchyAttributeメソッドやgetParentAttributeメソッドなど、特定の属性を戻すメソッドをコールします。
MdmPrimaryDimensionは、MdmDimensionの抽象サブクラスです。MdmPrimaryDimensionクラスの具象サブクラスは、様々なタイプのデータを表します。MdmPrimaryDimensionの具象サブクラスを次に示します。
MdmMeasureDimension。データ・ストア内のすべてのMdmMeasureオブジェクトをディメンション・メンバーの値として持ちます。データ・ストアが持つMdmMeasureDimensionは1つのみです。MdmMeasureDimensionを取得するには、MdmRootSchemaのgetMeasureDimensionメソッドをコールします。データ・ストアのメジャーは、MdmMeasureDimensionのgetMeasuresメソッドをコールすることによって取得できます。
MdmStandardDimension。特別な特性はありませんが、通常、製品、顧客、流通チャネルなどのディメンションを表します。
MdmTimeDimension。期間をメンバーの値として持ちます。各期間には最終日および期間が含まれます。MdmTimeDimensionは、この情報を記録する属性を取得するためのメソッドを持ちます。
MdmPrimaryDimensionは、ディメンション・メンバーをレベルに編成する1つ以上のコンポーネントMdmDimensionLevelを持ちます。また、レベルを階層に編成する1つ以上のMdmHierarchyオブジェクトも持ちます。MdmPrimaryDimensionは、コンポーネントMdmHierarchyオブジェクトのすべてのメンバーを持ち、各MdmHierarchyオブジェクトはその階層内のメンバーのみを持ちます。
MdmDatabaseSchemaまたはMdmOrganizationalSchemaに属するすべてのMdmPrimaryDimensionオブジェクトを取得するには、当該オブジェクトのgetDimensionsメソッドをコールします。MdmDatabaseSchemaは、名前によってMdmTimeDimensionまたはMdmStandardDimensionを検出する(存在しない場合はそのオブジェクトを作成する)ためのメソッドを持ちます。
MdmPrimaryDimensionは通常、ディメンション・メンバーを階層的な親子関係に編成します。これらの階層関係は、抽象クラスMdmSubDimensionのサブクラスによって実装されます。MdmSubDimensionのサブクラスは、MdmDimensionLevel、MdmHierarchyおよびMdmHierarchyLevelです。
MdmDimensionLevelは、同じ階層レベルにあるディメンション・メンバーのセットを表します。MdmHierarchyオブジェクトはディメンション・レベルを1つの階層に編成します。MdmDimensionLevelは、MdmHierarchyLevelオブジェクトによってMdmHierarchyに関連付けられます。
MdmPrimaryDimensionは、所有するすべてのMdmDimensionLevelオブジェクトのリストを取得するためのメソッドを持ちます。また、名前によってMdmDimensionLevelを検出する(存在しない場合はそのオブジェクトを作成する)ためのメソッドも持ちます。
MdmHierarchyは、MdmSubDimensionの抽象サブクラスです。MdmHierarchyは、MdmDimensionLevelオブジェクトのメンバーを階層構造に編成します。MdmPrimaryDimensionは複数の階層を持つことができます。たとえば、MdmTimeDimensionディメンションは、暦年の期間で編成された階層と、会計年度の期間で編成された階層の2つを持つ場合があります。一方の階層のMdmHierarchyLevelオブジェクトによって、暦年期間のMdmDimensionLevelオブジェクトがその階層に関連付けられます。もう一方の階層のMdmHierarchyLevelオブジェクトによって、会計年度期間のMdmDimensionLevelオブジェクトがその階層に関連付けられます。これらの各階層の最下位レベルのMdmHierarchyLevelによって、同じMdmDimensionLevelがそれぞれの階層に関連付けられます。
MdmHierarchyの親子関係は、親MdmAttributeに記録されます。これは、MdmHierarchyのgetParentAttributeメソッドをコールして取得できます。祖先子孫関係は、祖先MdmAttributeに指定されます。これは、getAncestorsAttributeメソッドをコールして取得できます。
MdmPrimaryDimensionは、所有するすべてのMdmHierarchyオブジェクトのリストを取得するためのメソッドを持ちます。また、名前によってMdmLevelHierarchyまたはMdmValueHierarchyを検出する(存在しない場合はそのオブジェクトを作成する)ためのメソッドも持ちます。
MdmLevelHierarchyは、MdmHierarchyのサブクラスです。MdmLevelHierarchyは、異なるレベルのメンバーの値間で定義される親子関係を持ちます。MdmLevelHierarchyの異なるレベルはMdmHierarchyLevelオブジェクトによって表されます。MdmLevelHierarchyは、最大で31個のコンポーネントMdmHierarchyLevelオブジェクトを持つことができます。MdmLevelHierarchyは、ツリーのような構造を持ちます。階層の最下位レベルのメンバーがリーフで、上位レベルのメンバーがノードです。ノードは子を持ちますが、リーフは子を持ちません。
MdmLevelHierarchyは、階層のすべてのメンバーを持ち、各コンポーネントMdmHierarchyLevelオブジェクトは、このオブジェクトによって表されるレベルに存在するメンバーのみを持ちます。最上位のレベルのメンバーを除く各メンバーは親を持つことができ、最下位のレベルのメンバーを除く各メンバーは1つ以上の子を持つことができます。あるMdmHierarchyLevelのメンバーの親と子は、他のMdmHierarchyLevelオブジェクトにあります。MdmLevelHierarchyは、メンバーの非階層リストを表すこともできます。この場合、MdmLevelHierarchyは、1つのMdmHierarchyLevelを持ち、どちらのオブジェクトも同じメンバーを持ちます。MdmLevelHierarchyのレベルは、getHierarchyLevelsメソッドをコールして取得します。
MdmLevelHierarchyは、所有するすべてのMdmHierarchyLevelオブジェクトのリストを取得するためのメソッドを持ちます。また、名前によってMdmHierarchyLevelを検出する(存在しない場合はそのオブジェクトを作成する)ためのメソッドも持ちます。
MdmValueHierarchyは、MdmHierarchyのもう1つのサブクラスです。MdmValueHierarchyのメンバーは、MdmDimensionLevelにはありません。このメンバーは通常、リレーショナル埋込み合計(ET)ビューの列に格納されています。ビューの名前を取得するには、MdmValueHierarchyのgetETViewNameメソッドを使用します。
MdmValueHierarchyは、メンバーの値によってメンバーの親子関係を定義します。値階層の例として、企業の従業員管理構造があります。これはレベルを持たない親子関係で表すことができます。
MdmDimensionedObjectは、1つ以上のディメンションのメンバーによって値が指定されるオブジェクトを表すMdmSourceの抽象サブクラスです。MdmDimensionedObjectはMdmDimensionalityオブジェクトを持ち、このオブジェクトによってMdmPrimaryDimensionオブジェクトが関連付けられます。MdmDimensionedObjectのサブクラスは、MdmCube、MdmMeasureおよびMdmAttributeです。
MdmCubeはMdmMeasureオブジェクトのコンテナです。これらのオブジェクトは、同じMdmPrimaryDimensionオブジェクトのセットによってディメンション化されます。アプリケーションでは、MdmCubeのfindOrCreateBaseMeasureおよびfindOrCreateDerivedMeasureメソッドを使用してMdmBaseMeasureまたはMdmDerivedMeasureオブジェクトを作成します。
MdmCubeは、関連付けられたCubeMapおよびCubeOrganizationを1つずつ持ちます。CubeMapは、キューブのメジャーおよびディメンションをデータソースにマップするMeasureMapおよびCubeDimensionalityオブジェクトを持ちます。CubeOrganizationは、キューブをアナリティック・ワークスペースにデプロイしたり、リレーショナル・データベース・オブジェクトとしてデプロイします。MdmCubeは、キューブのメジャーをOracle OLAPで集計する方法を指定するConsistentSolveSpecificationオブジェクトも持ちます。
MdmMeasureは、1つ以上のMdmDimensionオブジェクトによって編成されるデータセットを表すオブジェクトの抽象クラスです。データの構造は、多次元配列の構造に類似しています。配列内の特定のセルを識別するための索引を提供する配列のディメンションと同様に、MdmMeasureを編成するMdmDimensionオブジェクトは、MdmMeasureの要素の特定の値を識別するための索引を提供します。
たとえば、ある期間およびある販売チャネルである顧客に販売された製品単位数を記録するデータを持つMdmMeasureがあるとします。メジャーのデータは、製品、時間、顧客およびチャネルのディメンションで編成されていると想定します(チャネルはカタログ販売やインターネットなどの販売経路を表します)。この場合、製品ディメンション、時間ディメンション、顧客ディメンションおよびチャネル・ディメンションによって編成構造が提供され、データは4次元配列を持つと考えることができます。これらの4つのディメンションの値は、配列内の特定の各セルを識別するための索引です。各セルには、販売台数の1つのデータ値が格納されます。配列の中の値を識別するために、各ディメンションに値を指定する必要があります。
通常、MdmMeasureの値は数値ですが、メジャーは他のデータ型の値を持つこともできます。MdmMeasureの具象サブクラスはMdmBaseMeasureおよびMdmDerivedMeasureです。
MdmBaseMeasureは通常、ファクト表の列からリーフレベルのデータを取得します。ノードレベルのデータは、Oracle OLAPによって計算されます。MdmDerivedMeasureは、Oracle OLAPがMdmBaseMeasureオブジェクトの値に対して実行する数学計算またはデータ変換の結果値を持ちます。
MdmMeasureに含まれる要素のセットは、MdmMeasureのMdmDimensionオブジェクトの構造によって決定されます。これは、MdmMeasureの各要素が、MdmDimensionオブジェクトのメンバーを一意に組み合せて識別されることを意味します。このディメンション・メンバーの組合せをタプルと呼びます。
MdmMeasureのMdmDimensionオブジェクトは、MdmStandardDimensionまたはMdmTimeDimensionオブジェクトです。通常、これらのオブジェクトは1つ以上の階層構造を持ちます。これらのMdmPrimaryDimensionオブジェクトには、そのコンポーネントMdmHierarchyオブジェクトのすべてのメンバーが含まれます。この構造が存在するため、MdmMeasureの要素の値は次のいずれかになります。
MdmMeasureの基準となる計算、ビュー、またはファクト表の列の値。これらの値は、MdmHierarchyのリーフ・レベルのメンバーの値を組み合せて識別されるMdmMeasureの要素に属します。
Oracle OLAPが提供した集計値。これらの値は、MdmHierarchyのノード・レベルの少なくとも1つのメンバーの値で識別されるMdmMeasureの要素に属します。
カスタム・ディメンション・メンバーのMdmModelによって割り当てられる値。
たとえば、mdmProdDimという名前の製品のMdmStandardDimensionおよびmdmTimeDimという名前のMdmTimeDimensionによってディメンション化された、mdmUnitCostという名前のMdmMeasureが存在すると想定します。各mdmTimeDimおよびmdmProdDimオブジェクトは、それぞれが表すディメンションのリーフ・メンバーおよびノード・メンバーのすべてを持ちます。
2つのメンバー(mdmTimeDimおよびmdmProdDimから1つずつ)を一意に組み合せてmdmUnitCostの各要素が識別され、可能なすべての組合せを使用してmdmUnitCostの要素セット全体が指定されます。
mdmUnitCostの要素には、リーフ・メンバー(特定の製品品目や特定の月など)を組み合せて識別されるものが存在します。また、ノード・メンバー(特定の製品ファミリや特定の四半期など)を組み合せて識別されるmdmUnitCostの要素もあります。さらに、リーフ・メンバーとノード・メンバーを組み合せて識別されるmdmUnitCostの要素もあります。リーフ・メンバーのみによって識別されるmdmUnitCostの要素の値は、データベース・ファクト表の列(またはファクト表計算)から直接提供されます。これらの値は、最下位レベルのデータを表します。ただし、1つ以上のノード・メンバーによって識別される要素の場合は、Oracle OLAPが値を提供します。これらの上位レベルの値は、集計またはロールアップされたデータを表します。
したがって、MdmMeasureによって表されるデータは、データ・ストアからのファクト表データと、Oracle OLAPが分析操作用に提供する集計データとを組み合せたものです。このデータには、MdmModelによって指定されたようにOracle OLAPによって割り当てられた値が含まれる場合があります。
MdmAttributeは、MdmDimensionedObjectの抽象サブクラスです。MdmAttributeは、MdmDimensionのメンバーの特定の特性を表します。MdmAttributeによって、MdmDimensionのメンバーに値が関連付けられます。
たとえば、mdmCustDimは、顧客ディメンションのMdmPrimaryDimensionです。このMdmPrimaryDimensionは、配送元と宛先の値に基づくレベルを持つ階層を持ちます。mdmCustDimのgetShortValueDescriptionAttributeメソッドによって戻されるMdmAttributeが、簡単な説明をディメンションの各メンバーに関連付けます。MdmAttributeの要素は、Europe、ItalyまたはComputer Services AthensなどのString値を持ちます。
MdmAttributeの要素には、String値(Italyなど)、数値(45など)またはオブジェクト(MdmHierarchyLevelオブジェクトなど)を指定できます。
MdmMeasureと同様に、MdmAttributeにはそれに関連付けられたMdmDimensionで編成された要素が含まれます。ただし、MdmDimensionのすべてのメンバーに対してMdmAttributeの値があるとは限りません。たとえば、連絡窓口の担当者の名前を記録するMdmAttributeが、mdmCustDimディメンションのSHIPMENTS階層のSHIP_TOおよびWAREHOUSEレベルにしか値を持たない場合があります。これは、連絡窓口情報が上位のREGIONおよびTOTAL_CUSTOMERレベルに適用されないためです。MdmAttributeがMdmDimensionのメンバーに適用されない場合、そのメンバーに対するMdmAttributeの要素の値はNULLになります。
MdmAttributeオブジェクトは、1対1ではなく、1対多のマッピングを提供できます。そのため、MdmDimensionのメンバーがMdmAttributeの要素セット全体にマップされる場合があります。たとえば、MdmHierarchyの祖先属性として機能するMdmAttributeは、MdmHierarchyの各メンバーを、その祖先であるMdmHierarchyメンバーのセットにマップします。
次の表は、製品のMdmPrimaryDimensionの階層メンバーを表すSourceオブジェクトのCursorの値を示したものです。この表には、MdmPrimaryDimensionによってディメンション化された2つのMdmAttributeオブジェクトのSourceオブジェクトの値も示されています。一方の属性は、ディメンションの簡単な説明の属性です。ディメンションの各メンバーは、関連する簡単な説明を持ちます。もう1つは、階層の最下位レベルである一部のメンバーの値にパッケージを関連付ける属性です。パッケージMdmAttributeの値は、集計レベルのTOTAL_PRODUCT、CLASSおよびFAMILYと、割り当てられていないITEMレベルの値についてはNULLとなっています。表では、NULL値はNAとして示されています。表の1列目の値には、一意のディメンション・メンバー値のPRODUCT_PRIMARY階層のコンポーネントは含まれていません。
| 階層メンバー | 関連する簡単な説明 | 関連するパッケージ |
|---|---|---|
TOTAL_PRODUCT::TOTAL |
Total Product |
NA |
CLASS::HRD |
Hardware |
NA |
FAMILY::DISK |
CD/DVD |
NA |
ITEM::EXT CD ROM |
External 48X CD-ROM |
NA |
ITEM::EXT DVD |
External - DVD-RW - 8X |
Executive |
ITEM::INT 8X DVD |
Internal - DVD-RW - 8X |
NA |
ITEM::INT CD ROM |
Internal - DVD-RW - 8X |
Laptop Value Pack |
ITEM::INT CD USB |
Internal 48X CD-ROM USB |
NA |
ITEM::INT RW DVD |
Internal - DVD-RW - 6X |
Multimedia |
| ... | ... | ... |
すべてのMdmSourceオブジェクトには、次の2つの基本特性があります。
データ型
タイプ
MdmDimensionCalculationModelオブジェクトもデータ型とタイプを持ちます。MdmDimensionedObjectModelオブジェクトはタイプを持ちますが、データ型は持ちません。
データ型は、コンピュータ言語およびデータベース・テクノロジでは一般的な概念です。一般に、データはINTEGER、BOOLEAN、STRINGなどの型に分類されます。
OLAP Java APIは、FundamentalMetadataObjectクラスおよびFundamentalMetadataProviderクラスを介してデータ型の概念を実装します。OLAP Java APIが認識するすべてのデータ型は、FundamentalMetadataObjectによって表されます。このオブジェクトを取得するには、FundamentalMetadataProviderのメソッドをコールします。
次の表に、最も一般的なOLAP Java APIデータ型を示します。この表には、データ型ごとに、そのデータ型を表すFundamentalMetadataObjectの説明およびそのオブジェクトを戻すFundamentalMetadataProviderのメソッドの名前を示しています。OLAP Java APIデータ型は、java.langデータ型クラスと区別するため、等幅フォントではなく通常のフォントで示します。
これらの一般的なデータ型の他に、OLAP Java APIには(一般的なデータ型のグループを表す)2つの汎用データ型、および値が存在しないことを表す2つのデータ型が含まれています。次の表に、これらの追加データ型を示します。
MdmMeasureなどのMDMメタデータ・オブジェクトが任意のデータ型である場合、各要素がそのデータ型に準拠することを意味します。データ型が数値データ型である場合、要素は特定のデータ型(Double、Float、IntegerまたはShort)のみでなく、汎用データ型であるNumberにも準拠します。すべてのMDMメタデータ・オブジェクトの要素は、IntegerやStringなどのより特殊なデータ型のみでなく、Valueデータ型にも準拠します。
オブジェクトに数値データ型を表す要素と非数値データ型を表す要素が混在している場合、そのデータ型はValueのみになります。そのオブジェクトは、Valueより特殊なデータ型を持ちません。
データ型が関連するMDMメタデータ・オブジェクトは、MdmMeasure、MdmLevelHierarchy、MdmHierarchyLevelなどのMdmSourceオブジェクトおよびMdmDimensionCalculationModelオブジェクトです。MdmMeasureの一般的なデータ型は数値データ型のいずれかで、MdmLevelHierarchyまたはMdmHierarchyLevelのデータ型は常にStringです。
MdmPrimaryDimensionは、それぞれ異なるデータ型を持つ一連のMdmDimensionCalculationModelオブジェクトを持ちます。MdmDimensionCalculationModelがAssignmentを持つ場合、Oracle OLAPは、MdmDimensionCalculationModelと同じデータ型を持つメジャーに指定値を割り当てます。たとえば、MdmStandardDimensionのgetNumberCalcModelメソッドによって戻されたMdmDimensionCalculationModelのデータ型は、Numberデータ型のFundamentalMetadataObjectです。このMdmDimensionCalculationModelによって指定されるAssignmentは、Numberデータ型を持ち、MdmStandardDimensionによってディメンション化されるメジャーにのみ適用されます。
MdmSourceまたはMdmDimensionCalculationModelのデータ型を確認するには、そのgetDataTypeメソッドをコールします。このメソッドは、FundamentalMetadataObjectを戻します。
戻されたFundamentalMetadataObjectによって表されるOLAP Java APIデータ型を確認するには、それを各OLAP Java APIデータ型のFundamentalMetadataObjectと比較します。すなわち、それをFundamentalMetadataProviderの各データ型メソッドの戻り値と比較します。
次のメソッドの例では、MdmSourceのデータ型を示すStringが戻されます。このコードでは、DataProviderのメソッドをコールしてFundamentalMetadataProviderを取得している点に注目してください。DataProviderの取得方法については、第3章「メタデータの検出」を参照してください。
例2-1 MdmSourceのデータ型の取得
public String getDataType(DataProvider dp, MdmSource mdmSource)
{
String theDataType = null;
FundamentalMetadataProvider fmp =
dp.getFundamentalMetadataProvider();
if (fmp.getBooleanDataType() == mdmSource.getDataType())
theDataType = "Boolean";
else if (fmp.getDateDataType() == mdmSource.getDataType())
theDataType = "Date";
else if (fmp.getDoubleDataType() == mdmSource.getDataType())
theDataType = "Double";
else if (fmp.getFloatDataType() == mdmSource.getDataType())
theDataType = "Float";
else if (fmp.getIntegerDataType() == mdmSource.getDataType())
theDataType = "Integer";
else if (fmp.getShortDataType() == mdmSource.getDataType())
theDataType = "Short";
else if (fmp.getStringDataType() == mdmSource.getDataType())
theDataType = "String";
else if (fmp.getNumberDataType() == mdmSource.getDataType())
theDataType = "Number";
else if (fmp.getValueDataType() == mdmSource.getDataType())
theDataType = "Value";
return theDataType;
}
MdmSourceなどのMDMメタデータ・オブジェクトは、要素の集合です。MDMメタデータ・オブジェクトのタイプ(データ型とは異なる)とは、そのメタデータ・オブジェクトが要素を導出する別のメタデータ・オブジェクトのことを示します。つまり、1つのメタデータ・オブジェクトの要素は、そのタイプのオブジェクトの要素のサブセットに対応します。メタデータ・オブジェクトには、そのタイプの要素と一致しない要素は存在できません。
次に示す、OLAP Java APIデータ型がStringであるmdmCustDimというMdmPrimaryDimensionの例について考えてみます。このmdmCustDimディメンションは、mdmShipmentsというMdmLevelHierarchyオブジェクトである階層を持ち、この階層は、MdmHierarchyLevelオブジェクトであるレベルを持ちます。MdmLevelHierarchyおよびMdmHierarchyLevelオブジェクトは、MdmPrimaryDimensionのメンバーのサブセットを表します。次に、階層およびレベルをそれぞれが属するMdmPrimaryDimensionの下にインデントして示します。
mdmCustDim
mdmShipments
mdmTotalCust
mdmRegion
mdmWarehouse
mdmShipTo
階層構造が存在するため、たとえば、mdmWarehouseはメンバーをmdmShipmentsのメンバーから導出します。この場合、mdmWarehouseのメンバーのセットはmdmShipmentsのメンバーのサブセットに対応し、mdmWarehouseのタイプはmdmShipmentsになります。
同様に、mdmShipmentsは、mdmCustDimのコンポーネント階層です。そのため、mdmShipmentsは、そのタイプであるmdmCustDimからメンバーを導出しています。
ただし、mdmCustDimは他のどのようなオブジェクトのコンポーネントでもありません。これはディメンション全体を表します。この場合は、String値のセット全体が、mdmCustDimがメンバーを導出する要素の候補となり得ます。そのため、mdmCustDimのタイプは、OLAP Java API Stringデータ型を表すFundamentalMetadataObjectになります。mdmCustDimの場合、タイプとデータ型は同じです。
最も一般的なMdmSourceオブジェクトの一般的なタイプを次に示します。
MdmHierarchyLevelのタイプは、それが属するMdmLevelHierarchyです。
MdmHierarchyのタイプは、それが属するMdmPrimaryDimensionです。
MdmPrimaryDimensionのタイプは、MdmPrimaryDimensionのOLAP Java APIデータ型を表すFundamentalMetadataObjectです。通常、これはStringデータ型です。
MdmMeasureのタイプは、MdmMeasureのOLAP Java APIデータ型を表すFundamentalMetadataObjectです。通常、これはOLAP Java API数値データ型のいずれかです。
MdmModelもタイプを持ちます。このタイプは、MdmModelが割り当てる値をOracle OLAPが導出するSourceです。たとえば、製品ディメンション値の簡単な説明属性に関するMdmAttributeのMdmDimensionedObjectModelのタイプは、この属性の値がStringオブジェクトであるため、Stringデータ型のFundamentalMetadataObjectのSourceとなります。
MdmSourceのタイプを検出するには、MdmSourceのgetTypeメソッドをコールします。このメソッドは、MdmSourceオブジェクトのタイプであるオブジェクトを戻します。
例2-2では、MdmHierarchyLevelのインスタンスであるmdmWarehouseのタイプを取得します。また、レベルが属する階層である、getTypeメソッドで戻されるオブジェクトの識別子も取得および表示します。
例2-2 MdmSourceのタイプの取得
MetadataObject mdmWarehouseType = mdmWarehouse.getType(); println(mdmWarehouseType.getID());
この例によって、次のように表示されます。
GLOBAL.CUSTOMER_AWJ.SHIPMENTS
oracle.olapi.metadata.mdmパッケージ内のその他のクラスには、MdmDescriptionTypeおよびMdmModelがあります。
MdmDescriptionTypeは、MdmDescriptionの説明のタイプを表します。MdmDescriptionTypeクラスの静的メソッドは、名前、複数名、説明、詳細な説明など、標準的な説明のタイプを戻します。アプリケーションでは、新しいMdmDescriptionTypeオブジェクトを作成することによって、その他の説明タイプを作成できます。
MdmObjectのfindOrCreateDescriptionメソッドをコールする際、アプリケーションでMdmDescriptionTypeを指定します。このメソッドがMdmDescriptionを戻します。
MdmModelクラスは、MdmSourceオブジェクトのModelインタフェースを実装します。ModelはSourceと密接な関係にあるため、Modelインタフェースはoracle.olapi.data.sourceパッケージに含まれます。Modelインタフェースの詳細は、第5章「Sourceオブジェクトの理解」の「ModelオブジェクトとSourceオブジェクト」の項を参照してください。
MdmModelクラスはOLAP Java APIの高度な機能です。アプリケーションがMdmMemberオブジェクトを作成すると、Oracle OLAPによって自動的にMdmMemberのMdmModelが作成されるか、既存のMdmModelオブジェクトに情報が追加されます。
MdmDimensionedObjectまたはMdmPrimaryDimensionのMdmModelを取得し、そのMdmModelを使用して、ディメンション・メンバーの値の計算、および、ディメンションによってディメンション化される属性またはメジャーのSourceに対するその値の割当てを指定できます。
MdmModelのサブクラスは、MdmDimensionCalculationModelおよびMdmDimensionedObjectModelです。MdmDimensionedObjectオブジェクトは、MdmDimensionedObjectのSourceについて、0個以上の値の割当てを表す関連MdmDimensionedObjectModelを持ちます。MdmDimensionedObjectのMdmDimensionedObjectModelを取得するには、MdmDimensionedObjectのgetModelメソッドをコールします。MdmDimensionedObjectModelの具象サブクラスは、MdmAttributeModelおよびMdmMeasureModelです。
MdmDimensionCalculationModelは、特定のデータ型のメジャーの値を割り当てます。MdmPrimaryDimensionオブジェクトは、OLAP Java APIのBOOLEAN、DATE、NUMBERおよびSTRINGデータ型のMdmDimensionCalculationModelオブジェクトを持ちます。MdmPrimaryDimensionのサブクラスMdmMeasureDimensionも、Valueデータ型のMdmDimensionCalculationModelを持ちます。特定のデータ型のMdmDimensionCalculationModelを取得するには、MdmPrimaryDimensionのメソッド(getStringCalcModelメソッドなど)をコールします。MdmPrimaryDimensionのgetModelメソッドをコールすると、NULLが戻されます。
MdmTimeMemberクラス、MdmStandardMemberクラス、およびMdmSubDimensionのサブクラスは、関連MdmModelオブジェクトを持ちません。MdmTimeMember、MdmStandardMember、またはMdmSubDimensionのgetModelメソッドをコールすると、NULLが戻されます。