1

私は奇妙な方法で何かを数える必要がありますが、ほとんどの場合、葉と複数の次元にわたるより高いレベルの集約の両方で機能します。ただし、特定の 1 つのディメンションについて正しく集計された値は得られません。

現時点で私が持っているのは...

CREATE MEMBER CURRENTCUBE.[Measures].[Active Commitments]
 AS NULL,
FORMAT_STRING = '#,#', 
VISIBLE = 1;    

SCOPE (DESCENDANTS([Date Dimension].[Fiscal Year Hierarchy],,AFTER));     
[Measures].[Active Commitments] =
iif([Constituent Activity].[Type].currentMember.Properties("Name")="Correspondence",
    sum(([Commitment Dates].[Start Date], NULL: [Date Dimension].[Fiscal Year Hierarchy]), [Measures].[Commitment Count]),
    sum(([Commitment Dates].[First Funded Date], NULL: [Date Dimension].[Fiscal Year Hierarchy]), [Measures].[Commitment Count]))
        - sum(([Commitment Dates].[Stop Date],[Commitment].[Was Commitment Ever Active].[Sometime Active], NULL: [Date Dimension].[Fiscal Year Hierarchy]),  [Measures].[Commitment Count]); 
END SCOPE;

SCOPE (DESCENDANTS([Date Dimension].[Fiscal Year Hierarchy],,AFTER));
<Similar to above> 

ご覧のとおり、複雑なのは、あるタイプの「コミットメント」が で始まり[Start Date]、他のタイプが で始まるということ[First Funded Date]です。

の複数のメンバーが選択されると、SCOPE ステートメントで[Constituent Activity]の使用が無効になるため、これは常に失敗します。currentMemberたとえば、次の MDX は正常に実行されますが、出力は#Error--

select  
    [Measures].[Active Commitments] on columns
    ,[Date Dimension].[Fiscal Year Hierarchy].[Fiscal Year].&[2011\12] on rows
from Compass3
where
    {[Constituent Activity].[Description].[XYZ]
    ,[Constituent Activity].[Description].[ABC]}

SCOPE ステートメント内でエンコードする必要があるのは、再帰的なものだと思います...

if a single member of [Constituent Activity] is current
then use the calc as defined above
else use [Measures].[Active Commitments] = sum(all selected members of [Constituent Activity], [Measures].[Active Commitments])

……でも、どう書けばいいの?

4

1 に答える 1

1

データ ウェアハウスやデータ ソースのビューまでさかのぼって制御できますか? 計算フィールドをファクト テーブルに追加して、セル レベルで [Commitment Active Date] を取得できますか? 次に、キューブでより単純なカウントを行うことができます。

ビジネス ルールを適用し、データ ウェアハウスでビジネス計算を行う方が、長期的にはより効率的で簡単であることがわかりました。

于 2012-11-02T16:08:36.000 に答える