我想找到一種方法將SSRS中的字段四捨五入到小數位的動態數字。我知道我可以動態地對其進行格式化,並且最終可能會這樣做,但我的許多用戶將直接將此報告發送到Excel,並且希望具有實際的數字字段。四捨五入SSRS中的可變小數位數
我的T-SQL代碼包括這些聲明的變量:
NumLong01 DECIMAL(23,8)
, NumLongDP01 INTEGER
第一組在該表中的條目是用於報頭和舍入參數。所以我添加值,這兩個爲:
NULL
,4
,然後我添加了實際的表值:
987654321.87654321
,NULL
這樣,我可以把一個全系列的數字到表中,但它們都有以相同的方式格式化。
運行此查詢產生:
當我去報表製作,我場有這樣的表達:
=Fields!NumLong01.Value
如果我想格式化某個小數位數,我可以這樣做:
=Round(Fields!NumLong01.Value,2)
或其他一些。我試圖這樣做,雖然是使之動態:
=Round(Fields!NumLong01.Value,First(Fields!NumLongDP01.Value, "DataSet1"))
這結束了四捨五入到0位小數。後來我學會了 - 僅僅使用我的領域的後半部分 - 這是一個NULL值。所以我嘗試了Sum而不是First - 再次,只是在我的領域 - 得到了我期望的4。太好了,所以現在我有我的號碼,我只是把在爲我取整:
=Round(Fields!NumLong01.Value,Sum(Fields!NumLongDP01.Value, "DataSet1"))
唯一的問題是,這會產生一個錯誤。接下來我問自己是否因爲某種原因沒有把它看作一個數字。所以我只是把它添加到我的領域。沒問題。所以我真的不知道它在做什麼。它是否認爲這個領域可能會變得很長,以至於會導致非法的小數位數?現在
,我可以這樣做:
=IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 8,Round(Fields!NumLong01.Value,8),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 7,Round(Fields!NumLong01.Value,7),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 6,Round(Fields!NumLong01.Value,6),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 5,Round(Fields!NumLong01.Value,5),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 4,Round(Fields!NumLong01.Value,4),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 3,Round(Fields!NumLong01.Value,3),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 2,Round(Fields!NumLong01.Value,2),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 1,Round(Fields!NumLong01.Value,1),Round(Fields!NumLong01.Value,0)))))))))
...這工作。但它似乎是這樣一個荒謬的方式去做。
我也很自然地只傳遞了t-SQL中的舍入數字。但後來我遇到了在報表上只顯示一定數量的小數的問題,因爲在數字格式中,出於某種原因,它不允許有一個動態的小數位數。
任何想法,將不勝感激。
繼這篇文章中,我試圖用「N4」的格式,它實際上在Excel工作就我可以告訴。過去,我修改其他報告的情況並非總是如此,但我不知道爲什麼。所以如果我可以讓它像那樣工作,我很滿意。但我仍然有興趣知道爲什麼我最初的四捨五入方法不符合我的期望。 – DaveX
新的更新:仍然有我以前在Excel中的相同問題。只有一行,我沒有任何加起來,所以我只是加了一個像4的固定數字,這給了我一筆錢。因此,它一定是Excel中的數字字段,對吧?錯誤。當我做多行時,我會在右下角得到一個數(不是總和),我的數字總和爲0.所以我回到了我的瘋狂的IIf集。 – DaveX
在我提出解決方案之前,只需進行一些簡要的查詢。必須將小數點位置指定爲數據集的第一行,並且允許您更改表格結構嗎?最後,爲什麼你特別需要有一個變量(動態)的小數位數?是否避免0填充? –