3

Java API を使用して次のことを達成しようとしています。

ここに画像の説明を入力

この目的のために、Oracle OLAP ダウンロード セクションのデフォルト スキーマ/サンプル GLOBAL を使用しています。

これは、Oracle OLAP Java ガイドのコードの修正版です。

MdmCube unitsCube =
(MdmCube)mdmDBSchema.getTopLevelObject("PRICE_CUBE_AWJ");
MdmBaseMeasure mdmUnits =
(MdmBaseMeasure)unitsCube.getMeasure("UNIT_PRICE");
NumberSource units = (NumberSource)mdmUnits.getSource();

MdmPrimaryDimension mdmPRODDim = (MdmPrimaryDimension)mdmDBSchema.getTopLevelObject("PRODUCT_AWJ");
MdmLevelHierarchy mdmPRODHier = (MdmLevelHierarchy)mdmPRODDim.getDefaultHierarchy();

StringSource custHier = (StringSource)mdmPRODHier.getSource();

StringSource prodHier = (StringSource)mdmPRODHier.getSource();
Source famSel =
prodHier.selectValues(new String[] {"PRODUCT_PRIMARY::FAMILY::ACC",
"PRODUCT_PRIMARY::FAMILY::OS"});
Source querySource2 = units.join(timeSel).join(famSel).join(mdmPRODHier.getSource());

上記のクエリの結果はデカルト積であり、各ファミリは次のように各製品階層と一致します。

7: (PRODUCT_PRIMARY::CLASS::HRD--------PRODUCT_PRIMARY::FAMILY::ACC--------CALENDAR_YEAR::YEAR::CY1999--------*35.99375*--------)
8: (PRODUCT_PRIMARY::CLASS::HRD--------PRODUCT_PRIMARY::FAMILY::ACC--------CALENDAR_YEAR::YEAR::CY2000--------*32.9807070707071*--------)
9: (PRODUCT_PRIMARY::CLASS::HRD--------PRODUCT_PRIMARY::FAMILY::ACC--------CALENDAR_YEAR::YEAR::CY2001--------*36.8141666666667*--------)
10: (PRODUCT_PRIMARY::CLASS::HRD--------PRODUCT_PRIMARY::FAMILY::OS--------CALENDAR_YEAR::YEAR::CY1999--------*58.3433333333333*--------)
11: (PRODUCT_PRIMARY::CLASS::HRD--------PRODUCT_PRIMARY::FAMILY::OS--------CALENDAR_YEAR::YEAR::CY2000--------*62.113125*--------)
12: (PRODUCT_PRIMARY::CLASS::HRD--------PRODUCT_PRIMARY::FAMILY::OS--------CALENDAR_YEAR::YEAR::CY2001--------*65.7258333333333*--------)

ここでわかるように、HRD(ハードウェア) とACC(アクセサリ) が一致し、値がありますが、クラス(ソフトウェア)ACCに属しているため、あるべきではありません。SFT添付のスクリーンショットを参照してください。

これらの 2 つのソースを結合すると、可能な値のみが表示されるように除外する方法はありますか。この場合、スクリーンショットのようにクラスACCの下にのみ表示されます。SFT

すべてのヘルプは大歓迎です。

ありがとうございました。

4

1 に答える 1

1

問題は、同じ次元に 2 回参加していることです。ディメンションはクラスとファミリのPRODUCT_PRIMARY両方を提供するため、次のように言うと:

units.join(timeSel).join(famSel).join(mdmPRODHier.getSource());

最初に 2 つの値だけに制限してから、階層FAMILY内のすべての値に戻します。PRODUCT_PRIMARYしたがって、最終基準が常に一致するため、デカルト積はファミリに関係なくすべての製品に一致します。

HRD「可能な値のみが表示される」と言うときに、階層をドリルアップおよびドリルダウンして、およびの有効な子とSFT有効な親OSを見つけたいと考えていますACCOracleのドキュメントでは、6-17 ページから始まる例を使用してこれを行う方法について説明しています。

于 2011-04-25T23:46:11.567 に答える