2010-03-03 256 views
2

我對MDX比較陌生,正在努力完成我認爲應該是一件容易的事情,但我還沒有找到任何解決方案。計算尺寸/尺寸

我有一個銷售多維數據集,其中一個衡量標準是可以是負面或正面的利潤。我想要得到一個實際上是實際利潤總和的措施,即只在新措施中包括那些利潤爲正的利潤。

這裏的技巧是,這是該行的詳細程度和類似

與會員Measures.PositivePNL作爲IIF(Measures.PNL> 0,Measures.PNL,0)

不起作用因爲這隻適用於合計號

回答

1

如果您想在行詳細信息級別執行MDX操作,您將需要一個包含事實表ID的維(因此維中的每個成員都代表事實中的一行表)。然後你可以寫一個計算:

WITH MEMBER Measures.PositivePNL as 
' 
Sum([DimFactId].[DimFactId].Members, IIF(Measures.PNL > 0, Measures.PNL, 0)) 
' 

但是,如果你的事實表中有很多行,這可能會很慢。另一種方法是在事實表中添加一個只包含PNL正值的列。

2

我應該提到我正在使用Mondrian/MySQL。我來到了類似的結論,但找到了一種方法來創建一個新的退化維度使用SQL鍵表達式(所以我實際上並不需要列添加到表):

<Dimension name="PNLCategory"> 
    <Hierarchy hasAll="true"> 
     <Level name="PNLCategory" column="pnlCategory" uniqueMembers="true"> 
      <KeyExpression> 
       <SQL dialect="generic"> <![CDATA[IF(pnl >= 0,'Winner','Loser')]]></SQL> 
      </KeyExpression> 
     </Level> 
    </Hierarchy> 
</Dimension> 

現在它變得很容易做到的計算成員:

<CalculatedMember name="WinnersCountByPNL" aggregator="count" dimension="Measures"> 
    <Formula>([PNLCategory].[Winner], Measures.PNL)</Formula> 
    <CalculatedMemberProperty name="FORMAT_STRING" value="$#,###"/> 
    <CalculatedMemberProperty name="DATATYPE" value="Numeric"/> 
</CalculatedMember>  

所以在這裏我限制總和只有「贏家」和好處是,蒙德里安不會從該行表中檢索數(事實)項。