MDX条件问题

kkhui 2009-07-07 10:46:27

刚接触MDX,帮助也看不大懂,现有一个case,需要统计用户数目

用户的一个属性表
USER ATTR
A ATTR1
B ATTR2
A ATTR2
B ATTR3

现在要查出即有ATTR1,又有ATTR2属性的用户,MDX怎么写啊
多谢
...全文
196 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
华芸智森 2009-07-09
  • 打赏
  • 举报
回复
可以考虑用 Intersect 取交集元素.
如:
Intersect(Filter([用户].Members,[用户属性].CurrentMember.Properties("ATTR"))="ATTR1"), Filter([用户].Members,[用户属性].CurrentMember.Properties("ATTR"))="ATTR2")

不知道谁有更好的解法没有?
kkhui 2009-07-08
  • 打赏
  • 举报
回复
这是一个多对多的中间表,因为属性可能较多,所以是一个纵表
华芸智森 2009-07-08
  • 打赏
  • 举报
回复
看了楼上的回复,我想可能是这样,我一般将属性设计成横向.你的是纵向.横向是一对一,纵向可能是一对多.
bendanlzh 2009-07-08
  • 打赏
  • 举报
回复
这个跟你的cube的结构有关系,如果在处理时user ,attr都是被处理成了两个attributeHierarchy并且都与key attribute关联,而这种user与attr的多对多关系,在数据量不太大时可以用用genrate 生成({user},{attr1,attr2})的所有元组集然后从元组集中析出user集合就是既有attr1又有attr2的所有user。如果attr没有处理成attributeHierarchy而只是关联到了key attribute上,则上面的方法可行。但是在不同mdx实现上会有差异,有些在filter函数循环[用户]取成员属性时可能不会同时取attr1,attr2.可能只取排在前面的一个,这样会导致filter的条件永远是假。
华芸智森 2009-07-07
  • 打赏
  • 举报
回复
WITH SET [用户] AS 'Filter([用户].Members,[用户属性].CurrentMember.Properties("ATTR"))="ATTR1" AND [用户属性].CurrentMember.Properties("ATTR"))="ATTR2"'
华芸智森 2009-07-07
  • 打赏
  • 举报
回复
你的维应该还没有设置属性.
你截个图过来看看.
kkhui 2009-07-07
  • 打赏
  • 举报
回复
正在执行查询...
用户 集的定义包含一个循环引用。

执行完毕
华芸智森 2009-07-07
  • 打赏
  • 举报
回复
WITH SET [用户] AS 'Filter([用户].Members,[分类维度].[分类].CurrentMember.Properties("Cate Id")="attr1" AND
[分类维度].[分类].CurrentMember.Properties("Cate Id"))="attr2"'

select [Measures].[分类下用户总计] on columns,
{ [用户] } on rows
from [Cube]
kkhui 2009-07-07
  • 打赏
  • 举报
回复
谢谢LS

还不大懂,建两个维度,分别在用户表和属性表上建吗

select [Measures].[分类下用户总计] on columns,
{[分类维度].[分类].Children} on rows
from [Cube]
得到的是一个分类下的用户数,那要得到两个分类的交集用你的这个怎么写后面的

WITH SET [用户] AS 'Filter([用户].Members,[分类维度].[分类].CurrentMember.Properties("Cate Id")="attr1" AND
[分类维度].[分类].CurrentMember.Properties("Cate Id"))="attr2"'

7,388

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 数据仓库
社区管理员
  • 数据仓库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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