首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MDX WHERE NOT IN()在多对多维度中不等价

MDX WHERE NOT IN()在多对多维度中不等价
EN

Stack Overflow用户
提问于 2009-12-16 23:22:22
回答 3查看 17.9K关注 0票数 3

我的多维数据集中有一个多对多维度(与其他常规维度相邻)。当我想要排除行数度量中的事实行时,我通常会在MDX中执行类似以下操作

代码语言:javascript
运行
复制
SELECT [Measures].[Row Count] on 0
FROM cube
WHERE ([dimension].[attribute].Children - [dimension].[attribute].&[value])

这看起来可能比这个简单示例中需要的更复杂,但在这种情况下,WHERE有时会增长,也包括联合。

因此,这适用于常规维度,但现在我有了一个多对多维度。如果我执行上面的技巧,它不会产生期望的结果,也就是说,我想排除多对多维度中具有该特定属性的所有行。

实际上,它所做的正是MDX所要求的,即计数所有行,但忽略指定的属性。由于事实数据表中的一行在多对多维度中可以有多个属性,因此该行仍将被计算在内。

这不是我需要的,我需要它显式地排除具有该dimension属性值的行。另外,我可能会排除多个值。所以我需要一些类似于T-SQL的东西..不在(...)

我意识到我只能从attribute.all和attribute.&value中减去结果值,但是当UNIONing多个WHERE语句时,这就不再起作用了。

谁有好主意来解决这个问题?

提前谢谢你,

德尔塔

EN

回答 3

Stack Overflow用户

发布于 2011-08-02 13:57:26

我还没有测试过这一点,但我认为如果您有一个与行在同一粒度级别的属性(因此很可能是作为事实关系实现的),您可以这样做。

因此,如果您想要计算没有自行车产品类别的订单数量(假设OrderID和类别之间存在M2M关系),那么应该可以使用下面的方法。(您可以在联机丛书中找到有关EXISTS函数的更多信息)

代码语言:javascript
运行
复制
[Orders].[Order ID].[Order ID].Members 
- EXISTS([Orders].[Order ID].[Order ID].Members
       , [Product].[Category].&[Bikes]
       , "Order Facts")

尽管它可能相当慢,因为这种类型的查询迫使SSAS引擎从低级别添加大量事实。

票数 1
EN

Stack Overflow用户

发布于 2009-12-16 23:34:58

您有没有尝试过EXCEPT命令?它的语法如下:

EXCEPT({the set i want}, {a set of members i dont want})

票数 0
EN

Stack Overflow用户

发布于 2012-06-06 04:39:53

您可以使用Filter函数:

代码语言:javascript
运行
复制
SELECT [Measures].[Row Count] on 0
FROM [cube]
WHERE Filter([dimension].[attribute].Children, [dimension].CurrentMember.MemberValue <> value)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1915316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档