SQL報表(Report Builder)里面的幾個常見問題(持續更新)


SQL報表常常會遇到在表格中的相除,如果分母為零,一般會顯示錯誤號,我們可以這么處理:(加上是A/B)

=A / iif(B=0,99999999999999, B)

但是我們不能這么寫:

=iif(B=0,0,A/B)  //我們不能這么寫,會產生BUG,至於什么BUG,你們可以自己試試

我們假設報表中的某一個格子的名字為A,我們在A中需要引用另一個格子B的值,在這種情況下,我們通常會把B中的計算公式再次引用在A中復制一遍,這樣很導致很麻煩。

我們可以在A中直接這么寫:

ReportItems!B表的名字.Value

這樣就不需要再一次得把公式寫一遍了

在報表曲線圖中的橫坐標,倘若我們需要動態得變化橫坐標,我們這時候一般會把軸選項設置為自動,但是這樣往往得不到我們想要的結果,下面的例子就是根據參數(開始時間和結束時間)的間隔動態地改變橫坐標的樣式

水平軸屬性》數字》自定義

=IIf(Parameters!startime.Value=Parameters!endtime.Value,"",iif(DateAdd(DateInterval.day,-4,Parameters!endtime.Value)>=Parameters!startime.Value,"MM/dd","M/d H:mm"))

 四

如果在表內求和,而不要GROUP,一般用在有很多求和的報表里面,這個時候只要用這種方法求出一列,然后在report builder里面直接填寫first(列)即可(不能SUM),代碼如下:

SUM(Periodic ) OVER (partition by A) as AAA,
--表示對列Periodic 求和(等同於GROUP A,但是會在A的每一項后面顯示)
SUM(Periodic ) OVER (partition by A,B) as BBB,
--表示對列Periodic 求和(等同於GROUP A,B,但是會在A,B的每一項后面顯示)
SUM(Periodic ) OVER (partition by 1) as CCC
--對總的Periodic求和,這一列的數字都是一樣的

 五

想要把存儲過程的輸出內容賦值到參數上面(這個是copy的)

create procedure ProTest
(
         @name varchar(10),
         @money int output
)
as
begin
        if(@name='1')
                  set @money=1000
        else
                  set @money=2000
end

假設是上面的存儲過程:ProTest,這個存儲過程返回的是@money 這個參數的值,那么當我們在另外一個存儲過程中調用此存儲過程的時候如何獲取這個參數呢,方法如下:

declare @m int ---用來接收返回值的變量
exec ProTest @name='1',@money=@m output -- 一定要注名是output

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM