2014-11-04 33 views
0

我正在尝试创建一个动态命名集,它可以用于使用日期维度对数据进行分片。我想有一个像昨天,过去7天,上个月,上个季度等几个命名集合。对于“最后一天”的命名集合,我正在考虑做类似的事情。MDX:多维数据集计算上的动态命名集

StrToMember("[Date].[Calendar].[Day].&[" + DateAdd("d", -1,Tail([Date].[Calendar].[Day], 1) + "]") 

我想DateAdd("d", -1, Tail([Date].[Calendar].[Day], 1) + "]")返回member_value,这样我可以建立uniquename字符串返回一个成员,这可能吗?

我之所以使用DateAdd是因为有时候我在Day级别的数据上有差距,所以使用previousmember有时会返回错误的数据。

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

回答

0

希望这将让你的最后一天:

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] 

(上面没有测试过,但希望帮助)

+0

谢谢!我只想问关于ITEM()函数?你为什么使用它两次? – ggarcia 2014-11-05 13:14:28

+0

Tail返回一组元组。第一个ITEM(0)然后返回该集合中的第一个元组。第二个ITEM(0)返回元组的第一个成员。我们然后保证会员,所以'会员'不会感到困惑。在这个例子中'TAIL'没有使用第二个参数,所以只返回一个元组,所以你可能只用一个ITEM(0)就可以离开? – whytheq 2014-11-05 17:05:23