Ssas MDX:多维数据集计算中的动态命名集

Ssas MDX:多维数据集计算中的动态命名集,ssas,mdx,Ssas,Mdx,我正在尝试创建一个动态命名集,可以使用date维度对数据进行切片。我想有几个命名集,比如最后一天、最后7天、上个月、最后一个季度等等。对于名为set的“最后一天”,我正在考虑做类似的事情 StrToMember("[Date].[Calendar].[Day].&[" + DateAdd("d", -1,Tail( [Date].[Calendar].[Day], 1) + "]") 我想DateAdd(“d”,-1,Tail([Date].[Calendar].[Day],1)+“]

我正在尝试创建一个动态命名集,可以使用date维度对数据进行切片。我想有几个命名集,比如最后一天、最后7天、上个月、最后一个季度等等。对于名为set的“最后一天”,我正在考虑做类似的事情

StrToMember("[Date].[Calendar].[Day].&[" + DateAdd("d", -1,Tail( [Date].[Calendar].[Day], 1) + "]")
我想
DateAdd(“d”,-1,Tail([Date].[Calendar].[Day],1)+“])
返回member_值,这样我就可以构建uniquename字符串来返回一个成员,可以吗

我使用
DateAdd
的原因是,有时我的日级别数据存在缺口,因此使用previousmember有时会返回错误的数据


Ps:我所说的最后一天实际上并不等于function
Now()-1
,它是多维数据集中可用的最后一天,这就是为什么我不能依靠服务器系统时间来实现这一点。

这将有望为您提供最后一天:

WITH 
MEMBER [Date].[Calendar].[LastDay] AS
 Tail([Date].[Calendar].[Day]).ITEM(0).ITEM(0)
SET [VariousDates] AS
 {[Date].[Calendar].[LastDay]}
SELECT
 [VariousDates] ON 0
FROM [MyCube]
然后,您可以在集合中创建更多成员
[VariousDates]

WITH 
MEMBER [Date].[Calendar].[LastDay] AS
 Tail([Date].[Calendar].[Day]).ITEM(0).ITEM(0)
MEMBER [Date].[Calendar].[Last7Days] AS
 AGGREGATE(
    Tail(
      [Date].[Calendar].[Day]
      ,7
    )
  )
SET [VariousDates] AS
 { 
   [Date].[Calendar].[LastDay]
  ,[Date].[Calendar].[Last7Days]
  }
SELECT
 [VariousDates] ON 0
FROM [MyCube]

(以上未测试,但希望有帮助)

谢谢!我只是想问一下关于ITEM()函数的问题?为什么要使用它两次?Tail返回一组元组。然后,第一项(0)返回该集合中的第一个元组。第二项(0)返回元组的第一个成员。然后,我们保证会有一个成员,因此
与成员
不会混淆。在这个例子中,
TAIL
是在没有第二个参数的情况下使用的,所以它只是返回一个元组,所以您可能只会得到一个项目(0)?