我的多维数据集中有一个多对多维度(与其他常规维度相邻)。当我想要排除行数度量中的事实行时,我通常会在MDX中执行类似以下操作
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语句时,这就不再起作用了。
谁有好主意来解决这个问题?
提前谢谢你,
德尔塔
发布于 2011-08-02 13:57:26
我还没有测试过这一点,但我认为如果您有一个与行在同一粒度级别的属性(因此很可能是作为事实关系实现的),您可以这样做。
因此,如果您想要计算没有自行车产品类别的订单数量(假设OrderID和类别之间存在M2M关系),那么应该可以使用下面的方法。(您可以在联机丛书中找到有关EXISTS函数的更多信息)
[Orders].[Order ID].[Order ID].Members
- EXISTS([Orders].[Order ID].[Order ID].Members
, [Product].[Category].&[Bikes]
, "Order Facts")
尽管它可能相当慢,因为这种类型的查询迫使SSAS引擎从低级别添加大量事实。
发布于 2009-12-16 23:34:58
您有没有尝试过EXCEPT命令?它的语法如下:
EXCEPT({the set i want}, {a set of members i dont want})
发布于 2012-06-06 04:39:53
您可以使用Filter函数:
SELECT [Measures].[Row Count] on 0
FROM [cube]
WHERE Filter([dimension].[attribute].Children, [dimension].CurrentMember.MemberValue <> value)
https://stackoverflow.com/questions/1915316
复制相似问题