2016-07-26 122 views
17

當我們使用SSRS創建報表時,我們可以使用數據集窗口中的查詢框來創建自定義查詢。但在本地報告(.RDLC)中,當我們想要創建報告時,我們應該設計一個設計的數據集來報告。使用微軟報表數據集

enter image description here

的問題是,當我們有100份報告中,我們也應該有100 Datasets.Currently我們使用DataSet這些字段(F1,F2,F3,...,F100),並結合我們之前的DataTable報告我們更改了數據表列的名稱。但它的可讀性很低。

我想問問有沒有更好的方法來解決這個問題?

感謝

+0

你沒事吧與在運行時創建dynmaic數據集的解決方案,並將其設置爲數據源爲您的報告? – lokusking

+0

我不能真正udnerstand你的問題。你想知道你的GUI是否過於複雜,或者如果你的代碼的可讀性可能需要一些提升? 無論哪種方式,它會幫助很多代碼片段和或截圖。 – Megajin

回答

1

我可能需要以更多的信息,以幫助 - 你真的你有標記領域的數據集F1,F2,F3,...那你現在需要綁定到具有標記(例如)Id,CustType,IsActive,...的列的實際表?

如果是這種情況,那麼我會建議使用視圖,將每個字段名稱別名爲F1,F2,...這聽起來像您原來的問題一樣多的工作,但一切都可以自動化。

創建這100個視圖可以通過腳本實現。這個腳本可以通過運行一些智能T-SQL來獲得存儲在SQL Server中的模式數據並輸出所需的腳本。

看一看How can I get column names from a table in SQL Server?即可開始使用。

您可能需要在您的T-SQL中使用遊標來遍歷模式數據並輸出腳本以創建視圖。

最後,如果您需要以相同的方式修改您的每個100個SSRS報告,請不要忘記每個都以報告定義語言(XML)存儲,因此您可以編寫一個小型實用程序, XML文件並進行必要的更改。不要忘記先備份這些文件,然後讓新的應用程序鬆動。

我希望這一切都有所幫助,答案還沒有到達太晚。

+0

謝謝,但我知道所有你說的,我嘗試了一些。所以我尋找更好的解決方案 – Arian

3

其最佳解決方案是對數據集進行分組。 您可以將他們的業務避免分組數據集。例如POLICY.xsd,USER.xsd,INVOICE.xsd並將其他數據集添加到xsd文件中。

例如在visual studio中,您會看到10個數據集文件。但每個項目都有不同的數據表。

第二次升級是你會寫出更好的t-sql。當你一般選擇你的列的類似報告,你會使用相同的數據表。

例如報告包括5 columsn A1,A2,A3,A4,A5 B類報告包括6列A1,A2,A3,A4,A5,A6

這些報告將使用B類報告的數據表

0

我必須承認,我並不完全理解到目前爲止提供的信息存在的問題,但這裏有一個解決方案,可能會對您有很大的好處。

您是否嘗試過從存儲過程創建報告?通過這樣做,RDLC文件將不包含查詢,而是查看存儲過程中查詢的定義,並在RDLC文件內創建數據集。然後在運行時,以代碼執行存儲過程,並將返回的數據傳遞到RDLC文件中執行。

這樣做的好處是查詢被封裝爲數據庫對象,最終不會在項目中產生數百萬個數據集,並且您可以從報告中取消查詢,所以如果您有6個版本的報告全部使用相同的字段,但使用不同的WHERE子句,例如,您可以只使用1個報告(並在運行時調用相關的存儲過程)。

0

雖然很高興看到Minimal, Complete, and Verifiable example我也會給它一個鏡頭。

你可以做的是,在你的數據庫中創建一個表,把你需要的數據與每個DataSet相關,並循環這些數據。

ID .............字段........................ .................. QueryType .............. SqlQuery/StoredProcedure

1 ......... ...... ProducID,ProductName ............ 0 ............................ ..SP_GetBasicProductInfo

2 ............... OrderID,ProductId ..................... 0 .. ............................ SP_GetOrderIdsByProduct

3 ... ............ CustomerID,CustomerName .... 1 ..............................選擇客戶ID,客戶名稱從Northwind.Customers

這樣,您就可以得到字段映射到和SQL查詢來執行。 您可以最終將此信息傳遞給您的Data Access Layer以執行查詢並填寫您需要的數據集。

你可以嘗試一切轉換爲字符串,甚至使用分隔符爲每種類型的如int|ProductID,string|ProductName