OLAP / MDX - 定义计算成员,汇总所有时间数据

时间:2012-06-07 14:02:42

标签: postgresql mdx olap

我想在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函数在没有第二个计算成员的情况下运行良好):

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]'  

感谢您的任何想法。

2 个答案:

答案 0 :(得分:3)

我没有使用过Mondrian,但是在SQL Server Analysis Services(SSAS)中,使用NULL成员会导致范围从关卡的一端转到指定的成员。

在您的情况下,您正在寻找的计算成员可能是这样的:

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

您还可以使用另一端的NULL成员执行次计算成员的结束,如下所示:

{ [Time].[Month].CurrentMember : NULL }

答案 1 :(得分:2)

您可以将PeriodsToDate功能与allMember一起使用。 在你的情况下,它将是:

PeriodsToDate([Time.Time].[all_Time_member_name],[Time.Time].CurrentMember)