我需要显示当年和上一年的度量值(例如,书面保费)的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),我将得到相同的结果。
有人可以提供关于我可能做错了什么的任何想法吗?
谢谢!