SSRS 常用函數、表達式

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=數據名,如圖

 

 

 

 

 

 

 

今天先寫到這裏,改天再繼續。。。。。。。。。。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章