この章では、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
が戻されます。