计算尺寸/尺寸
问题描述:
我对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>
所以在这里我限制总和只有“赢家”和好处是,蒙德里安不会从该行表中检索数(事实)项。