雖然工作經驗相當的長,但是之前在SSRS上還沒有象今天這樣的經驗。這只是工作經驗的一點記錄。
1. 定義DataSet
定義DataSet的時后,可以采用Text的方式。用Text的方式可以用一段比較復雜的DB script來做復雜處理。可以在SSMS那里寫好DB script,調試好再copy paste到Text框里。Text框和SSMS那里的略有差別,在Text框里,如果一個@xxx形式的變量沒有相應的declare, 則會被自動定義成一個參數(成為報表的參數和Query的參數,而且系統自動將這兩個參數連接起來)。而這個特性在SSMS里是不存在的。SSMS的數據庫腳本要求所有的變量都有declare。所以如果你希望某些變量成為SSRS里的一個參數,再copy paste的時候,可以把這些變量的declare去掉,再拷貝過去。
2. Custom code
SSRS是基於VB的。Custom code必須寫VB代碼。但是這個地方不象Visual studio那里可以進行語法提示。 我們在Visual Studio創建一個VB.net 的工程,可以在Visual Studio寫好Function的代碼。編譯好。再copy paste到Custom code框中。
調用Custom code中定義的Function, 在報表中寫Code.<Functionname>(parameters)
3. 輸出Excel時出現hiding row, merged row
在網絡上找了一下。還是微軟官方的一個knowledge page寫得比較清楚。默認為inch或者厘米為單位,在設計器里會出現很多小數點后很多位的小數。微軟說這是因為轉換成excel時,轉換器用的是points為單位,除不近時,就會用hiding row來補償。我們要用points為單位,可以避免hiding row。定義高度和寬度的時候,用10pt,2pt之類的。
4. 輸出Word時選擇正確的Page size
首選在Report property里選擇好Page size, 如果是Letter, 寬8.5inch, 高11inch, 定義好白邊margin上下左右,比如各1inch, 那么在設計器里,Body的寬度就是8.5 - 1 -1 = 6.5inch, 高度是11 - 1 -1 = 9inch。於是選擇Body, 再在屬性框里設定其Width, Height。這樣設定的報表,輸出成Word時就是默認用的Letter紙張。
5. Subreport could not be shown錯誤的調試
Subreport could not be shown可能因為很多原因產生。我們不能簡單地認為是某種原因。其實一個最根本的解決辦法就是將報表部署到SSRS 服務器上,然后訪問報表,當問題顯現后,我們可以到SSRS服務器上 C:\Program Files\Microsoft SQL Server\#SSRS Instance Name#\Reporting Services\LogFiles目錄找到log文件。看log文件里的詳細錯誤信息。這樣你就可以知道出現錯誤的根本原因了。從而針對性的解決。當然了,這個解決辦法是針對RDL的,RDLC的報表是無法直接用這個辦法的。除非你把RDLC轉成RDL。
6. 一個SQL server Split string的腳本
在實際工作中用到了這個。存儲過程返回的是一個用分割符分割的串。所以這個大量的用這個小巧的方法。
declare @Input varchar(max) set @Input = '9,5,2,4,65,7,89,4,2,3,24,33,98' declare @delimiter varchar(max) set @delimiter = ',' declare @sql varchar(max) set @sql = 'select ''' + REPLACE(@Input, @delimiter, ''' as stringValue union all select ''') + ''' as stringValue' exec(@sql)
這里用到了replace和union all的主意。比起那些專門寫一個function的idea,相對來說輕量一些。