2

私はMDXに比較的慣れておらず、簡単なことだと思うことを達成しようとしていますが、解決策は見つかりませんでした。

私はセールスキューブを持っていますが、その指標の1つは、マイナスまたはプラスの利益です。実質的に正の利益の合計である1つのメジャーを取得したいと思います。つまり、正の利益を持つ利益の数値のみを新しいメジャーに含めます。

ここでの秘訣は、これが行の詳細レベルにあり、次のようなものであるということです。

メンバー付きMeasures.PositivePNLasIIF(Measures.PNL> 0、Measures.PNL、0)

集計数でのみ機能するため、機能しません

4

2 に答える 2

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>     

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

于 2010-03-03T14:40:51.303 に答える
1

行の詳細レベルでMDXで何かを実行する場合は、ファクトテーブルのIDを含むディメンションが必要になります(したがって、ディメンションの各メンバーはファクトテーブルの行を表します)。次に、計算を書くことができます:

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

ただし、ファクトテーブルに多数の行がある場合、これは遅くなる可能性があります。別の方法は、PNLの正の値のみを含む列をファクトテーブルに追加することです。

于 2010-03-03T14:03:44.653 に答える