MDX:过滤特定列不为空的元组的有效方法?

时间:2013-05-09 20:18:02

标签: ssas mdx

假设我有一个像这样的MDX查询:

SELECT Measure1, Measure2, Measure3 ON COLUMNS
[Region].[Region].[Region] ON ROWS
FROM TheCube

如果我想排除ALL THREE度量为空的行,我会使用SELECT NON EMPTY,它可以快速运行。但实际上我需要排除Measure1和Measure2都为空的行,即使Measure3有一个值 - 因为在这个特定的立方体中,Measure3总是有一个值,所以NON EMPTY根本没有效果。

我能做到

SELECT Measure1, Measure2, Measure3 ON COLUMNS
FILTER ([Region].[Region].[Region], 
       NOT (IsEmpty(Measure1) AND IsEmpty(Measure2)) ON ROWS
FROM TheCube

它甚至可以工作,但它需要永远:比上面的NON EMPTY查询长一个数量级。事实上,即使我用一个总是正确的表达式来过滤,比如FILTER(...,1 = 1),它也需要很多时间。

是否有更有效的方法来过滤掉Measure1和Measure2都为空的行?

2 个答案:

答案 0 :(得分:2)

我认为你正在寻找类似的功能NonEmpty。 http://msdn.microsoft.com/en-us/library/ms145988.aspx 以下是他们之间的一个很好的解释:http://thatmsftbiguy.com/nonemptymdx/

答案 1 :(得分:0)

只需以更易读的方式重新输入生成的查询:

SELECT Measure1, Measure2, Measure3 ON COLUMNS
NonEmpty([Region].[Region].[Region], 
         { [Measure1], [Measure2] }) ON ROWS
WHERE -- some filter

如果您不使用WHERE,则必须非常小心地检查您的NonEmpty()运行的确切内容。