我對MDX比較陌生,正在努力完成我認爲應該是一件容易的事情,但我還沒有找到任何解決方案。計算尺寸/尺寸
我有一個銷售多維數據集,其中一個衡量標準是可以是負面或正面的利潤。我想要得到一個實際上是實際利潤總和的措施,即只在新措施中包括那些利潤爲正的利潤。
這裏的技巧是,這是該行的詳細程度和類似
與會員Measures.PositivePNL作爲IIF(Measures.PNL> 0,Measures.PNL,0)
不起作用因爲這隻適用於合計號
我對MDX比較陌生,正在努力完成我認爲應該是一件容易的事情,但我還沒有找到任何解決方案。計算尺寸/尺寸
我有一個銷售多維數據集,其中一個衡量標準是可以是負面或正面的利潤。我想要得到一個實際上是實際利潤總和的措施,即只在新措施中包括那些利潤爲正的利潤。
這裏的技巧是,這是該行的詳細程度和類似
與會員Measures.PositivePNL作爲IIF(Measures.PNL> 0,Measures.PNL,0)
不起作用因爲這隻適用於合計號
如果您想在行詳細信息級別執行MDX操作,您將需要一個包含事實表ID的維(因此維中的每個成員都代表事實中的一行表)。然後你可以寫一個計算:
WITH MEMBER Measures.PositivePNL as
'
Sum([DimFactId].[DimFactId].Members, IIF(Measures.PNL > 0, Measures.PNL, 0))
'
但是,如果你的事實表中有很多行,這可能會很慢。另一種方法是在事實表中添加一個只包含PNL正值的列。
我應該提到我正在使用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>
所以在這裏我限制總和只有「贏家」和好處是,蒙德里安不會從該行表中檢索數(事實)項。