2012-02-01 61 views
3

我已將一個子報表添加到我的報表中。目的只是爲了隱藏子報表,如果其中沒有數據。在SSRS2008 R2中隱藏空子報表

NoRows屬性在this thread on Microsoft forums被提及,但我想它是SSRS 2005作爲線程相當陳舊。

如果沒有數據,是不是有隱藏子報表的方法?我可以隱藏子報表中的Tablix,但我也需要隱藏子報表放置的行。爲此,我需要在主報告中指出子報告是否有數據。

你能給出一個線索來解決這個問題嗎?

回答

5

一年前我有類似的問題。我對此的模糊回憶:

我記得的默認行爲是,如果子報表中的數據集不返回任何行,SSRS將不會顯示子報表。這完成了你想要的一半,但不讓父報告知道是否隱藏子報告區域。 IIRC,NoRows屬性只控制在這種情況下顯示的內容,但在運行時不容易檢查,以更改其他屬性。

我最終的解決方案是在父報告中創建一個精簡查詢,它將指出子報告是否有任何行。我用它來控制行和子報表的可見性。

我懷疑有一個更優雅的答案...

+0

我從MSDN論壇類似的回覆之前,http://social.msdn.microsoft.com/Forums/en-US/sqlreportingservices/線程/ 3e2d45aa-a9b4-4c6c-b43a-e7e4d5222196。我會在這裏接受你的回覆。謝謝。 – AnarchistGeek 2012-02-02 09:24:56

0

AnarchistGeek

你好,

我剛剛碰到這個問題我自己。沿着「錯誤:子報表無法顯示」這一行的醜陋錯誤真的令我煩惱。

解決方案: 爲了解決這個問題,我只是將子報表嵌套在一個矩形中,並在該矩形的可見性上使用了一個表達式,如下所示。

ex。 = IIF(領域!Field1.Value也沒什麼,真的,假的)
(字段1在我的情況是從母公司報表中返回的數據列。)

進行更改相應:)

0

我結束使用子報表下方的矩形 - 這種方式如果子報表不返回任何內容,它下面的矩形將控制單元格的外觀 - 在我的情況下,如果子報表不返回任何內容,我需要將單元格灰化。

此線程給了我一個想法How to supress empty subreports in SSRS 2008但我甚至沒有使用表達式,因爲默認情況下,如果SSRS不返回任何內容,它將不會呈現子報表。

0

我遇到了這個問題,沒有答案爲我工作。在我的情況下,我正在將Crystal Report轉換爲SSRS報告,並正在使用每個組可能發生的子報告。這在Crystal Reports中相當簡單,因爲您可以使用複選框來抑制空白部分。

SSRS對我來說很有用,而且非常乾淨,在我的主要報表查詢中添加了一個子查詢/ CTE,該查詢獲得了子報表數據中將出現的行數。例如:

SELECT CommonCriteria, Count(*) [RowCount] 
FROM TableUsedInSubReport 
GROUP BY CommonCriteria 

然後,只需將此子查詢/ CTE加入到您對主要查詢的常用條件中即可。一旦你有了它,這很簡單,因爲你只需右鍵單擊tablix中最左邊的行並選擇Row Visibility。然後你使用這樣的表達式...

=IIF(Sum(Fields!RowCount.Value) > 0, false, true) 

這樣,如果有任何排在子報表中顯示它會顯示出來,如果有在子報告沒有行會隱藏它,而不是留白空間。

1

我把子報表放在它自己的一行中。然後我在文本編輯器中編輯了rdl文件,並將行高設置爲0(設計者不會讓你這樣做)。

在行高爲0的情況下,該行實際上被隱藏,直到子報表獲取數據,此時子報表確定行高度,並且這一切再次看起來正常。

編輯rdl的替代方法可能是在代碼中設置行的高度,但我還沒有研究過。

0

更簡單的解決方法是:

Sanjay Kumar Rajarao responded on 16 Oct 2013 12:15 AM Access sub report properties - visibility - show based on expression. Enter this code:

=IIF(RowNumber(Nothing)>0,False,True)

https://community.dynamics.com/gp/f/32/t/114129