我想找到一种方法将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填充? –