首页 > 解决方案 > 基于 strtomember 访问前一个成员并使用附加维度属性

问题描述

我创建了一个简单的命名集 [Latest],它使用前一天的日期。这可以根据需要工作,并且可以由任何引用日期维度的度量使用:

CREATE DYNAMIC SET CURRENTCUBE.[Latest]
AS strtomember('[Date].[Date Key].&['+ 
vba!Format(DateAdd('d',-1,Now()),'yyyyMMdd')+']'); 

我的目标是计算此值与前一个工作日之间的增量,并将其显示为单独的计算。[最新] | [最新一期] | [最新-Delta]

我开始使用 [Latest].prevmember 创建一个额外的计算:

CREATE DYNAMIC SET CURRENTCUBE.[Latest-1]
as strtomember ('[Date].[Date Key].&[' + format(DateAdd('d',-1,Now()),'yyyyMMdd')+']').prevmember;

这很好用,但前提是前一天是工作日。如果前一天是周末,则该值不会发生变化,因此 delta 将为 0。需要明确的是,如果 [Latest] 返回星期二,则 Latest-1 将是工作日 Monday 的 prev 成员,但如果 Latest返回星期一日期,我希望 Latest-1 使用星期五的前一个工作日。

日期维度填充了完整的日期日历,但具有 IsWeekday 布尔标志,即周末/节假日为 0,工作日为 1。

其逻辑非常简单,但我正在努力思考如何将 IsWeekday 属性合并到多维数据集计算中。

任何指针都非常感谢。

标签: ssasmdx

解决方案


在我的脑海中,我认为您需要获得一组日期键,即工作日 IsWeekDay = 1。然后你需要过滤这个键小于最新键的集合。最后,您可以获取该过滤集的头部。

像这样的东西(需要仔细检查语法):

StrToMember( TAIL ( FILTER(Date.IsWeekDay.&[1].members, date.IsWeekday.currentmember.memberkey< yyyymmdd,

1))

其中 yyyymmdd 是当前日期的表达式。

H,

先生


推荐阅读