1

OLAPキューブで「これまでのすべての」計算メンバーを定義したいと思います。次を使用してYTDを計算できます。

SUM(YTD([Time].[Month].CurrentMember), [Measures].[Suits])

データの開始以降のすべての日付を含めるにはどうすればよいですか?私の時間ディメンションは次のようになります。

<Dimension type="TimeDimension" visible="true" foreignKey="granularity" highCardinality="false" name="Time">
  <Hierarchy name="Time" visible="true" hasAll="true" primaryKey="eom_date">
    <Table name="v_months" schema="bizdata">
    </Table>
    <Level name="Year" visible="true" column="year_number" type="String" uniqueMembers="false" levelType="TimeYears" hideMemberIf="Never">
    </Level>
    <Level name="Quarter" visible="true" column="quarter_number" type="String" uniqueMembers="false" levelType="TimeQuarters" hideMemberIf="Never">
    </Level>
    <Level name="Month" visible="true" column="month_number" type="String" uniqueMembers="false" levelType="TimeMonths" hideMemberIf="Never">
    </Level>
  </Hierarchy>
</Dimension>

関連するかどうかわからない:私はmondrian olapサーバー(tomcatで実行)、フロントエンドとしてSaiku、データベースとしてpostgresを使用しています

たくさんの組み合わせを試しましたが、わかりません。

更新:Gonsaluによって提案された構文を使用しようとしました:

<CalculatedMember name="YTD Suits" formatString="" formula="SUM(YTD([Time].[Month].CurrentMember), [Measures].[Suits])" dimension="Measures" visible="true">
</CalculatedMember>
<CalculatedMember name="PTD Suits" formatString="" formula="Sum({NULL:[Time].[Month].CurrentMember },[Measures].[Suits])" dimension="Measures" visible="true">
</CalculatedMember>    

これを使用すると、mondrianを起動するときに次のエラーメッセージが表示されます(YTD関数は2番目の計算されたメンバーがなくても正常に機能することに注意してください)。

Caused by: mondrian.olap.MondrianException: Mondrian Error:Failed to parse query
 'WITH
MEMBER [Measures].[Measures].[YTD Suits]
  AS 'SUM(YTD([Time].[Month].CurrentMember), [Measures].[Suits])',
    [$member_scope] = 'CUBE',
MEMBER_ORDINAL = 6
MEMBER [Measures].[Measures].[PTD Suits]
  AS 'Sum({NULL:[Time].[Month].CurrentMember },[Measures].[Suits])',
[$member_scope] = 'CUBE',
MEMBER_ORDINAL = 7
SELECT FROM [Project Performance]'  

アイデアありがとうございます。

4

2 に答える 2

3

Mondrianは使用していませんが、SQL Server Analysis Services(SSAS)で、NULLメンバーを使用すると、範囲がレベルの一方の端から指定されたメンバーに移動します。

あなたの場合、あなたが探している計算されたメンバーは次のようなものかもしれません:

Sum( { NULL : [Time].[Month].CurrentMember }
   , [Measures].[Suits]
   )

次のように、もう一方の端でNULLメンバーを使用して、計算されたメンバーの時間の終わりまでを実行することもできます。

{ [Time].[Month].CurrentMember : NULL }
于 2012-06-07T19:45:29.963 に答える
2

PeriodsToDateと一緒に関数を使用できますallMember。あなたの場合は次のようになります。

PeriodsToDate([Time.Time].[all_Time_member_name],[Time.Time].CurrentMember)
于 2014-03-14T20:12:16.253 に答える