2013-10-24 3 views
0

다음은 초급 질문입니다. MDX 쿼리에서 차원 속성을 어떻게 반환합니까? 내가 찾은 유일한 방법은 WITH MEMBER을 사용하여 열 차원에이 별칭을 추가하는 것입니다.MDX에서 치수 속성을 얻는 방법

WITH 
MEMBER [Measures].[User Email] as [User].CurrentMember.Properties("Email") 
SELECT { 
    [Measures].[User Email], 
    [Measures].[Total Fees Value] 
} ON COLUMNS, 
NON EMPTY { 
    CrossJoin([Order].Children, [User].Children) 
} ON ROWS 
FROM [LineItemFact] 
WHERE ([DateOfSalePst.Days].[2013]) 

이것은 약간 어색한 것처럼 보입니다. 행 축에 ([Order].[All], [User].[All])을 추가하여 총계를 표시하려면 문제가 발생합니다. 모든 열의 합계를 계산하려고 시도하고 User Email에 예외를 반환합니다. 왜냐하면 당연히 전자 메일 문자열의 합계를 계산할 수 없기 때문입니다.

MDX에서 속성을 얻는 더 좋은 방법은 없습니까?

답변

2

당신은 DIMENSION PROPERTIES를 사용하여 속성을 반환 할 수 있습니다

SELECT { 
    [Measures].[Total Fees Value] 
} ON COLUMNS, 
NON EMPTY { 
    CrossJoin([Order].Children, [User].Children) 
} 

DIMENSION PROPERTIES [User].[Email] 

ON ROWS 
FROM [LineItemFact] 
WHERE ([DateOfSalePst.Days].[2013]) 

어떻게 이러한 속성에 액세스 할 수 있습니다 당신이 속성에 액세스하는 데 사용하는 클라이언트 도구에 따라 달라집니다. E. g. SQL Server Management Studio에서 행 머리글 셀을 두 번 클릭하여 볼 수 있으며 Excel 피벗 테이블을 도구 설명으로 표시하고 OLAP4J도 행 축 멤버의 속성으로 제공합니다.

그러나 Reporting Services와 같은 일부 도구는 이러한 방식으로 속성에 액세스 할 수 없으므로 사용자가 질문에 입력 한 해결 방법 (이를 표시하는 계산 된 멤버 정의) 만 액세스 할 수 있습니다.

이들을 통해 집계하는 것과 관련하여 속성을 사용할 수없는 한 Analysis Services는 NULL을 반환하고 오류를 생성하지 않습니다. 그러나, 나는 Mondrian이 이것을 어떻게 처리하는지 모르겠습니다.

+0

나는 olap4j와 함께 몬드리안을 사용하고 있습니다. 몬드리안 JPivot에서 쿼리를 실행하면 쿼리가 작동하는 것 같습니다. 그러나 olap4j를 통해 동일한 쿼리를 시도하면 java.lang.ClassCastException이 발생합니다 : mondrian.mdx.MemberExpr을 mondrian.mdx.UnresolvedFunCall로 캐스팅 할 수 없습니다. –

+0

이 http : //jira.pentaho에 대한 몬드리안에 대한 JIRA 문제를 만들었습니다 .com/browse/MONDRIAN-1768 –