六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 137|回复: 0

MDX层次结构在crossjoin函数中调用多次

[复制链接]

升级  36.35%

563

主题

563

主题

563

主题

探花

Rank: 6Rank: 6

积分
1727
 楼主| 发表于 2013-2-7 21:09:59 | 显示全部楼层 |阅读模式
问题来自SQL版提问,问题提出比较清晰
http://topic.csdn.net/u/20081208/18/662ee8ba-500e-491c-83f7-06729d7fc4fe.html

这里的多维数据集是foodmart的Warehouse and Sales。

1、查询销售量最高的2个品牌及其下销量最低的商品
      这个问题我使用下面语句:
       select {[Unit Sales]} on COLUMNS,
       Generate(
       TOPCOUNT([Product].[Products].[Brand].members, 2, [Unit Sales]),
       {[Product].[Products].CurrentMember}*
       BottomCount([Product].[Products].[Product].members, 1, ([Unit Sales],[Product].[Products].CurrentMember))
       )on ROWS
       from [Warehouse and Sales]
      但是报错说Products层次结构在crossjoin函数中调用多次,我不明白为什么?如果不能这样做,而Product维度又只有一个层次结构,那么应该这样才能得到结果呢?
  ...

我的第一个回答
>>Products层次结构在crossjoin函数中调用多次
错误说明已经很明白了,msdn的例子是两个不同纬度(层次结构上的),同一层次结构只要用CurrentMember.Children就可以了何必再交叉呢

反馈

mdx写成这样:
select {[Unit Sales]} on COLUMNS,  
Generate(
TOPCOUNT([Product].[Products].[Brand].members, 2, [Unit Sales]),
BottomCount([Product].[Products].CurrentMember.Children, 1, ([Unit Sales],[Product].[Products].CurrentMember))
)on ROWS
from [Warehouse and Sales]
每行前面就没有商品品牌了。

我的第二个回答

层次结构不能多次出现,但是维度可以多次出现,把你要的品牌在前面再交叉一次吧:p

但是不能用层次结构,我不知道原始纬度是什么,比如是[Products].[Brand]

rows这里改为

{TOPCOUNT([Products].[Brand].children,2, [Unit Sales])}*{Generate(...)} on rows

反馈

我试了你说的,确实可以的
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表