当前数据成员减去 mdx 查询中的月份

Current data member minus months on mdx query

我正在尝试执行一个查询,计算一段时间内指定时间范围内的度量总和。

WITH MEMBER 
    [Measures].[calc] as 
        SUM (
            { [date.time].[day].CurrentMember.LEAD(-30):[date.time].[day].CurrentMember },
            [Measures].[my_value] 
        )
SELECT NON EMPTY {[Measures].[calc]} ON COLUMNS,
{[date.time].[day].[2014-07-21 00:00:00.0]:[date.time].[day].[2016-07-21 00:00:00.0]} ON ROWS 
FROM [my_cube]

此代码有效,它 return 对我来说是当前成员加上它之前的最后 30 个成员的总和,但我正在寻找一种方法来减去成员(在这种情况下为天数),几个月,因为不是所有的月份都有 30 天,有什么办法可以做到这一点?因为如果没有,我的间隔的每一天都需要做一个请求来做我在 java 代码

中想做的事情

如果您的层次结构具有日-月关系(例如,日历),则可以使用日期的父级:

WITH MEMBER 
    [Measures].[calc] as 
        SUM (
            { [date.time].[calendar].CurrentMember.LEAD(-30):[date.time].[calendar].CurrentMember },
            ([date.time].[calendar].CurrentMember.Parent.Lag(1),[Measures].[my_value]) 
        )
SELECT NON EMPTY {[Measures].[calc]} ON COLUMNS,
{[date.time].[day].[2014-07-21 00:00:00.0]:[date.time].[day].[2016-07-21 00:00:00.0]} ON ROWS 
FROM [my_cube]

如果没有层级,可以使用day key重新生成month key:

WITH MEMBER 
    [Measures].[calc] as 
        SUM (
            { [date.time].[day].CurrentMember.LEAD(-30):[date.time].[day].CurrentMember },
            (StrToMember('[date.time].[month].[' + left([date.time].[day].CurrentMember.Properties('Key'),7) + ']').Lag(1),[Measures].[my_value]) 
        )
SELECT NON EMPTY {[Measures].[calc]} ON COLUMNS,
{[date.time].[day].[2014-07-21 00:00:00.0]:[date.time].[day].[2016-07-21 00:00:00.0]} ON ROWS 
FROM [my_cube]