3

我的多维数据集中有一个多对多维度(在其他常规维度旁边)。当我想在我的行计数度量中排除事实行时,我通常在 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 语句时,这将不再起作用。

有人知道如何解决这个问题吗?

提前致谢,

三角洲

4

3 回答 3

1

我没有对此进行测试,但我认为如果您的属性与行的粒度级别相同(因此可能实现为事实关系),您可以这样做。

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

[Orders].[Order ID].[Order ID].Members 
- EXISTS([Orders].[Order ID].[Order ID].Members
       , [Product].[Category].&[Bikes]
       , "Order Facts")

虽然它可能会很慢,因为这种查询会迫使 SSAS 引擎从低级别添加很多事实。

于 2011-08-02T05:57:26.277 回答
0

您可以使用过滤器功能:

SELECT [Measures].[Row Count] on 0
FROM [cube]
WHERE Filter([dimension].[attribute].Children, [dimension].CurrentMember.MemberValue <> value)
于 2012-06-05T20:39:52.990 回答
0

您是否尝试过 EXCEPT 命令?它的语法如下:

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

于 2009-12-16T15:34:58.317 回答