2011-04-19 4 views
3

나는 자바 API와 다음 달성하기 위해 노력하고이 목적을 위해오라클 OLAP 자바 구현 - 가입 적절한 소스

enter image description here

내가 오라클 OLAP 다운로드 섹션에서 GLOBAL 기본 스키마/예를 사용하고 있습니다 .

인 오라클 OLAP 자바 가이드에서 코드의 수정 된 버전 :

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*--------) 

우리는 여기에서 볼 수 있습니다 그것은 ACC (액세서리)와 HRD (하드웨어)의 경기를했고,이 값을 가지고 있지만, 같이 ACC 클래스,642에 속으로,하지 말았어야이다(소프트웨어). 참조를 위해 첨부 된 스크린 샷을 참조하십시오.

제외를 만드는 방법이 있으므로이 두 소스를 합치면 가능한 값만 표시됩니다.이 경우 은 스크린 샷처럼 SFT 클래스 아래에만 표시됩니다.

모든 도움을 환영합니다.

감사합니다.

답변

1

동일한 치수를 두 번 결합하는 것이 문제입니다. PRODUCT_PRIMARY 치수는 클래스와 가족을 모두 제공, 그래서 당신이 말할 때 :

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

을 먼저 PRODUCT_PRIMARY 계층 구조에있는 모든 밖으로 다시 확대 한 다음에 그냥 두 FAMILY 값을 제한하고 있습니다. 따라서 데카르트 제품은 최종 표준이 항상 일치하기 때문에 가족과 상관없이 모든 제품과 일치합니다.

난 당신이 "표시됩니다 가능한 경우에만 값"말할 때 당신이 원하는 무엇을 생각하는 당신은 드릴 업 할 수 있도록하려면 계층 구조 아래로 알아 무엇 HRDSFT의 유효 아이들이하고 무엇 유효한 부모는 OSACC입니다. Oracle documentation은 6-17 페이지에서 시작하는 예제로이를 수행하는 방법을 설명합니다.