MDX:显示截至当年最后一个月的当前年份与年初至今的年初至今,其中包含数据

时间:2020-05-21 23:16:50

标签: mdx

我需要显示当年和上一年的度量值(例如,书面保费)的YTD值,但仅显示具有数据的当年月份。例如,这是2020年5月,而包含数据的最后一个可用月份是2020年4月。我想显示2020年之前(包括2020年4月)的2020年至今的YTD书面保费,并显示2019年之前(包括4月)的YTD书面保费。 2019年(即使2019年有完整的数据)。

如果Month成员显示在行上,并且以下查询对此有效,则可以完成此操作:

WITH MEMBER [Measures].[Current YTD] AS
    SUM(YTD(
            [Activity Date].[Calendar].CurrentMember
            ), 
        [Measures].[Written Premium])
MEMBER [Measures].[Last YTD] AS
    SUM(
        YTD(ParallelPeriod(
                            [Activity Date].[Calendar].[Year]
                            , 1
                            , [Activity Date].[Calendar].CurrentMember                          
                          ))
        , [Measures].[Written Premium]
        )
SELECT {[Measures].[Current YTD]
, [Measures].[Last YTD]
} ON 0,
[Activity Date].[Calendar].Members on 1
FROM [Producer Performance];

但是,用户仅选择年份而不是月份,因此即使选择了年份级别,我也需要这项工作,因此我尝试执行以下操作,但这将为所有内容返回空值

WITH MEMBER [Measures].[Current YTD] AS
    SUM(YTD(
            //[Activity Date].[Calendar].CurrentMember
            TAIL(NONEMPTY(DESCENDANTS([Activity Date].[Calendar].CurrentMember, ([Activity Date].[Calendar].Levels.Count - 1), SELF)), 1).item(0).item(0)
            ), 
        [Measures].[Written Premium])
MEMBER [Measures].[Last YTD] AS
    SUM(
        YTD(ParallelPeriod(
                            [Activity Date].[Calendar].[Year]
                            , 1
                            //, [Activity Date].[Calendar].CurrentMember
                            , TAIL(NONEMPTY(DESCENDANTS([Activity Date].[Calendar].CurrentMember, ([Activity Date].[Calendar].Levels.Count - 1), SELF)), 1).item(0).item(0)
                          ))
        , [Measures].[Written Premium]
        )
SELECT {[Measures].[Current YTD]
, [Measures].[Last YTD]
} ON 0,
[Activity Date].[Calendar].Members on 1
FROM [Producer Performance];

我注释掉了有效的行,然后替换为最低级别后代的最后一个非空成员,我在这里验证了这些行:

SELECT 
TAIL(NONEMPTY(DESCENDANTS([Activity Date].[Calendar].CurrentMember, ([Activity Date].[Calendar].Levels.Count - 1), SELF)), 1).item(0).item(0)
on 0,
{Measures.[Written Premium]} on 1
from [Producer Performance]

最后一个查询显示2020年4月以及正确的书面保费金额。但是,当我将该表达式移植到先前的查询中时,我得到的都是空值。如果将.item(0).item(0)更改为item(0),我将得到相同的结果。

有人可以提供关于我可能做错了什么的任何想法吗?

谢谢!

0 个答案:

没有答案