機械翻訳について

5 Sourceオブジェクトの理解

この章では、問合せの指定に使用するSourceオブジェクトについて説明します。 Sourceでは、データ・ストアから取得するデータ、およびデータに対して実行するアナリティクまたはその他の操作を指定します。 「Sourceメソッドを使用した問合せの作成」は、Sourceオブジェクトの使用例を示しています。 「動的問合せの作成」では、Templateオブジェクトを使用して変更可能な問合せを作成する方法について説明します。

この章では、次の項目について説明します。

5.1 Sourceオブジェクトの概要

Sourceオブジェクトを使用して、データベースから取得するデータを指定する問合せを作成します。 問合せとして、SourceはSQLのSELECT文に似ています。

問合せを作成するには、通常、oracle.olapi.metadata.mdmパッケージのクラスを使用して、OLAPメタデータ・オブジェクトを表すMdmSourceオブジェクトを取得します。 MdmSourceオブジェクトから、Sourceオブジェクトを取得できます。 DataProviderのメソッドを使用して、他の種類のSourceオブジェクトを作成することもできます。 その後、これらのSourceオブジェクトを使用して問合せを作成できます。 問合せで指定されたデータを取得するには、SourceCursorを作成します。

Sourceのメソッドを使用すると、ディメンション・メンバー、属性値またはメジャー値の選択を指定できます。 問合せの要素の数学的計算、比較、順序付け、追加または削除など、Sourceの要素に対する操作を指定することもできます。

Sourceクラスには、いくつかの基本メソッドと、1つ以上の基本メソッドを使用する多くのショートカット・メソッドがあります。 最も複雑な基本メソッドは、join(Source joined, Source comparison, int comparisonRule, boolean visible)メソッドとrecursiveJoin(Source joined, Source compariso4n, Source parent, int comparisonRule, boolean parentsFirst, boolean parentsRestrictedToBase, int maxIterations, boolean visible)メソッドです。 joinメソッドとrecursiveJoinメソッドのその他の多くのシグネチャは、基本メソッドの特定の操作のためのショートカットです。

この章では、joinメソッドに関する情報は、特に記載がないかぎり、recursiveJoinメソッドにも同様に適用されます。 joinメソッドを使用すると、Sourceと、その入力と一致するSourceへの入力を結合することで、あるSourceの要素を別のSourceの要素に関連付けることができます。 たとえば、ディメンションを入力として持つメジャーのデータを取得するために必要なディメンション・メンバーを指定するには、joinメソッドを使用してディメンション・メンバーをメジャーに関連付けます。 joinメソッドおよびSourceの入力については、ソースの入力と出力を参照してください。

Sourceには、型やデータ型などの特定の特性があり、1つ以上の入力または出力を持つことができます。 この章ではこれらの概念について説明します。 また、様々な種類のSourceオブジェクトとその取得方法、joinメソッドおよびその他のSourceメソッド、およびこれらのメソッドを使用して問合せを指定する方法についても説明します。

5.2 Sourceオブジェクトの種類

データの指定および分析の実行に使用するSourceオブジェクトの種類と、それらの取得方法は次のとおりです:

  • プライマリSourceオブジェクト。MdmDimensionMdmDimensionedObjectなどのMdmSourceオブジェクトのgetSourceメソッドによって返されます。 プライマリSourceは、MdmSourceが表すデータへのアクセスを提供します。 通常、プライマリSourceオブジェクトの取得は、問合せの作成の最初のステップです。 次に、通常、プライマリSourceオブジェクトから要素を選択して、導出されたSourceオブジェクトを生成します。

  • 導出されたSourceオブジェクト。これは、Sourceオブジェクトのメソッドの一部をコールして取得します。 joinなどのメソッドは、メソッドをコールするSourceから導出された新しいSourceを返します。 MdmDimensionのプライマリSourceで指定された単純な値リスト以外、データ・ストアに対するすべての問合せは、Sourceオブジェクトを導出します。

  • 基本的なSourceオブジェクト。FundamentalMetadataObjectgetSourceメソッドによって返されます。 これらのSourceオブジェクトは、OLAP Java APIデータ型を表します。

  • DataProvidercreateConstantSourcecreateListSourceまたはcreateRangeSourceメソッドによって返されるSourceオブジェクトのリストまたは範囲。 通常、この種類のSourcejoinメソッドのjoinedまたはcomparisonパラメータとして使用します。

  • Sourceオブジェクトを空、nullまたは無効化します。 空および無効のSourceオブジェクトは、DataProvidergetEmptySourceまたはgetVoidSourceメソッドによって返され、NULLのSourceオブジェクトは、SourcenullSourceメソッドによって返されます。 空のSourceには要素がありません。 void Sourceおよびnull Sourceには、それぞれnullの値を持つ1つの要素があります。 void Sourceとnull Sourceの違いは、void Sourceの型がValueデータ型のFundamentalMetadataObjectで、null Sourceの型がSourceで、nullSourceメソッドがそれを返したことです。 通常、joinメソッドのjoinedまたはcomparisonパラメータとして、これらの種類のSourceオブジェクトを使用します。

  • 動的Sourceオブジェクト。DynamicDefinitiongetSourceメソッドによって返されます。 動的Sourceは通常、導出されたSourceです。 これは、Templateによって生成され、エンド・ユーザーとの対話後に改訂できる動的問合せの作成に使用されます。

  • パラメータ化されたSourceオブジェクト。ParametercreateSourceメソッドによって返されます。 リストまたは範囲Sourceと同様に、パラメータ化されたSourcejoinメソッドのパラメータとして使用します。 ただし、リストまたは範囲Sourceとは異なり、Parameterが表す値を結合操作後に変更して、導出されたSourceが表す選択を変更できます。 導出されたSourceCursorを作成し、問合せの結果を取得できます。 その後、Parameterの値を変更でき、導出されたSourceに対して新しいCursorを作成せずに、その同じCursorを使用して変更した問合せの結果を取得できます。

Sourceクラスには次のサブクラスがあります:

  • BooleanSource

  • DateSource

  • NumberSource

  • StringSource

これらのサブクラスには様々なデータ型があり、これらのデータ型を必要とするSourceメソッドを実装します。 各サブクラスは、BooleanSourceimpliesメソッドやStringSourceindexOfメソッドなど、それに固有のメソッドも実装します。

5.3 Sourceオブジェクトの特性

Sourceにはデータ型、型および識別子(ID)があり、空のSourceを除くすべてのSourceオブジェクトには1つ以上の要素があります。 次のトピックでは、これらの概念について説明します。

一部のSourceオブジェクトには、1つ以上の入力または出力があります。 これらの複雑な概念については、ソースの入力と出力を参照してください。

5.3.1 ソースの要素と値

空のSourceを除くすべてのSourceオブジェクトには、1つ以上の要素があります。 Sourceの要素には、NULLにできる値があります。 たとえば、CHANNEL_AWJディメンションのMdmPrimaryDimensionオブジェクトのSourceには4つの要素があります。 これらの要素の値は、次に示すディメンションのメンバーの一意の値です。

CHANNEL_PRIMARY::CHANNEL::TOTAL
CHANNEL_PRIMARY::CHANNEL::CAT
CHANNEL_PRIMARY::CHANNEL::DIR
CHANNEL_PRIMARY::CHANNEL::INT

5.3.2 Sourceのデータ型

FundamentalMetadataObjectクラスは、MdmSourceの要素の値のデータ型を表します。 Sourceのデータ型は、基本的なSourceで表されます。 たとえば、BooleanSourceには、Java boolean値を持つ要素があります。 BooleanSourceのデータ型は、OLAP Java APIのブール値を表す基本的なSourceです。

Sourceのデータ型を表す基本的なSourceを取得するには、SourcegetDataTypeメソッドをコールします。 FundamentalMetadataObjectgetSourceメソッドをコールして、基本的なSourceを取得することもできます。

プライマリSourceのデータ型は、関連付けられたメタデータ・オブジェクトのSQLデータ型に関連しています。 たとえば、SQLデータ型がVARCHAR2(30)MdmBaseAttributeは、OLAP Java API文字列値を表す基本的なSourceのデータ型を持つSourceを生成します。 次のコードでは、その基本的なSourceを取得します。

fmp.getStringDataType().getSource(); // fmp is the FundamentalMetadataProvider.

データ型に対するSourceの一般的な使用方法は、結合または再帰的結合操作の比較Sourceです。 そのため、そのデータ型のすべての値のセットを表します。 getDataTypeメソッドの使用例については、「例6-3」「例6-5」および「例6-11」を参照してください。

5.3.3 Sourceのタイプ

データ型とともに、Sourceには型があり、これはSourceの要素が描画されるSourceです。 Sourceのタイプによって、joinメソッドがSourceと別のSourceの入力を照合できるかどうかが決まります。 タイプを持たない唯一のSourceは、OLAP Java API値データ型の基本Sourceであり、これはすべての値のセットを表し、他のすべてのSourceオブジェクトが最終的に子孫になります。 SourcegetTypeメソッドをコールすると、型を検索できます。

基本的なSourceのタイプは、Sourceのデータ型です。 リストまたは範囲Sourceの型は、リストまたは範囲Sourceの要素の値のデータ型です。

プライマリSourceのタイプは、次のいずれかです:

  • プライマリSourceの要素の値のデータ型を表す基本的なSource たとえば、一般的な数値MdmMeasuregetSourceメソッドによって返されるSourceの型は、すべてのOLAP Java API数値値のセットを表す基本的なSourceです。

  • プライマリSourceを含むオブジェクトのSource たとえば、MdmLevelHierarchygetSourceメソッドによって戻されるSourceの型は、階層を含むMdmPrimaryDimensionSourceです。

導出されたSourceのタイプは次のいずれかです:

  • 「塩基」 Sourceは、メソッドが導出されたSourceを戻したSourceです。 alias, distinct, extract, join, recursiveJoinメソッド、valueメソッドまたはそれらのショートカットのいずれかによって返されるSourceは、型としてベースSourceを持ちます。

  • 基本的なSource positioncountなどのメソッドによって返されるSourceの型は、OLAP Java API Integerデータ型の基本的なSourceです。 比較を行うメソッドによって戻されるSourceのタイプ(eqleなど)は、ブール・データ型の基本的なSourceです。 NumberSourceメソッドtotalaverageなど、集計関数を実行するメソッドによって戻されるSourceのタイプは、関数を表す基本的なSourceです。

ベースSourceを型として持つ導出Sourceは、導出元のSourceのサブタイプです。 基本的なSourceを型とする導出ソースは、基本的なSourceのサブタイプです。 isSubtypeOfメソッドを使用して、Sourceが別のSourceのサブタイプであるかどうかを判断できます。

たとえば、「例5-1」では、myListオブジェクトはリストSourceです。 この例では、myListを使用して、prodHierから値(PRODUCT_AWJディメンションのMdmPrimaryDimensionMdmLevelHierarchySource)を選択します。 この例では、dpDataProviderです。

例5-1 isSubtypeOfメソッドの使用

Source myList = dp.createListSource(new String[] {
                                     "PRODUCT_PRIMARY::FAMILY::LTPC",
                                     "PRODUCT_PRIMARY::FAMILY::DTPC",
                                     "PRODUCT_PRIMARY::FAMILY::ACC",
                                     "PRODUCT_PRIMARY::FAMILY::MON"});
Source prodSel = prodHier.selectValues(myList);
if (prodSel.isSubtypeOf(prodHier))
  println("prodSel is a subtype of prodHier.");
else
  println("prodSel is not a subtype of prodHier.");

prodSelprodHierのサブタイプであるため、if文の条件はtrueであり、この例では次のように表示されます:

prodSel is a subtype of prodHier.

myListのタイプは、基本的な文字列Sourceです。 prodHierのタイプは、PRODUCT_AWJディメンションのSourceです。 prodSelの要素はprodHierの要素から導出されるため、prodSelの型はprodHierです。

Sourceのスーパータイプは、基本値データ型のSourceまでのSourceなどの型の型です。 たとえば、基本的な値Sourceは、基本的な文字列Sourceのタイプです。これは、prodSelのタイプであるprodHierのタイプです。 基本的な値Sourceと基本的な文字列Sourceは、どちらもprodSelのスーパータイプです。 prodSel Sourceは、prodHierのサブタイプで、基本的な文字列Sourceおよび基本的な値Sourceのサブタイプです。

5.3.4 SourceのSource識別子およびSourceDefinition

SourceにはIDがあります。IDは、データベースへの現在の接続中に一意に識別するStringです。 識別を取得するには、SourcegetIDメソッドをコールします。 たとえば、次のコードは、PRODUCT_AWJディメンションのMdmPrimaryDimensionSourceの識別を取得し、値を表示します。

println("The Source ID of prodDim is " + prodDim.getID());

このコードによって、次のように表示されます。

The Source ID of prodDim is Hidden..GLOBAL.PRODUCT_AWJ

Sourceには、Sourceに関する情報を記録するSourceDefinitionオブジェクトもあります。 Oracle OLAPでは、この情報を内部的に使用します。 たとえば、導出されたSourceSourceDefinitionには、Sourceを生成した結合操作のパラメータ(ベースSource、結合されたSource、比較Source、比較ルール、visibleパラメータの値など)が記録されます。

DynamicDefinitionクラスは、SourceDefinitionのサブクラスです。 OLAP Java APIクライアント・アプリケーションは、TemplateDynamicDefinitionを使用して、Templateの動的Sourceを取得します。

5.4 Sourceの入力と出力

Sourceの入力は、Sourceの要素が別のSourceの要素と関係があることを示します。 Sourceの出力には、出力を含むSourceの値が導出される要素が含まれます。 1つ以上の出力を含むSourceは、配列の配列のようなものです。

Sourceは入力を持つことができ、出力を持つことができます。 Sourceの入力および出力は、他のSourceオブジェクトです。

ベースSourceの入力と出力は、そのベースSourceから派生したSourceの要素に影響します。 Sourceを導出するには、ベースSourceのメソッドを使用します。 導出されたSourceは、メソッドのメソッドおよびパラメータに応じて、出力または入力、あるいはその両方を持つか、どちらも持たない可能性があります。

valueメソッドやpositionメソッドなどの一部のSourceメソッドは、入力を含むSourceを返します。 joinおよびrecursiveJoinメソッドは、出力を含むSourceを返すことができます。 結合操作に、入力を含むSourceと、その入力と一致するSourceが含まれる場合、入力は、導出されたSourceの要素を生成するフィルタとして機能します。

次のトピックでは、joinメソッド、出力と入力の概念、および入力の一致について説明します。 出力を含むSourceオブジェクト、入力を含むSourceオブジェクト、および入力とSourceに一致する結合操作を生成する例を示します。

5.4.1 joinメソッドの説明

joinメソッドを使用して、あるSourceの要素を別のSourceの要素と結合し、導出されたSourceを生成します。 導出されたSourceは、入力または出力を持つことができます。 導出されたSourceの要素、および入力または出力の有無は、joinメソッドに渡すパラメータの値によって異なります。

joinメソッドの完全なシグネチャは次のとおりです。

Source join(Source joined,
            Source comparison,
            int comparisonRule,
            boolean visible)

joinメソッドをコールするSourceは、結合操作のベースです。 メソッドのパラメータは次のとおりです。

5.4.1.1 結合されたパラメータの説明

joinedパラメータはSourceオブジェクトです。 joinメソッドは、ベースSourceの要素と結合されたSourceの要素を、他のjoinパラメータの値によって決定される結果と結合します。 結合されたSourceの値がベースSourceの値に関連していない場合、つまり、結合されたSourceもベースSourceももう一方の入力と一致しない場合、結合はベースおよび結合されたSourceオブジェクトの要素のデカルト積を生成します。 ソースの出力のトピックの例は、この種の結合操作を示しています。

結合されたSourceの値がベースSourceの値に関連している場合、つまり、結合されたSourceまたはベースSourceのいずれかが他方の入力である場合、導出されたSourceの要素は入力の一致の結果になります。 ソースと入力の照合の例では、このような結合操作を示します。

5.4.1.2 比較パラメータの説明

comparisonパラメータは、別のSourceオブジェクトです。 結合操作では、比較Sourceの要素の値と結合されたSourceの値が比較されます。 結合オブジェクトと比較オブジェクトで同じ値が結合操作に参加するか、comparisonRuleパラメータの値に応じて参加から削除されます。

5.4.1.3 comparisonRuleパラメータの説明

comparisonRuleパラメータの値は、結合されたSourceのどの値が結合操作に参加するかを指定します。 comparisonRule値によって、関連する値のソート順序も決まります。 比較ルールは、Sourceクラスの静的定数フィールドの1つです。 基本的な比較ルールは次のとおりです。

  • COMPARISON_RULE_SELECT。これは、結合されたSourceの要素(比較Sourceにも含まれる)のみが結合操作に参加することを指定します。

  • COMPARISON_RULE_REMOVE。これは、比較Sourceに含まれない結合Sourceの要素のみが結合操作に参加することを指定します。

その他の比較ルールはすべて、結果の値を様々な方法でソートする選択操作です。 これらの規則は次の通りです。

  • COMPARISON_RULE_ASCENDING

  • COMPARISON_RULE_ASCENDING_NULLS_FIRST

  • COMPARISON_RULE_ASCENDING_NULLS_LAST

  • COMPARISON_RULE_DESCENDING

  • COMPARISON_RULE_DESCENDING_NULLS_FIRST

  • COMPARISON_RULE_DESCENDING_NULLS_LAST

5.4.1.4 表示可能パラメータの説明

visibleパラメータは、結合されたSourceが結合操作によって導出されたSourceの出力として表示されるかどうかを指定するboolean値です。 visibleパラメータの値がtrueの場合、導出されたSourceには、結合されたSourceから抽出された要素を含む出力が含まれます。 値がfalseの場合、導出されたSourceには結合されたSourceの出力がありません。

5.4.2 Sourceの出力

joinメソッドは、メソッドのパラメータで指定されたベースSourceの要素の値を持つ導出Sourceを返します。 これらの値は、導出されたSourceのベース値です。

joinメソッドのvisibleパラメータの値がtrueの場合、結合されたSourceは導出されたSourceの出力になります。 導出されたSourceの要素には、結合操作の他のパラメータで指定される出力の値とベース値が含まれます。

導出されたSourceは、ゼロから多数の出力を持つことができます。 出力であるSource自体に出力を含めることができます。 Sourceの出力を取得するには、SourceオブジェクトのListを戻すgetOutputsメソッドをコールします。

次のトピックの例にはすべて、1つ以上の出力を持つSourceオブジェクトを生成する単純な結合操作があります。 結合操作内のどのSourceオブジェクトにも入力がないため、結合操作によって生成される導出されたSourceオブジェクトの値は、基底のデカルト積および結合されたSourceオブジェクトです。

入力を持つSourceと、その入力と一致するSourceを含む結合操作によって、非常に異なる結果が発生します。 入力および入力の一致を含むSourceオブジェクトの例は、次のトピックを参照してください。

5.4.2.1 出力を使用したソースの生成

例5-2 出力でソースを生成する単純な結合

この例では、joinメソッドの最も単純なシグネチャを使用して、1つの出力を持つSourceを生成します。 この例では、3つの要素(A、BおよびC)を持つリストSourcelettersを作成します。 また、3つの要素(Stephen、LeoおよびMolly)を持つリストSourcenamesも作成されます。

Source letters = dp.createListSource(new String[] {"A", "B", "C"});
Source names = dp.createListSource(new String[] {"Stephen", "Leo", "Molly"});
Source lettersWithNames = letters.join(names);

// Oracle OLAP translates this shortcut signature of the join method into the
// following full signature, where dp is the DataProvider for the session.
// Source letters.join(names,
//                     dp.getEmptySource(),
//                     Source.COMPARISON_RULE_REMOVE,
//                     true);

letters.join(names)操作は、ベースSourcelettersおよび結合されたSourcenamesの要素を結合します。 比較Sourceには要素がないため、結合操作では、導出されたSourceの生成時に結合されたSourceにある要素は削除されません。 (比較Sourceは、例に示す完全なjoinシグネチャのdp.getEmptySource()パラメータによって返される空のSourceです。) 結果として導出されたSourcelettersWithNamesは、ベースlettersおよび結合されたnamesの要素のデカルト積です。 lettersnamesの両方に3つの要素があるため、lettersWithNamesの要素数は9です。

letters.join(names)visibleパラメータはtrueであるため、導出されたSourceには出力があります。 結合されたSourceからelementsが削除されなかったため、導出されたSourceには、結合されたSourceのすべての要素の値が含まれます。

SourceCursorの構造は、Sourceと同じです。 lettersWithNames SourceCursorには、導出されたSourceのベース値にValueCursor、出力値にValueCursorがあります。 次の表に、ValueCursorオブジェクトの値を示します。 表には、ValueCursorオブジェクトに含まれていない見出しが含まれています。

Output Values     Base Values
   Stephen             A
   Stephen             B
   Stephen             C
   Leo                 A
   Leo                 B
   Leo                 C
   Molly               A
   Molly               B
   Molly               C
5.4.2.2 COMPARISON_RULE_SELECTの使用

例5-3 結合されたソースの要素を選択する単純な結合

この例では、値と比較ルールCOMPARISON_RULE_SELECTを持つ比較Sourceの使用方法を示します。 この例では、「例5-2」letterおよびnames Sourceオブジェクトを使用し、someNames Sourceを追加します。 比較SourceとしてsomeNamesを使用します。 結合操作から導出されたSourceの出力には、結合されたSourceおよび比較Sourceの両方にある名前のみが含まれます。

Source someNames = dp.createListSource(new String[] {"Stephen", "Molly"});
Source lettersAndSelectedNames = 
  letters.join(names, someNames, Source.COMPARISON_RULE_SELECT, true);

lettersAndSelectedNames SourceCursorには、Sourceで指定された値があります。 次の表に、Cursor値を示し、ヘッダーが追加されています。

Output Values     Base Values
   Stephen             A
   Stephen             B
   Stephen             C
   Molly               A
   Molly               B
   Molly               C
5.4.2.3 COMPARISON_RULE_REMOVEの使用

例5-4 結合されたソースの要素を削除する単純な結合

この例では、値と比較ルールCOMPARISON_RULE_REMOVEを持つ比較Sourceの使用方法を示します。 この比較ルールは、結合操作への参加から、結合オブジェクトおよび比較Sourceオブジェクトで同じ値を削除します。 したがって、導出されたSourceの出力には、結合されたSourceからの名前のみが含まれ、比較Sourceには含まれません。

例には、「例5-3」と同じベース、結合および比較のSourceオブジェクトがあります。

Source lettersAndNamesWithoutRemovedNames =
  letters.join(names,
               someNames,
               Source.COMPARISON_RULE_REMOVE, 
               true);

lettersAndNamesWithoutRemovedNames SourceCursorには、Sourceで指定された値があります。 次の表に、値を示し、見出しが追加されています。

Output Values     Base Values
   Leo                 A
   Leo                 B
   Leo                 C
5.4.2.4 2つの出力を含むソースの生成

例5-5 2 つの出力を含むソースを生成する単純な結合

出力を含むSourceSourceを結合し、visible parametertrueの場合、結合操作により、結合されたSourceが追加出力としてSourceが生成されます。 この例に示すように、追加の出力が最初の出力になります。

この例では、「例5-3」Sourceオブジェクトを使用して、2つの色の名前を含む別のリストSourcecolorsを作成します。 この例では、colors SourcelettersWithSelectedNames Sourceに結合して、lettersWithSelectedNamesAndColors Sourceを生成します。

lettersWithSelectedNames Sourceには、出力としてnamesがあります。 lettersWithSelectedNamesAndColors Sourceには、出力としてcolorsnamesの両方があります。 最初の出力はcolorsで、2番目の出力はnamesです。

Source colors = dp.createListSource(new String[] {"Green", "Maroon"});

Source lettersWithSelectedNames = 
  letters.join(names,
               someNames,
               Source.COMPARISON_RULE_SELECT,
               true);
Source lettersWithSelectedNamesAndColors =
  lettersWithSelectedNames.join(colors);

lettersWithSelectedNamesAndColors SourceCursorには、次の表に示す値があります。 表に見出しが追加されています。

Output 1 Values     Output 2 Values     Base Values
      Green            Stephen               A
      Green            Stephen               B
      Green            Stephen               C
      Green            Molly                 A
      Green            Molly                 B
      Green            Molly                 C
      Maroon           Stephen               A
      Maroon           Stephen               B
      Maroon           Stephen               C
      Maroon           Molly                 A
      Maroon           Molly                 B
      Maroon           Molly                 C
5.4.2.5 出力の非表示

例5-6 出力を非表示にする単純な結合

joinメソッドのvisibleパラメータがfalseの場合、結合されたSourceは結合操作に参加しますが、結合によって導出されたSourceの出力としては表示されません。 この例では、joinHiddenショートカット・メソッドを使用して、「例5-5」lettersWithSelectedNamesオブジェクトとcolors Sourceオブジェクトを結合します。 この例では、joinHiddenショートカットの完全なjoinシグネチャをコメントに含めます。

Source lettersWithSelectedNamesAndHiddenColors =
  lettersWithSelectedNames.joinHidden(colors);

// The full signature of the joinHidden shortcut method is
// Source result = base.join(joined,
//                           dp.getEmptySource(),
//                           Source.COMPARISON_RULE_REMOVE,
//                           false);
// So if Source base = lettersWithSelectedNames and
// Source joined = colors, then the result Source is the same as the 
// lettersWithSelectedNamesAndHiddenColors Source.

lettersWithSelectedNamesAndHiddenColors SourceCursorには、次の表に示す値があります。 表に見出しが追加されています。

colors Sourceの値が出力値として表示されない場合でも、導出されたlettersWithSelectedNamesAndHiddenColors Sourceには12個の要素があります。 導出されたSourceには、非表示のcolors Sourceの値ごとに、lettersWithSelectedNames Sourceの6つの値のセットが1つあります。

この例では、次の出力が表示されます。

Output Values     Base Values
   Stephen             A
   Stephen             B
   Stephen             C
   Molly               A
   Molly               B
   Molly               C
   Stephen             A
   Stephen             B
   Stephen             C
   Molly               A
   Molly               B
   Molly               C

5.4.3 Sourceの入力

ソースの出力トピックの例では、すべて、無関係なベースと結合されたSourceオブジェクトのデカルト積である要素を持つ導出されたSourceオブジェクトが生成されます。 このような操作は有用ですが、Sourceオブジェクトのより強力な側面として、あるSourceの要素を別のSourceに関連付ける機能があります。 このような関係が存在する場合は、関連する要素間の操作の結果である他のSourceオブジェクトを導出できます。 たとえば、別のSourceの選択した要素のみを含むSourceを導出できます。 要素間のこの関係は、Sourceの入力によって表されます。

入力を含むSourceは、データの不完全な指定です。 入力は、結合操作でデータ指定を完了するために必要な要素を持つことができるSourceのタイプを表します。 Cursorを使用してデータを取得する前に、入力を、指定を完了する要素を含むSourceと照合する必要があります。

joinまたはrecursiveJoinメソッドを使用して、入力をSourceと照合します。 一致は、ベースSourceと結合されたSourceの間で発生します。

入力の一致はフィルタとして機能するため、結合操作によって導出されたSourceには、結合されたSourceの要素の要素と値が関連している基本Sourceの要素のみが含まれます。 Sourceと入力の照合に関連するルールについては、ソースと入力の照合を参照してください。 このトピックには、入力の一致の結果である、導出されたSourceオブジェクトを生成する例があります。

Sourceには、0から多数の入力を指定できます。 Sourceのすべての入力を取得するには、getInputsメソッドをコールします。

一部のプライマリSourceオブジェクトには入力があります。 Sourceクラスのいくつかのメソッドを使用して、入力を持つSourceを導出できます。

5.4.3.1 入力のあるプライマリSourceオブジェクト

MdmDimensionedObjectサブクラスMdmAttributeおよびMdmMeasureのプライマリSourceオブジェクトには、入力があります。 MdmAttributeのプライマリSourceには1つの入力があります。 MdmMeasureのプライマリSourceには、1つ以上の入力があります。

MdmAttributeまたはMdmMeasureの入力は、属性またはメジャーをディメンション化するMdmPrimaryDimensionオブジェクトのSourceオブジェクトです。 属性またはメジャーの値を取得するには、属性またはメジャーを、関連するディメンション・メンバーを含むSourceと結合する必要があります。 結合操作では、属性またはメジャーの入力と、ディメンション・メンバーを含むSourceが一致します。 「例5-7」は、属性の入力とその属性のディメンションと一致します。 「例5-8」は、メジャーの入力とそのメジャーのディメンションを照合します。

5.4.3.2 入力を使用したソースの導出

一部のSourceメソッドは、入力を持つSourceを常に返します。 extractpositionまたはvalueメソッドによって返されるSourceは、入力としてベースSourceを持ちます。 これらのメソッドを使用して、別のSourceの要素から要素を導出またはフィルタするSourceを生成できます。

valueメソッドは、ベースSourceの要素を持ち、ベースSourceを入力として持つSourceを返します。 通常、valueメソッドによって戻されたSourceを、joinメソッドのベースまたは結合されたSourceとして使用するか、または比較Sourceとして使用します。 この章および「Sourceメソッドを使用した問合せの作成」のいくつかの例では、valueメソッドを使用します。

positionメソッドは、ベースSourceの各要素の位置を持ち、ベースSourceを入力として持つSourceを返します。 positionメソッドの使用例は、「例6-4」を参照してください。

extractメソッドは、結合するSourceオブジェクトの要素がSourceオブジェクトを値として持つ場合に使用します。 extractメソッドの使用例は、「例5-12」「例6-8」「例6-13」および「例6-14」を参照してください。

5.4.3.3 入力のタイプ

positionまたはvalueメソッドによって導出されたSourceの入力、およびMdmDimensionedObjectに固有の入力は、通常の入力です。 通常の入力は、Sourceの要素と、入力と一致するSourceの要素への入力を関連付けます。 getRegularInputsメソッドをコールして、通常の入力を取得できます。

extractメソッドによって返されるSourceの入力は、抽出入力です。 抽出入力を取得するには、getExtractionInputsメソッドをコールします。

5.4.4 ソースと入力の照合

結合操作では、Sourceと入力の照合は、ベースSourceと結合されたSourceの間でのみ行われます。 Sourceは、次の条件のいずれかがtrueの場合に入力と一致します。

  1. Sourceは、入力と同じオブジェクトであるか、入力のサブタイプです。

  2. Sourceの出力は、入力と同じオブジェクトであるか、出力は入力のサブタイプです。

結合操作では、前述のリストに示した順序で条件が検索されます。 Sourceの出力のリストを再帰的に検索し、出力の出力も含めて、入力と一致するものを検索します。 検索は、最初に一致するSourceで終了します。 入力と照合できるSourceは1つのみです。

入力を含むSourceが、入力と一致するSourceに結合される場合、joinメソッドによって返される導出されたSourceには、メソッドのパラメータによって指定された要素に関連する基底の要素が含まれます。 導出されたSourceには入力がありません。

Sourceと入力を照合しても、ベースSourceまたは結合されたSourceの出力には影響しません。 ベースSourceに、結合されたSourceの入力と一致する出力がある場合、結果のSourceには入力は含まれませんが、出力は含まれます。 結合操作のベースSourceまたは結合されたSourceに入力が操作で一致しない場合、一致しない入力は結果のSourceの入力になります。

joinメソッドの比較Sourceは、入力照合には関与しません。 比較Sourceに入力がある場合、その入力は一致せず、joinメソッドによって返されるSourceは同じ入力を持ちます。

次の各項の例では、Sourceと入力の照合を示します。

5.4.4.1 MdmAttributeのソースの入力の一致

「例5-7」は、MdmBaseAttributeSourceMdmPrimaryDimensionSourceへの結合を示しています。 この例では、CHANNEL_AWJディメンションのMdmPrimaryDimensionからローカル値属性を取得します。 属性locValAttrSourceは、入力としてMdmPrimaryDimensionSourceを持ちます。

この例では、locValAttrは結合操作のベースSourceで、chanDimは結合されたSourceです。 chanDimはCHANNEL_AWJディメンションのMdmPrimaryDimensionSourceのインスタンスであるため、chanDimlocValAttrの入力と一致します。 結合の結果はdimMembersWithLocalValueで、出力としてchanDimがあり、入力はありません。

locValAttr Sourceには4つの要素があります。これは、CHANNEL_AWJディメンションの4つのメンバーそれぞれが異なるローカル値を持つためです。 結合操作dimMembersWithLocalValueによって導出されたSourceには、4つの要素があります。 各要素の値は、ディメンション・メンバーおよび関連する属性値です。 ディメンション・メンバーは出力の値で、属性値はベースの値です。

「例5-7」は、ベースSourceの入力と結合されたSourceとの照合を示します。 この例では、mdmDBSchemaはGLOBALスキーマのMdmDatabaseSchemaです。

dimMembersWithLocalValue SourceCursorには、次の表に示す値があります。 出力値は、結合されたSourcechanDimから導出された一意のディメンション・メンバー値です。 ベース値は、ベースSourcelocValAttrから導出されます。 表に見出しが追加されています。

           Output Values                 Base Values
CHANNEL_PRIMARY::TOTAL_CHANNEL::TOTAL       TOTAL
CHANNEL_PRIMARY::CHANNEL::CAT               CAT
CHANNEL_PRIMARY::CHANNEL::DIR               DIR
CHANNEL_PRIMARY::CHANNEL::INT               INT

例5-7 ディメンション・メンバーの属性の取得

MdmStandardDimension mdmChanDim =
  mdmDBSchema.findOrCreateStandardDimension("CHANNEL_AWJ");
Source chanDim = mdmChanDim.getSource();
Source locValAttr = mdmChanDim.getLocalValueAttribute().getSource();
Source dimMembersWithLocalValue = locValAttr.join(chanDim);
5.4.4.2 メジャーの入力の照合

「例5-8」は、メジャーからの値の取得を示します。 この例では、UNIT_PRICEメジャーを含むMdmCubeを取得し、そのキューブからメジャーのMdmBaseMeasureを取得します。 このキューブおよびキューブのメジャーは、PRODUCT_AWJディメンションおよびTIME_AWJディメンションによってディメンション化されます。 この例では、これらのディメンションのMdmPrimaryDimensionオブジェクトを取得し、それらのメタデータ・オブジェクトのSourceオブジェクトを取得します。

メジャーunitPriceSourceは、2つのMdmPrimaryDimensionオブジェクトのSourceオブジェクトを入力として持ちます。 この例では、メジャーのSourceをディメンションのSourceオブジェクトと結合します。 結合操作は、メジャーの入力とディメンションのSourceオブジェクトを照合します。

この例では、最初にPRODUCT_AWJディメンションのSourceをメジャーのSourceに結合します。 そのunitPrice.join(prodDim)操作は、unitPriceからベース値を持ち、出力としてprodDimを持つSourceを導出します。 また、入力としてTIME_AWJディメンションのSourceもあります。 次の結合操作は、unitPrice.join(prodDim)によって導出されたSourceを、TIME_AWJディメンションのSourceであるtimeDimと結合します。 その結合操作は、unitPrice.join(prodDim)によって導出されたSourceの入力とtimeDimと一致します。

2番目の結合操作によって導出されるSourceは、pricesByProductAndTimeです。 Sourceには入力がなく、PRODUCT_AWJおよびTIME_AWJディメンションのSourceオブジェクトが出力として含まれます。 pricesByProductAndTimeCursorには、各製品の値ごとの価格が含まれます。

この例では、最後にpricesByProductAndTimecountメソッドをコールします。 このメソッドは、pricesByProductAndTime Sourceの要素数を含むNumberSource numPricesByProductAndTimeを返します。 numPricesByProductAndTime SourceCursorには、製品およびタイム・タプルのメジャー値の数である値4998が含まれます。

特定の製品および時間のメジャー値のみを含むSourceを生成するには、メジャーのSourceを、必要なディメンション値を指定するSourceオブジェクトと結合する必要があります。 このような選択は、ディメンションのプライマリSourceのメソッドを使用して生成できます。 Sourceの値の選択を表すSourceを生成する1つの方法は、valueメソッドを使用することです。

例5-8 メジャー値の取得

この例では、ベースSourceの入力と結合されたSourceの照合を示します。 この例では、mdmDBSchemaはGLOBALスキーマのMdmDatabaseSchemaです。

MdmCube mdmPriceCube =
  mdmDBSchema.findOrCreateCube("PRICE_CUBE_AWJ");
MdmBaseMeasure mdmUnitPrice =
  mdmPriceCube.findOrCreateBaseMeasure("UNIT_PRICE");
MdmStandardDimension mdmProdDim =
  mdmDBSchema.findOrCreateStandardDimension("PRODUCT_AWJ");
MdmTimeDimension mdmTimeDim =
  mdmDBSchema.findOrCreateTimeDimension("TIME_AWJ");

Source prodDim = mdmProdDim.getSource();
Source timeDim = mdmTimeDim.getSource();
Source unitPrice = mdmUnitPrice.getSource();

Source pricesByProductAndTime = unitPrice.join(prodDim).join(timeDim);
NumberSource numPricesByProductAndTime = pricesByProductAndTime.count();
5.4.4.3 valueメソッドを使用した入力によるソースの導出

例5-9 値メソッドを使用したソース自体への関連付け

この例では、letters.value()メソッドによってlettersValue Sourceが戻されます。 lettersValue Sourceには、入力としてlettersがあります。 入力は、Sourceの値と入力と、その入力と一致するSourceの値との関係を表します。

結合操作には、ベースSourceとしてletters、結合SourceとしてlettersValueがあります。 ベースSourcelettersは、lettersValueの入力と一致します。lettersも同じであるためです。 結合操作によって生成されるSourcelettersByLettersValueは、出力としてlettersValueを持ちます。 入力がありません。 lettersByLettersValueの各要素には、lettersからのベース値、およびlettersValueからの関連値があります。

Source letters = dp.createListSource(new String[] {"A", "B", "C"});
Source lettersValue = letters.value();
Source lettersByLettersValue = letters.join(lettersValue); 

lettersByLettersValue SourceCursorには、次の表に示す値があります。 表に見出しが追加されています。

Output Values     Base Values
       A               A
       B               B
       C               C

lettersByLettersValueには、関連するベースおよび結合されたSourceオブジェクトの値のみが含まれているため、lettersByLettersValue SourceCursorのベース値は出力値と同じです。 letters.join(letters)のように、ベースと結合されたSourceオブジェクトが関連付けられていない場合、結合操作によって生成されるSourceには、ベースと結合されたSourceオブジェクトのデカルト積が含まれます。

5.4.4.4 valueメソッドを使用したソースの値の選択

例5-10 valueメソッドを使用したソースの要素の選択

valueメソッドを使用すると、別のSourceの要素の選択であるSourceを導出できます。 この例では、「例5-7」からPRODUCT_AWJディメンションのSourceから2つの要素を選択します。 この例では、結合されたSourceの入力と一致するSourceのベースを示します。

Source productsToSelect = dp.createListSource(new String[]
                                  {"PRODUCT_PRIMARY::ITEM::ENVY EXE",
                                   "PRODUCT_PRIMARY::ITEM::ENVY STD"});
Source selectedProducts = prodDim.join(prodDim.value(),
                                       productsToSelect,
                                       Source.COMPARISON_RULE_SELECT,
                                       false);  // Hide the output.

productsToSelect SourceCursorには、次の値があります。

PRODUCT_PRIMARY::ITEM::ENVY EXE
PRODUCT_PRIMARY::ITEM::ENVY STD

selectedProducts SourceCursorには、次の値があります。

PRODUCT_PRIMARY::ITEM::ENVY EXE
PRODUCT_PRIMARY::ITEM::ENVY STD

2つのSourceオブジェクトには、同じ値が含まれます。 ただし、オブジェクトのタイプは異なります。 productsToSelect Sourceの型は、Stringデータ型のFundamentalMetadataObjectSourceです。 selectedProductsprodDimから導出されるため、selectedProducts SourceのタイプはprodDimです。 したがって、selectedProductsprodDimのサブタイプであるため、次の例に示すように、PRODUCT_AWJディメンションのSourceを入力として持つSourceと照合できます。

例5-11 導出Sourceオブジェクトを使用したメジャー値の選択

この例では、2つのディメンションのSourceオブジェクトから要素を選択し、選択したディメンション・メンバーのメジャー値を取得します。 この例では、「例5-8」と同じディメンションおよびメジャーを使用します。 ただし、この例では、メジャーのSourceの入力と一致するSourceオブジェクトは、ディメンションのSourceオブジェクトではありません。 かわりに、ディメンションのSourceオブジェクトのサブタイプです。 サブタイプでは、ディメンションの選択済メンバーを指定します。 メジャーをディメンションpricesForSelectedProductsAndTimesと結合することによって導出されるSourceには、3つの時間値の2つの製品のメジャー値のみを指定する6つの要素があり、これは「例5-8」pricesByProductAndTime Sourceの4998要素ではなくなります。 この例では、mdmDBSchemaはGLOBALスキーマのMdmDatabaseSchemaです。

// Create lists of product and time dimension members.
Source productsToSelect = dp.createListSource(new String[]
                                           {"PRODUCT_PRIMARY::ITEM::ENVY EXE",
                                            "PRODUCT_PRIMARY::ITEM::ENVY STD"});
Source timesToSelect = dp.createListSource(new String[]
                                           {"CALENDAR_YEAR::MONTH::2000.01",
                                            "CALENDAR_YEAR::MONTH::2001.01",
                                            "CALENDAR_YEAR::MONTH::2002.01"});
// Get the PRICE_CUBE_AWJ cube.
MdmCube mdmPriceCube = mdmDBSchema.findOrCreateCube("PRICE_CUBE_AWJ");
// Get the UNIT_PRICE measure from the cube.
MdmBaseMeasure mdmUnitPrice = 
  mdmPriceCube.findOrCreateBaseMeasure("UNIT_PRICE");
// Get the PRODUCT_AWJ and TIME_AWJ dimensions.
MdmStandardDimension mdmProdDim =
  mdmDBSchema.findOrCreateStandardDimension("PRODUCT_AWJ");
MdmTimeDimension mdmTimeDim =
  mdmDBSchema.findOrCreateTimeDimension("TIME_AWJ");
// Get the Source objects for the dimensions and the measure.
Source prodDim = mdmProdDim.getSource();
Source timeDim = mdmTimeDim.getSource();
Source unitPrice = mdmUnitPrice.getSource();
// Using the value method, derive Source objects that specify the selected 
// dimension members.
Source selectedProducts = prodDim.join(prodDim.value(),
                                       productsToSelect,
                                       Source.COMPARISON_RULE_SELECT,
                                       false);
Source selectedTimes = timeDim.join(timeDim.value(),
                                    timesToSelect,
                                    Source.COMPARISON_RULE_SELECT,
                                    false);
// Derive a Source that specifies the unitPrice values for the selected products
// and times.
Source pricesForSelectedProductsAndTimes = unitPrice.join(selectedProducts)
                                                    .join(selectedTimes);

pricesForSelectedProductsAndTimes SourceCursorには、次の表に示す値があります。 表に見出しが追加されています。

            Month                         Product                Price
-----------------------------  -------------------------------  -------
CALENDAR_YEAR::MONTH::2000.01  PRODUCT_PRIMARY::ITEM::ENVY EXE  3358.02
CALENDAR_YEAR::MONTH::2000.01  PRODUCT_PRIMARY::ITEM::ENVY STD  3000.11
CALENDAR_YEAR::MONTH::2001.01  PRODUCT_PRIMARY::ITEM::ENVY EXE  3223.28
CALENDAR_YEAR::MONTH::2001.01  PRODUCT_PRIMARY::ITEM::ENVY STD  2426.07
CALENDAR_YEAR::MONTH::2002.01  PRODUCT_PRIMARY::ITEM::ENVY EXE  3008.95
CALENDAR_YEAR::MONTH::2002.01  PRODUCT_PRIMARY::ITEM::ENVY STD  2140.71
5.4.4.5 Sourceオブジェクトの要素を結合するためのextractメソッドの使用

extractメソッドは、ベースSourceを入力として持つSourceを導出します。 Sourceの要素の値がSourceオブジェクトそのものである場合、extractメソッドを使用します。

例5-12 ソースのエレメントの抽出

この例では、selectValuesメソッドを使用して、PRODUCT_AWJディメンションのStringSourceから2つの要素の選択を導出します。 selectValuesメソッドは、selectedProductsおよびselectedTimes Sourceオブジェクトを生成する「例5-10」および「例5-11」のメソッドの完全なjoinシグネチャのショートカットです。

この例では、2つの導出されたSourceオブジェクトを要素値として持つリストSourcesourcesToCombineを作成します。 sourcesToCombine.extract()メソッドは、sourcesToCombineを入力として持つSourceであるsourcesToCombineWithAnInputを生成します。 結合操作sourcesToCombineWithAnInput.joinHidden(sourcesToCombine)は、sourcesToCombineWithAnInputの入力と結合されたsourcesToCombineを照合し、入力または出力がないcombinedSourcesを生成します。 このSource要素の結合のショートカットは、appendValuesメソッドです。

MdmStandardDimension mdmProdDim =
  mdmDBSchema.findOrCreateStandardDimension("PRODUCT_AWJ");
StringSource prodDim = (StringSource) mdmProdDim.getSource();
Source productsToSelect = prodDim.selectValues(new String[]
                                           {"PRODUCT_PRIMARY::ITEM::ENVY ABM",
                                            "PRODUCT_PRIMARY::ITEM::ENVY EXE",
                                            "PRODUCT_PRIMARY::ITEM::ENVY STD"});
Source moreProductsToSelect = prodDim.selectValues(new String[]
                                           {"PRODUCT_PRIMARY::ITEM::SENT FIN",
                                            "PRODUCT_PRIMARY::ITEM::SENT MM",
                                            "PRODUCT_PRIMARY::ITEM::SENT STD"});
Source sourcesToCombine = 
  dp.createListSource(new Source[] {productsToSelect, moreProductsToSelect});
Source sourcesToCombineWithAnInput = sourcesToCombine.extract();
Source combinedProducts = 
  sourcesToCombineWithAnInput.joinHidden(sourcesToCombine);

combinedProducts SourceCursorには、次の値があります。

PRODUCT_PRIMARY::ITEM::ENVY ABM
PRODUCT_PRIMARY::ITEM::ENVY EXE
PRODUCT_PRIMARY::ITEM::ENVY STD
PRODUCT_PRIMARY::ITEM::SENT FIN
PRODUCT_PRIMARY::ITEM::SENT MM
PRODUCT_PRIMARY::ITEM::SENT STD

5.5 パラメータ化Sourceオブジェクト

パラメータ化されたSourceオブジェクトは、パラメータ化されたSourceで指定された要素のセットを変更することで、問合せを指定し、問合せの様々な結果セットを取得する方法を提供します。 パラメータ化されたSourceは、ParametercreateSourceメソッドを使用して作成します。 Parameterは、パラメータ化されたSourceが指定する値を提供します。

このトピックの例は、Parameterオブジェクトを使用する簡単なデモンストレーションです。 Parameterの一般的な用途は、キューブのページ・エッジを指定することです(「例6-9」を参照)。 Parameterのもう1つの用途は、現在必要な要素のセットのみをサーバーからフェッチすることです。 「例6-15」は、Parameterオブジェクトを使用して様々な要素のセットをフェッチする方法を示します。

Parameterオブジェクトを作成する場合は、Parameterの初期値を指定します。 次に、Parameterを使用して、パラメータ化されたSourceを作成します。 問合せの指定には、パラメータ化されたSourceを含めます。 問合せのCursorを作成します。 Parameterの値は、setValueメソッドを使用して変更できます。このメソッドによって、問合せで指定される要素のセットが変更されます。 同じCursorを使用して、新しい値のセットを取得できます。

この例では、Parameterおよびパラメータ化されたSourceを使用して、ディメンションのメンバーを指定する方法を示します。 この例では、PRODUCT_AWJディメンションのMdmStandardDimensionを取得し、StringSourceとしてキャストされたMdmStandardDimensionSourceを取得します。

この例では、初期値としてディメンション・メンバーを持つStringParameterオブジェクトを作成します。 次に、StringParametercreateSourceメソッドを使用して、パラメータ化されたSourceparamProdSelを作成します。 次に、ディメンション・メンバーを選択する結合操作で、paramProdSelを比較Sourceとして使用します。

この例では、ディメンションのローカル値属性のSourceを取得します。 SourcelocValAttrparamProdSelと結合します。 この結合操作により、dimMemberWithLocalValue Sourceが生成されます。

この例では、dimMemberWithLocalValueCursorを作成し、Cursorの値を表示します。 Cursorの位置をリセットし、prodParam StringParameterの値を変更した後、この例ではCursorの値を再度表示します。

dpオブジェクトは、DataProviderです。 getContextメソッドは、現在のTransactionをコミットするメソッドと、Cursorの値を表示するメソッドを持つContext11gオブジェクトを取得します。

例5-13 パラメータ化されたソースを使用したディメンション選択の変更

MdmStandardDimension mdmProdDim =
  mdmDBSchema.findOrCreateStandardDimension("PRODUCT_AWJ");
StringSource prodDim = (StringSource) mdmProdDim.getSource();

StringParameter prodParam =
  new StringParameter(dp, "PRODUCT_PRIMARY::FAMILY::LTPC");
Source prodParamSrc = prodParam.createSource();
Source paramProdSel = prodDim.join(prodDim.value(), prodParamSrc);

Source locValAttr = mdmProdDim.getLocalValueAttribute().getSource();
Source dimMemberWithLocalValue = locValAttr.join(paramProdSel);

// Commit the Transaction.
getContext().commit();

// Create a Cursor for the Source.
CursorManager  cursorMngr = dp.createCursorManager(dimMemberWithLocalValue);
Cursor cursor = cursorMngr.createCursor();

// Display the value of the Cursor.
getContext().displayCursor(cursor);

// Change the product parameter value.
prodParam.setValue("PRODUCT_PRIMARY::FAMILY::DTPC");

// Reset the Cursor position to 1
cursor.setPosition(1);

// Display the value of the Cursor again.
getContext().displayCursor(cursor);

dimMemberWithLocalValueCursorには、次の情報が表示されます。

PRODUCT_PRIMARY::FAMILY::LTPC,LTPC

StringParameterの値を変更し、Cursorの位置をリセットすると、dimMemberWithLocalValueCursorに次の情報が表示されます。

PRODUCT_PRIMARY::FAMILY::DTPC,DTPC