2010-09-14 57 views
6

在Common Services - > Text - > Item下的SQL Server Reporting Services 2008 R2中的Expression builder窗口中,有一個稱爲Filter的表達式。這似乎對應於.NET框架中的Strings.Filter method。 Filter的說明如下:如何在多值參數中使用String.Filter

根據指定的過濾條件返回包含String數組子集的從零開始的數組。

的實施例是如下:

=Filter(Parameters!MultivalueParameter.Value, "3", True, CompareMethod.Binary) 

的示例和描述暗示可以檢查一個多值參數,看是否選定的值中的至少一個等於該匹配參數。我一直無法得到這個返回#Error以外的任何東西,這意味着多值參數不是一維數組。參數!MultivalueParameter.Value.GetType()。ToString()返回System.Object []。

有誰知道如何讓這個工作?我使用下面的解決,以檢查是否在多值參數選擇值:

=IIF(InStr(" " + JOIN(Parameters!MultivalueParameter.Value, " ") + " ", " 3 ", CompareMethod.Text), false, true) 

上面的代碼工作,但它是相當難看。如果它支持這種檢查,我寧願使用Filter函數。任何人都可以給出一個有效的代碼示例嗎?

+1

什麼'參數!MultivalueParameter.Value.GetType()。ToString()'給你嗎? – 2010-09-18 05:54:35

+0

偉大的問題。當我今天回家並且讓你知道時,我會檢查這一點。 – 2010-09-18 15:31:08

+0

它返回了System.Object []。我在這個問題上加了這個。 – 2010-09-20 22:26:20

回答

6

問題正在發生,因爲來自MSDN的示例對於此討論有點缺乏。確實,Filter(Parameters!MultivalueParameter.Value,「3」,True,CompareMethod.Binary)返回一個數組,但就SSRS而言,不能簡單地將數組輸出到報表。這是你看到錯誤的原因之一。

另外,SSRS似乎在處理Filter函數的兩個可選參數時遇到問題。把這些留在外面,你會很開心。

您可以立即通過輸出數組的長度到textboc來測試。

=Filter(Parameters!MultivalueParameter.Value, "3").Length 

以上應該會產生一個帶有過濾參數整數長度的文本框。

所以,pullling這一切在一起,你可以用下面的達到您想要的結果:

=IIF(Filter(Parameters!MultivalueParameter.Value, " 3 ").Length > 0, "false", "true") 
+0

我嘗試了第一個表達式,它返回一個空白文本框。我試過第二個表達式,它返回一個空白的文本框。我試着對你的建議進行試驗,但是它要麼返回空白值,要麼返回#Error。 – 2010-09-21 23:40:45

+0

爲第一個表達式獲取空白文本框是一個好兆頭,至少它不是錯誤。這是一個奇怪的結果,但仍然可能用於故障排除。代碼的第二位長度方法列在錯誤的地方。我已經更新了它。我有這個測試報告,所以肯定有一個工作解決方案。我們只需要弄清楚爲什麼它不適用於您的報告。 – 2010-09-22 00:30:47

+0

更進一步。第一個表達式返回一個空白。第二個表達式返回false。我將嘗試使用.Label而不是.Value。 .Value由1到100(粗略)組成,而.Label由英文單詞組成。我將更改值以檢查過濾器以匹配其中一個英文單詞。 – 2010-09-22 00:52:35

2

我曾經在2008年SSRS多值參數的表矩陣來顯示/隱藏列。

但是我永遠無法利用返回的實際子字符串,並且只能通過長度來使用結果。因此,對於每一列(第1,第2,第3和第4列),我將使用此代碼(true/falsepart不是如上所示的字符串)。

嘗試其他想法的人:

=Filter(Parameters!MultiOption.Value,"3",true).GetValue(0).ToString 

可以輸出3,但是在假條件,的GetValue(0)是出界。

=IIF((Filter(Parameters!MultiOption.Value,"3",true).Length>0), 
Filter(Parameters!MultiOption.Value,"3",true).GetValue(0).ToString, 
"",) 

哪一個有效應該只返回子字符串值,如果存在的話。它雖然沒有這樣的工作。

達拉斯

相關問題