MDX:过滤元组的有效方法,其中特定列不是空的

  • 本文关键字:过滤 元组 有效 MDX 方法 ssas mdx
  • 更新时间 :
  • 英文 :


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

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

如果我想要排除所有三个度量为空的行,我会使用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都是空的?

我想你正在寻找类似的函数NonEmpty。http://msdn.microsoft.com/en-us/library/ms145988.aspx下面是它们之间的一个很好的解释:http://thatmsftbiguy.com/nonemptymdx/

只是以一种更易读的方式重新输入结果查询:

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

如果你不使用WHERE,你必须非常仔细地检查你的NonEmpty()究竟运行在什么上面。

最新更新