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

时间:2014-07-09 09:06:13

标签: mdx

我正在研究一个具有两个日期维度的立方体,具有相同的结构,但测量不同的行为:一个测量停留日期,另一个测量预订日期。所以我需要创建一个集合来隔离特定日期的所有预订,直到特定日期之前的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)}

MEMBER [Measures].[Arg] as [Business Date].[Calendar].currentmember.properties("Key")

返回:20131023

MEMBER [Measures].[Arg2] as "[Creation Date].[Calendar].[Day].&["+[Business Date].[Calendar].currentmember.properties("Key")+"].lag(365)"

返回[创建日期]。[日历]。[日]。& [20131023] .lag(365)

我也试过在争论之前使用cstr和format(“yyyyMMdd”),但无济于事......

真的,我的想法已经用完...... :)

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

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

顺便说一句:如果你需要一个日期维度的参考表格到另一个日期维度,并且它们具有相同的结构,如果它们是基于相同维度对象的角色扮演维度,它们应该具有相同的结构,你可以使用{{3并避免StrToMember