2010-12-14 63 views
0

我有包含地理销售数据的立方体。我想根据来自任意知名商店的前5名销售商(所有这些都是实际问题的简化版本),从所有商店中提取产品的销售。在MDX中,如何过滤基于TopCount的尺寸/轴

在SQL(可耻的是我),这将是

select StoreId, ProductId, Sales from cube where ProductId in 
    (select top 5 ProductId from cube where Store = @Store order by Sales desc) 

回答

1

可以使用TopCount函数这一点。只要你有一个名为产品尺寸和商店和一个名为措施[销售]:

Select [Measures].[Sales] On Columns, 
     CrossJoin([Store].Members,Generate(Topcount(Crossjoin({[Store][email protected][<StoreId>]},[Product].Members),5,[Measures].[Sales]),[Product].CurrentMember)) On Rows 
    From [Yourcube] 

更换<STOREID>有你感兴趣的特定店铺通过发现特定店铺前5生成将循环和只返回产品成员。然后将这个结果与所有商店进行交叉连接。

+0

我得到的远远与TopCount上不幸的是,我需要在所有的基础上,前5名的门店在短短的一个,如果对不起我的问题是有点不清楚销售。我需要将产品尺寸限制为所有商店的单个商店的前5个产品和报表。 – MrTelly 2010-12-14 10:19:54

+0

我明白了!我编辑了查询以在行中包含Store。 – Rudolf 2010-12-14 14:45:07

+0

我已经尝试了修正后的MDX,并且它将每个商店的前五名返回给我,而不是基于单个商店的前五名的每个商店的销售额。我正在寻找5行(6,如果你包括所有)返回 – MrTelly 2010-12-16 00:14:29

0

这将为ROWS轴中的商店提取前5个产品,然后根据[Store]维度的defaultMember选择这些产品的[Sales]。如果[Store] defaultMember是可聚合层次结构的根目录,则应该为每个商品销售所有商店。

选择

[措施]。[销售]开0,

TopCount中([存储]。[您的商店] * [产品] .Members),5,[措施]。[销售])ON 1

FROM [您的立方体]