2014-01-16 93 views
2

儿童功能返回成员的集合。 但我需要几个成员的孩子。多个成员的MDX儿童

的问题是,我不能用联盟,使它象的工作:

Union([Geography].[Geography].[USA].children,[Geography].[Geography].[Canada].children) 

我不知道有多少成员是...所以我其实需要的所有儿童的一组成员。

喜欢:

([Geography].[Geography].[USA],[Geography].[Geography].[Canada],[Geography].[Geography].[GB]).children 

是否有一个函数这样呢?


我无法回答我的问题,所以我只是编辑它。在DHN的回答和一些大脑工作的帮助下,我发现了一个我可以使用的解决方案:

Except(DRILLDOWNLEVEL({[Geography].[Geography].[USA],[Geography].[Geography].[Canada]},,0), 
{[Geography].[Geography].[USA],[Geography].[Geography].[Canada]}) 

这对我来说确实有效。 说明:我深入了解了该工具提供给我的元素,该元素返回了孩子以及父母,然后我使用DHN的想法,除了父母之外,因此清理了一下列表。

希望这是可以理解的。

回答

0

其实,你可以使用Crossjoin来获得你想要的设置。

喜欢的东西

[Geography].[Geography].[USA] * [Geography].[Geography].[Canada] * [Geography].[Geography].[GB] 

但这仅仅是一个妥善的解决办法,如果你只有几个不同的搜索条件。

或者,您可以使用Except删除您不感兴趣的标准。

Except([Geography].[Geography].children, [Geography].[Geography].[Germany]) 

这将使你的[Geography]维度的全部内容,除中[Germany]之一。

希望这会有所帮助。的评论后

编辑以

好吧,这不是你的问题的一部分,但我认为你需要什么MemberToStr()功能。请查找文档here

我认为像这样的事情应该做的伎俩。

with member [Measures].[Cities] 
as  membertostr([Geography].[Geography].members.children) 
select [Measures].[Cities] on 0 
from [WhatEverYourCubeNameIs]  
where (
    [Geography].[Geography].[USA], 
    [Geography].[Geography].[Canada] 
) 

请注意,此查询完全未经测试。我也可能失去了我的一些技能,因为我已经有一段时间了,因为我使用了。您还必须动态创建查询,因为选择似乎与用户有关。但我相信你知道这一点。 ;)

+0

感谢您的快速回答。但问题是,这组成员是动态生成的。这意味着有人在下拉菜单中多选国家。所以,如果有人选择美国和加拿大(和儿童是城市) - 它应该返回一套像“西雅图,洛杉矶,温哥华......” – user3202100

+0

请找到我的扩展答案。下一次你应该更清楚你的问题。这是不明显的,你试图达到什么目的。尽管如此,希望它有帮助。 ;) – DHN

+0

感谢队友 - 我也编辑了我的问题。猜猜我们都找到了解决办法。 :) – user3202100

4

您可以使用Descendants method(链接描述的第四种形式使用集合作为其第一个参数。因此,

Descendants({ 
      [Geography].[Geography].[USA], 
      [Geography].[Geography].[Canada], 
      [Geography].[Geography].[GB] 
      }, 
      1, 
      SELF 
      ) 

应该提供你想要的。