我的立方体中有多对多维度(在其他常规维度旁边)。当我想在行计数度量中排除事实行时,我通常会在MDX
中执行以下操作SELECT [Measures].[Row Count] on 0
FROM cube
WHERE ([dimension].[attribute].Children - [dimension].[attribute].&[value])
这可能看起来比这个简单示例中的需要更复杂,但在这种情况下,WHERE有时会增长,也包括UNION。
所以这适用于常规尺寸,但现在我有多对多的尺寸。如果我执行上面的技巧,它不会产生所需的结果,即我想排除在多对多维度中具有该特定属性的所有行。
实际上它确实是MDX要求的,即计算所有行,但忽略指定的属性。由于事实表中的行可以在多对多维度中具有多个属性,因此仍将对该行进行计数。
这不是我需要的,我需要它明确地排除具有该维度属性值的行。另外,我可能会排除多个值。所以我需要的是类似于T-SQL的WHERE .. NOT IN(...)
我意识到我可以从[attribute] .all和[attribute]。& [value]中减去结果值,但是当UNIONing多个WHERE语句时,它将不再起作用。
有人知道如何解决这个问题吗?
提前致谢,
德尔塔
答案 0 :(得分:1)
我没有对此进行过测试,但我认为如果你的属性与行的粒度级别相同(可能实现为事实关系),我认为你可以这样做。
因此,如果您想要计算没有自行车产品类别的订单数量(假设订单ID和类别之间存在M2M关系),那么以下内容应该有效。 (您可以在联机丛书中找到有关EXISTS功能的更多信息)
[Orders].[Order ID].[Order ID].Members
- EXISTS([Orders].[Order ID].[Order ID].Members
, [Product].[Category].&[Bikes]
, "Order Facts")
虽然这可能会很慢,因为这种查询迫使SSAS引擎从低级别添加大量事实。
答案 1 :(得分:0)
您是否尝试过EXCEPT命令?它的语法如下:
EXCEPT({the set i want}, {a set of members i dont want})
答案 2 :(得分:0)
您可以使用过滤功能:
SELECT [Measures].[Row Count] on 0
FROM [cube]
WHERE Filter([dimension].[attribute].Children, [dimension].CurrentMember.MemberValue <> value)