我对 MDX 比较陌生,并且正在尝试完成我认为应该是一件简单的事情,但我还没有找到任何解决方案。
我有一个销售立方体,其中一个衡量标准是利润,可以是负值也可以是正值。我想要得到一个实际上是正利润总和的衡量标准,即仅在新衡量标准中包含那些具有正利润的利润数字。
这里的技巧是这是在行详细信息级别上,类似于
将 MEMBER Measures.PositivePNL 作为 IIF(Measures.PNL > 0,Measures.PNL,0)
不起作用,因为它只适用于总数
最佳答案
我应该提到我正在使用 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>
所以在这里我将求和限制为仅“获胜者”,这样做的好处是 Mondrian 不会从行表中检索 count(fact) 条目。
关于version-control - 计算的尺寸/尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2371539/