求一条计算排名的MDX语句

garmypykitty 2012-01-10 01:26:27
排名 北京 河北 河南 山西 陕西 ......
1 中南海 红河 红塔山 白沙 熊猫
2 红河 红塔山 红河 红河 中南海
3 白沙 中南海 白沙
4 ... ......
5 .... ...... .

如题,想要一个各地区的产品排名结果.
现有维度 [地区].[省].[省].members [品牌].[品牌].[品牌].members [Measures].[销售量箱]

各位大神谁以前有过求类似结果的经验,望不吝赐教.

我做了 针对 地区维度.currentmember 的topcount(品牌)命名集 , 但是ROW上的结果是固定的member ,
想把 品牌.currentmember.Properties( 'name' ) 加进去也一直不得其法.

谢谢了先!!!
...全文
351 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangyong1107 2012-02-03
  • 打赏
  • 举报
回复
with SET OrderedCities AS Order
([门店信息].[门店简称].[门店简称].members
, [Measures].[销售量], BDESC
)
MEMBER [Measures].[City Rank] AS Rank
([门店信息].[门店简称].CurrentMember, OrderedCities)

SELECT {
[Measures].[销售量],[Measures].[City Rank]
} ON 0,
{
[门店信息].[门店简称].[门店简称]

} ON 1
FROM [KPI]
shuohuameijiang 2012-01-31
  • 打赏
  • 举报
回复
学习,看不太懂。
garmypykitty 2012-01-31
  • 打赏
  • 举报
回复
谢谢哥哥, 我想要的是 指定品牌在各省销售前5的结果.

比如: [人头马] 这个品牌 . 在各个省都有销售, 但是只有 北京 天津 上海 的销售量是在所有品牌的销售中处在前5的. 那么结果就是.

排名 北京 天津 上海
1 人头马 XO 二锅头
2 茅台 水井坊 XO
3 二锅头 人头马 茅台
4 五粮液 五粮液 五粮液
5 XO 二锅头 人头马

人头马在 河北 河南 广东等其他地方 排名是在5名以后, 所以那些省份的就不显示出来了.
我想要达到这个过滤的效果.如果能直接出来就好了,现在还要搜索结果对比字符串,感觉比较麻烦.
idonot 2012-01-17
  • 打赏
  • 举报
回复
把上面的语句的修改一下就可以得到每种品牌销售量前5的省份。

select {[Measures].[销售量箱]} on columns,
Generate(topcount(([品牌].[品牌].[品牌].members,5,[Measures].[销售量箱]),
{[品牌].[品牌].[品牌].currentmember}*topcount([地区].[省].[省].members,5,[Measures].[销售量箱])
) on rows
from []
garmypykitty 2012-01-16
  • 打赏
  • 举报
回复
感谢楼上的回答,更做了省份的排名.
我自己写了一条MDX,麻烦指正一下. 如下:
with
member [measures].[top1] as ( topcount([品牌].[品牌].[品牌].members,5,[Measures].[销售量]).item(0).name )
member [measures].[top2] as ( topcount([品牌].[品牌].[品牌].members,5,[Measures].[销售量]).item(1).name )
member [measures].[top3] as ( topcount([品牌].[品牌].[品牌].members,5,[Measures].[销售量]).item(2).name )
member [measures].[top4] as ( topcount([品牌].[品牌].[品牌].members,5,[Measures].[销售量]).item(3).name )
member [measures].[top5] as ( topcount([品牌].[品牌].[品牌].members,5,[Measures].[销售量]).item(4).name )
set [TOP_N] as ( {[measures].[top1],[measures].[top2],[measures].[top3],[measures].[top4],[measures].[top5]})
select
[地区].[省].[省].members on 0,
[TOP_N] on 1
from
[sub_cube]
where (
[时间].[年月].[年].&[2011年].&[01月]
)

有一个产品 "[品牌].[品牌].&[0185]" ,如果我想要的规则变动为, 省份列上,只显示这个品牌在前5中的省份(一共30多个省,过滤后,可能就只有10几列了),即:查看该品牌销售在前5的各省品牌情况.

基于楼上的语句与我的语句,应该怎么修改.
P.S.
我尝试用 filter 和 exists 函数对 列上的 ...[省].members过滤, 但是exists返回是个元组集, 我看帮助里说 exists 嵌套使用,返回true什么的, 不是很明白.

idonot 2012-01-11
  • 打赏
  • 举报
回复
select {[Measures].[销售量箱]} on columns,
Generate(topcount([地区].[省].[省].members,5,[Measures].[销售量箱]),
{[地区].[省].[省].currentmember}*topcount([品牌].[品牌].[品牌].members,5,[Measures].[销售量箱])
) on rows
from []

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧