如何在MDX中不指定特定成员时正确使用TOPCOUNT函数?
解决MDX中TOPCOUNT与多成员集合的问题
问题分析
你当前的查询是将SpecificStores(排除Store3的所有门店)与[Products]做笛卡尔积,直接从所有「门店+产品」的组合里取QTE最高的3个,这会导致结果可能集中在少数高销量的组合上,而非按每个门店维度拆分出各自的TOP产品。
解决办法
如果你的需求是每个门店单独选出Top3产品,需要用GENERATE函数遍历门店集合,为每个门店单独计算TOP产品,再合并结果:
WITH SET SpecificStores AS EXCEPT([Stores].CHILDREN,[Stores].&[Store3]) SET TopProducts AS GENERATE( SpecificStores, TOPCOUNT([Stores].CURRENTMEMBER * [Products], 3, [Measures].[QTE]) ) SELECT {[Measures].[QTE]} ON COLUMNS, {TopProducts} ON ROWS FROM [MyCube];
代码说明
GENERATE会逐个处理SpecificStores里的每个门店成员[Stores].CURRENTMEMBER指代当前正在处理的门店,确保每个门店单独和产品叉乘后计算TOP3- 最终
TopProducts是所有门店各自TOP3产品的集合,能得到按门店分组的预期结果
如果你的需求本来就是跨门店取TOP3的「门店+产品」组合,那当前结果就是数据本身的真实排序,可检查数据是否符合预期。
内容的提问来源于stack exchange,提问作者Nico
相关产品推荐
相关产品推荐

