1)單元格顯示行號,兩種方法實現,相當SQL row_number() order ():,
=Rownumber(Nothing)
=Runningvalue(1,sum,nothing)
2)按組區分行號,兩種方法實現:
=rownumber("組名")
=runningvalue(1,sum,"組名")
3)零除零報錯解決方法:
報表設計面板(編輯處外面空白區),選擇報表屬性---代碼-- 自定義代碼:
public function divide(x as double, y as double) as double
if y=0.0 then
return 0.0
else
return x/y
end if
end function
接下來在表達式裏輸入你要相除的欄位或者數據
=Code.divide(sum(值1),sum(值2))
還有一種方法=A/IIF(B=0,99999999999999,B),但你不能這麼寫:IIF(B=0,0,A/B) 會產生BUG,不要問爲什麼,試試就知道。
4)SSRS 裏實現excel sumifs功能(如果你還不理解excel sumifs 的功能,請先查看):
示例:sum(IIF(Fields!Team.Value="East",Fields!LeaseArea.Value,0))
運行結果是 #ERROR
修改如下:
sum(IIF(Fields!Team.Value="East",cdbl(Fields!LeaseArea.Value),0.00))
原因:採用cdbl將字段轉換爲雙精度值Double,這樣類型計算纔會正確。
5)lookupset 函數應用:
如果經常使用excel的同事,應該對excel的vlookup 函數不陌生,SSRS 也有類似功能的函數 lookupset,但vlookup 有單條件和多條件查找,這裏說SSRS的兩個條件使用。
單條件:
=lookupset(數據集1滿足條件值列,數據集2滿足條件值列,要返回的值,"數據集1名") 就是兩個數據集間數據提取。
多條件:
LookupSet(Fields!店鋪名稱.Value+“| |”+Fields!時間分析類1.Value+“| |”+Fields!時間分析類2.Value,
Fields!店鋪名稱.Value+“| |”+Fields!時間分析類1.Value+“| |”+Fields!時間分析類2.Value,
Fields!貨品ID.Value,"DataSet3").Length
也可自定義滿足固定值,如:
join(lookupset(Fields!mon2.Value+“||”+"營業", Fields!mon2.Value+"||"+Fields!team.Value,Fields!fpqty.Value,"DataSet4"),",")
6)VbcrLf 函數應用:
這個函數主要是換行顯示效果,相當SQL 的(select 'A' +CHAR(13)+CHAR(10)+'B'),下來介紹SSRS裏面如何實現這個功能。
比如你的數據值是這樣顯示:11-22,現在要 22 在11的下面顯示
=left(Fields!비고.Value,instrrev(列值,"-")-1)+vbcrlf+right(列值,len(列值)-instrrev(列值,"-")) 這樣22 就自動換行顯示了。
7) 顯示登錄到SSRS 的用戶名
表達式裏輸入=User!UserID
8)顯示打開報表時所花費的時間
表達式裏輸入:="RunningTime " +
CStr(DateDiff("s",Globals!ExecutionTime,Now())\60\60)+ ":" +Format((DateDiff("s",Globals!ExecutionTime,Now())\60) mod60,"00") + ":" +Format((DateDiff("s",Globals!ExecutionTime,Now()) mod 60),"00")
9)通過數據集定義選擇時間參數
當前月的第一天到最後一天
SELECTCONVERT(DATE,dateadd(dd,-day(getdate())+1,getdate()),112)as date1,
(SELECTCONVERT(DATE,DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,getdate()),120)+'1'),120))as date2
上個月的第一天到最後一天
select convert(date,dateadd(dd,-day(dateadd(month,-1,getdate()))+1,dateadd(month,-1,getdate())),120)as date1,
convert(date,dateadd(dd,-day(getdate()),getdate()),120)as date2
當前月的第一天到當前天
SELECT CONVERT(DATETIME, LEFT(CONVERT(CHAR(8), GETDATE(),112),6) + '01') as date1,
(select convert(datetime,CONVERT(varchar(10), getdate(),120)))as date2
10)連接數據源的設置
連接字符串內容:Data Source=服務器IP;Initial Catalog=數據名,如圖
今天先寫到這裏,改天再繼續。。。。。。。。。。