2014-10-21 1 views
2

나는 아래 표와 같은 데이터를 가지고 있는데, Expected Shipment Amount New는 효과적으로 클레임 당 평균 선적 금액이지만, 정확히 집계 할 수는 없습니다 (합계가 0이 아닌 26.3이어야합니다). 이 일이 어떻게 될지 아무도 모른다.MDX에서 하위 멤버에 대한 계산을 수행하고 그 자식을 집계하려면 어떻게합니까?

CREATE MEMBER CURRENTCUBE.[Measures].[Expected Shipment Amount Pre] AS IIf(IsLeaf([Claim].[CliID].currentmember), ([Measures].[Expected Shipment Amount]/[Measures].[Claim Count]),0), VISIBLE = 0;

그리고이 그렇게 볼 수 있어야 무엇인가가 더 예상 출하량없는 경우

CliID | Claim Count | Expected Shipment Amount | CliId Count Expected Shipment Amount New 
All |  5  |   61.8   |  2  |    0 
159061| (null) |   (null)   | (null) |   (null) 
159063| (null) |   (null)   | (null) |   (null) 
166759|  2  |   34.2   |  1  |    17.1 
166769| (null) |   (null)   | (null) |   (null) 
223983|  3  |   27.6   |  1  |    9.2 

이 전 회원은 각 개별 CliID의 평균을 계산하고 null을 반환하도록되어 모든 것이 제대로 집계 : 그것은 꽤 분명

CREATE MEMBER CURRENTCUBE.[Measures].[Expected Shipment Amount New] AS SUM([Measures].[Expected Shipment Amount Pre]), VISIBLE=1;

집계 수준에서 Expected Shipment Amount Pre을 찾고 집계 자체가 잎이 아니기 때문에 0을 반환하지만 집계에 대해서는 모든 자식을 계산하여 추가해야합니다. 어떻게하면 될까요? 두 번째 단계

+0

'[예상 배송 예정 금액] '을 표시하고 큐브를 쿼리 해 보셨습니까? – whytheq

+0

예,하지만 그게 나에게 무엇을 보여 줍니까? 총계 레벨 (All)에서 '[Shpected Amount Pre]'는 0으로 표시됩니다. 왜냐하면 우리는 거기에 잎이 없기 때문입니다. 나는 우리가 잎에 있지 않을 때 자녀들을 요약하고 싶습니다. – Travis

+0

ok - 요구 사항을 이해하기 시작했습니다. '26.3'은 '61.8/5 <> 26.3'으로 확실히 맞습니까? – whytheq

답변

2

, 당신은

CREATE MEMBER CURRENTCUBE.[Measures].[Expected Shipment Amount New] 
AS SUM(EXISTING [Claim].[CliID].[CliID].Members, [Measures].[Expected Shipment Amount Pre]), 
VISIBLE=1; 

전을 사용해야합니다. 이자형. CliID 수준의 회원 전체의 합계입니다.

편집 속도를 높이려는 시도는 내장 된 Analysis Services 집계에 더 의존하는 것입니다. 이를 수행하려면 사실 테이블의 Expected Shipment Amount 컬럼을 기초로 물리적 수단Expected Shipment Amount New을 작성하고 집계 함수를``sum`으로 설정하십시오. 그런 다음, 계산 스크립트에서, 단지 평균 계산 리프 수준에서 '예상 출하 금액 뉴'의 계산을 덮어 쓰게됩니다

SCOPE([Claim].[CliID].[CliID].Members); 
    [Measures].[Expected Shipment Amount New] = [Measures].[Expected Shipment Amount]/[Measures].[Claim Count]; 
END SCOPE; 

이 추가되지만 CliID 특성 계층의 All 수준에 대해 아무것도 언급하지. 따라서이 수준에서는 구체화 된 집계 인 sum이 발생해야합니다.

+0

차가움. 이것은 쿼리를 극적으로 늦추는 것처럼 보입니다. 그것이 예상 되는가/어쨌든 이것을 촉진 할 것인가? – Travis

+0

@Travis 'EXISTING (출퇴근)'은 상당한 속도 저하를 초래할 수 있습니다. 첫 번째 문장에서'IIf'를 제거 할 수 있습니다. 두 번째 것은 측정을 사용하는 경우 항상 리프 수준에 있으며, 사용자는 보이지 않으므로이 측정을 사용할 수 없습니다. 따라서 계산이 조금 더 간단해질 수 있습니다. – FrankPl

관련 문제