2013-04-16 55 views
2

我正在使用Report Builder 3矩陣並指定行組和列組。基本上它是一個主細節類型的情況,在我的情況下,實體是中繼和聯繫人。每個繼電器都有多個觸點。下面給出了兩者的一些重要特性。隱藏(或篩選)列組的某些列

繼電器:
名稱(簡單的現場),
類型(枚舉字段),
聯繫人(導航領域的聯繫人一對多實體。)

聯繫人:
顯示名稱(簡單字段)
AllotedToSheet(簡單字段)。

下面是報告的樣子。使用列分組從「顯示名稱」字段聯繫人表生成列。

Generated Report Sample

現在這裏是問題。我在上面的報告中標記了2個區域。這是因爲我有兩種類型的繼電器(現在說)。 「聯繫人」表的「顯示名稱」字段對於特定的中繼類型而言是相同的,因此我在報告中獲得了兩組列(標記爲)。基於中繼類型,我想爲整個報告生成或顯示一組列,因爲另一組對於中繼類型沒有意義,並且每個中繼類型都將具有其自己生成的報告(rdl)。那麼我怎麼做到這一點。

總之,使用列組生成的列,如何從我的報告基於一些數據庫field.value條件過濾掉或隱藏某些列

編輯:報表設計器中查看 enter image description here

+1

我有幾個問題。什麼是你的SQL,因爲如果你不想讓他們這些列不應該通過這些列?此報告僅適用於一種繼電器類型? – glh

+0

生成的SQL查詢只有JOIN用於相關表的列。我在DATASET查詢中爲Relay_Type添加了一個WHERE子句,現在只生成相關的列。所以現在,我不必爲隱藏某些列添加可見性表達式。無論如何,生成列的可見性不會隱藏列,但會將其轉換爲列的空白空間,因此對我沒有任何用處。我來到了幾個博客,我可以證實這一點。所以你對你的評論絕對正確,這應該在SQL本身中處理。我會將你的評論標記爲有用 – Jatin

回答

0

受@ glh建議直接修改DataSet查詢的啓發,我只能生成與特定Relay_Type相關的記錄(在我的情況下爲列)。在查詢中,我只需添加一個SQL WHERE子句,該子句將只加載特定Relay_Type的詳細記錄。通過這種方式,與特定的Relay_Type相關的唯一列由DataSet中的查詢生成。因此,不需要更改可見性表達式來隱藏列。事實上,可見性表達式並沒有隱藏列,它只是「消除了」在報告中佔據了空間。所以修改SQL似乎是我的情況更好的選擇。

Nirvan。

2

您是否嘗試將列可見性設置爲基於表達式?根據需要爲不同的中繼/列組合

=IIf(Fields!RelayType.Value = "Relay1", false, true) 

更新:

enter image description here

enter image description here

設置表達的東西等。

+0

其實,我不認爲這是可能的。列是基於「列組」動態生成的,我沒有單獨訪問報表設計中的那些生成的列。如果您看到我在問題中發佈的圖片,則前三列是我可以真正設置可見性等屬性的唯一列。 「Relays_Name」列以外的所有列都是根據聯繫人表數據動態生成的。 – Jatin

+0

請參閱上面原始問題中添加的設計師視圖圖像。這將使我的問題更清楚。 – Jatin

+0

@Nirvan自從我和動態列一起工作已經有一段時間了,但我認爲它們是否動態創建並不重要。您在報告生成器中有一列,只需將Ian的解決方案應用到該列,並且該列對該組中的所有列都有效。你測試了嗎? – eestein

1

我認爲最好的方式是通過SQL中的連接來連接表。這將刪除數據集中正在填充的額外列。

+0

是的,我認爲編寫SQL而不是生成它可能是一個很好的調用。我實際上有一些IBM MAINFRAME的經驗,我們使用原始SQL很多,而且我仍然有宿醉。但是,現在在這個對象時代,我懷疑開發人員是否擁有強大的SQL基礎。所以它對於一些人來說並不是很好的選擇。謝謝 – Jatin

+0

瞭解,在sql中這樣做的好處在於性能,因爲報表必須檢索所有數據,然後將其刪除,然後根據需要顯示它並隱藏列。 – glh

相關問題