在MDX中设置的父母

时间:2011-10-17 22:15:57

标签: ssas mdx

我有一个过滤器,用于选择日期维度中的特定日期。这将作为参数传入MDX查询。

Filter([Date Dimension].[Calendar Year Hierarchy].[Actual Date].members,
        [Date Dimension].[Actual Date].CurrentMember.Properties( "Name" ) = '2011-09-01 00:00:00.000')

我现在想在上面的层次结构中选择周和/或月。

[日期维度]。[日历年度层次结构]。[月] [日期维度]。[日历年度层次结构]。[日历周]

我尝试过几个没有太多运气的功能,例如.ParentDrillupLevel

我可能错误地使用它们或在错误的位置使用它们,

感谢您的帮助

4 个答案:

答案 0 :(得分:2)

您可以使用GENERATE函数获取所有优先级:

Generate
 (
   {Filter([Date Dimension].[Calendar Year Hierarchy].[Actual Date].members,
        [Date Dimension].[Actual Date].CurrentMember.Properties( "Name" ) = 
'2011-09-01 00:00:00.000')},
{Ascendants([Date Dimension].[Calendar Year Hierarchy].CurrentMember)}
 )

使用Adventure Works查询:

Select 
{[Measures].[Internet Sales Amount]} On Columns,
{Generate(
{Filter([Date].[Calendar].[Date].members,[Date].[Calendar].CurrentMember.Properties("Name") = 'April 1, 2004')}, 
{Ascendants([Date].[Calendar].CurrentMember)})} On Rows
From    [Adventure Works]    

答案 1 :(得分:1)

如果您知道要查找的级别,可以使用MDX Ancestor function代替父级:

Ancestor([Date Dimension].[Calendar Year Hierarchy].currentmember, 
         [Date Dimension].[Calendar Year Hierarchy].[Month]) 

如果不是,使用父功能就可以了。注意,使用属性不是过滤的最快方法(对于非常大的集合)。

为什么不使用StrToMember MDX function

StrToMember( ... here build your member with a string ... ) 

或者你是否可以编辑mdx直接在字符串生成器的帮助下创建语句?

答案 2 :(得分:0)

所以我现在的答案是

  

过滤器([日期维度]。[日历年度层次结构]。[实际   日期]。成员,[日期维度]。[实际   Date] .CurrentMember.Properties(“Name”)='2011-09-01 00:00:00.000')         .item(0).parent

使用.item[0]获取集合中的项目 和.parent得到那些项目的父项(在我的情况下,我实际上称它为3次)

如果有任何更好的想法会喜欢他们。

答案 3 :(得分:0)

您可以使用STRTOSET,并为每个输入参数将]替换为].Parent,这样您就可以拥有一组父母。