私は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>
したがって、ここでは合計を「勝者」のみに制限します。利点は、モンドリアンが行テーブルからcount(fact)エントリを取得しないことです。