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

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 回答