Reporting services 用零替换空值
我知道这个问题以前被问过很多次,但按照以前的解决方案,我仍然无法解决这个问题: 我有一份SSRS(2008R2)报告,它以矩阵形式显示数据。有一个水平列组包含可能存在或可能不存在的值:当值不存在时,我想用Reporting services 用零替换空值,reporting-services,ssrs-2008-r2,Reporting Services,Ssrs 2008 R2,我知道这个问题以前被问过很多次,但按照以前的解决方案,我仍然无法解决这个问题: 我有一份SSRS(2008R2)报告,它以矩阵形式显示数据。有一个水平列组包含可能存在或可能不存在的值:当值不存在时,我想用0替换空单元格。当前,报告呈现为: 我希望这些空单元格中有0。 单元格表达式设置为: =Sum(Fields!number.Value) 所以我试过了 =iif (IsNothing(Sum(Fields!number.Value)),0,Sum(Fields!number.Value)
0
替换空单元格。当前,报告呈现为:
我希望这些空单元格中有0
。
单元格表达式设置为:
=Sum(Fields!number.Value)
所以我试过了
=iif (IsNothing(Sum(Fields!number.Value)),0,Sum(Fields!number.Value))
及
及
。。。但“空”细胞依然存在。我肯定我在做些傻事。。。但是什么呢
编辑:为了更好地说明我的情况,我的查询生成的输出(在SSM中)类似于:
File | outcomeID | number
A | Outcome1 | 2
A | Outcome2 | 1
B | Outcome2 | 2
C | Outcome1 | 1
D | Outcome3 | 2
。。。这将在SSR中产生以下结果:
File | Outcome1 | Outcome2 | Outcome3
A | 2 | 1 |
B | 2 | |
C | 1 | |
D | | | 2
使用列组:
即使我将表达式更改为:
=999
我最终得到了
File | Outcome1 | Outcome2 | Outcome3
A | 999 | 999 |
B | 999 | |
C | 999 | |
D | | | 999
。。。i、 e.大量空白
EDIT2:我上传了一个非常小的示例
.rdl
文件[REMOVED],使用上面的示例数据-它再现了问题我倾向于使用以下内容(在SSRS 2005上):=CInt(Fields!number.Value)
。也可以使用其他转换,如CDbl
或者,稍微长一点,试试
=IIf(Fields!number.Value为Nothing,0,Fields!number.Value)
我的第一个想法是更改存储过程,但由于我有一个类似的报告要快速测试某些内容,所以我有了一个想法
试试这个
=0+Sum(Fields!number.Value)
你能在你的查询中处理它吗?@TabAlleman:不幸的是,不能:(嗯,即使使用你的示例数据,
=iif(没有任何内容(Sum(Fields!number.Value)),0,Sum(Fields!number.Value))
对我来说仍然有效。这些单元格上是否有任何格式可能会抑制零值?当您在报告中使用数据集从头开始创建一个新的简单矩阵时,会发生什么情况?该文本框是否设置为条件隐藏?@pancho018:您是天才,而我是白痴。我一直在坐立不安以前我一直在隐藏值,但我忘了禁用它。我相信你下面的答案,谢谢!你在没有Sum()的情况下尝试过吗?你为什么还要使用Sum()?是的,Sum()
没有任何不同。Sum()
正在水平列组中用于将多个值分组在一起。奇怪……您不能将原始查询用作子查询,并执行类似操作:SELECT*,ISNULL(数字,0)作为(原始查询)中的数字吗?当前值正在水平分组,并且SUM
med在一起;由于报表的编写方式,在查询中将它们分组在一起将涉及大量的重新调整。令人沮丧的是,如此简单的事情证明是如此困难!您最初的操作应该可以完成这项工作…您可以尝试创建一个新报表,基于一个包含一些空值的简单表。看看你是否能做到这一点。然后再试试这个。
File | Outcome1 | Outcome2 | Outcome3
A | 999 | 999 |
B | 999 | |
C | 999 | |
D | | | 999
=0+Sum(Fields!number.Value)