2013-05-09 34 views
1

假設我有一個MDX查詢是這樣的: MDX:有效的方法來過濾特定列不空的元組?

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

如果我要排除所有三個措施是空行,我會用選擇不空的,這工作快。但我實際上需要排除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

我認爲你正在尋找類似的功能NonEmpty。 http://msdn.microsoft.com/en-us/library/ms145988.aspx 下面是他們之間的一個很好的解釋:http://thatmsftbiguy.com/nonemptymdx/

+0

我見過NonEmpty()。 $ 1M的問題是我該如何編寫SELECT,即如何向NonEmpty的結果添加一列。你能想出一個例子嗎? PS:其實,我沒有意識到NonEmpty()有第二個參數。這可能會導致我想要的。但是仍然有一個例子值得歡迎。 – 2013-05-09 23:23:36

+0

好的,對NonEmpty()的更多調查實際上是在第一個參數和第二個參數之間進行CROSS JOIN,因此向它傳遞兩組度量不起作用。 可以嘗試在行軸上使用NonEmpty()子句和一些度量,但是這會忽略任何過濾和不是的,因此也是有問題的。仍然試圖找出它...... – 2013-05-10 17:37:03

+0

NonEmpty()與WHERE子句一起做了訣竅。在SELECT Measure1,Measure2,Measure3 ON COLUMNS NonEmpty([Region]。[Region]。[Region],{[Measure1],[Measure2]})ON ROWS WHERE - 一些過濾器。如果你不使用WHERE,你必須非常小心地檢查你的NonEmpty()運行的是什麼。 – 2013-05-20 19:59:38

0

只需重新鍵入更可讀的方式生成的查詢:

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

如果不使用WHERE,你必須非常小心檢查你的NonEmpty()運行的是什麼。

相關問題