Mdx使用成员属性作为strtomember的参数

Mdx使用成员属性作为strtomember的参数,mdx,Mdx,我正在研究一个立方体,它有两个日期维度,具有相同的结构,但测量不同的行为:一个测量停留日期,另一个测量预订日期。因此,我需要创建一个集合,将隔离特定日期的所有预订,直到该特定日期前1年。我需要的设置是动态的,所以它的变化时,停留日期的变化 现在,我想弄明白为什么这个方法很好: SET [D365] AS {NULL: [Creation Date].[Calendar].[Day].&[20131023].lag(365)} 但这并不是: SET [D365] AS {null:str

我正在研究一个立方体,它有两个日期维度,具有相同的结构,但测量不同的行为:一个测量停留日期,另一个测量预订日期。因此,我需要创建一个集合,将隔离特定日期的所有预订,直到该特定日期前1年。我需要的设置是动态的,所以它的变化时,停留日期的变化

现在,我想弄明白为什么这个方法很好:

SET [D365] AS {NULL: [Creation Date].[Calendar].[Day].&[20131023].lag(365)}
但这并不是:

SET [D365] AS {null:strtomember("[Creation Date].[Calendar].[Day].&["+ [Business Date].[Calendar].currentmember.properties("Key")+"]").lag(365)}
什么时候

返回:20131023

返回[Creation Date].[Calendar].[Day].&[20131023].lag365

我还尝试在参数之前使用cstr和格式yyyyMMdd,但没有用

真的,我已经没有主意了…:


非常感谢您的帮助。

问题在于,WITH子句中的集合在WHERE子句的求值之后但在查询的行和列之前求值,而WITH子句中的成员定义考虑了上下文当前行/列位置,每次发现它们出现在其中一个轴上时,都会对其定义进行评估。这意味着定义集合时,[Business Date].[Calendar].currentmember可能是所有成员,至少如果您将[Business Date].[Calendar]层次结构放在行或列上,而不是放在WHERE子句中。因此,可以将集合定义用作成员定义的子表达式或行或列集合的子表达式,但在命名集合定义中使用它是没有用的


顺便说一句:如果您需要从一个日期维度到另一个日期维度的引用,并且这些维度具有相同的结构,如果它们是基于相同维度对象的角色扮演维度,则应该具有相同的结构,那么您可以使用并避免使用StrToMember。

为什么要使用StrToMember?将[D365]设置为{NULL:[创建日期].[Calendar].CurrentMember.lag365}应该可以正常工作。非常感谢您的回答,但我需要STRTOMEMBER,因为我混合了两个时间维度。我正在使用创建日期的键,作为业务日期的参数…:/美好的谢谢,我将尝试将集合直接插入聚合它的成员的定义中,并对结果给出反馈。非常感谢你!我自己永远也不会到达那里…它的工作原理是这样的:成员[Creation Date].[Day].[D365]作为现有的总和{null:strtomember[Creation Date].[Calendar].[Day].&[+[Business Date].[Calendar].currentmember.propertiesKey+].lag365}再次感谢!:CSF还将记录LinkMember,以便进一步调查,因为这听起来非常有趣;
MEMBER [Measures].[Arg] as [Business Date].[Calendar].currentmember.properties("Key")
MEMBER [Measures].[Arg2] as "[Creation Date].[Calendar].[Day].&["+[Business Date].[Calendar].currentmember.properties("Key")+"].lag(365)"