我正在使用Report Builder 3.0开发一个计算百分比的简单SSRS报告。
我有3列,其中2列不可见,每列都包含在列组中,1列为以百分比显示的数据的可视化表示。 2列按相同的SQL列值分组,但具有不同的过滤器以分隔数据。我需要一个百分比的A列与我的第三列中显示的A +列B的总和相比,所以我使用的是表达式:
=FormatPercent(ReportItems!columnA.Value/(ReportItems!columnA.value + ReportItems!columnB.value),1) & " whatever additional text"
ColumnA ColumnB ColumnC
Group on IsWeb Group on IsWeb A/(A+B)
Filter IsWeb = 1 Filter IsWeb = 0
SUM(value) SUM(value)
除非列A实际上不包含任何值,否则此工作正常。换句话说,A列的列组上的过滤器会过滤掉任何潜在的数据。发生这种情况时,ReportItems!columnA.value
甚至不存在,因此我无法在第三列中使用IIF(IsNothing())
语句将其替换为0.
奇怪的是,当报表通过Web界面,RB界面运行或以HTML格式的电子邮件发送时,当columnA.value
不存在时,百分比将返回50.0%。但是,如果将其另存为PDF,则显示0.0%,这是所需的。
是否有办法“修复”浏览器和电子邮件查看报告时出现50.0%的问题,或者在ReportItems!columnA.value
不存在时正确设置最终计算以插入0来代替计算?
我试过了:
IIF(IsNothing(ReportItems!columnA.value), 0.0, FormatPercent(ReportItems!columnA.Value/(ReportItems!columnA.value + ReportItems!columnB.value),1))
但这也没有按预期工作。
要测试数据显示的“0除以数字”问题,如果我将第3列的表达式更改为:
=FormatPercent(0/(ReportItems!columnA.value + ReportItems!columnB.value),1) & " whatever additional text"
它按预期运行,在浏览器和PDF中返回0.0%的结果。
编辑:当ReportItems!columnA.value
不存在时,值ReportItems!columnB.value
似乎被替换为值{{1}}。 B列总是有一个值,所以当我们得到A /(A + B)的最终方程时,当A不存在时,方程变为B /(B + B),因此得到50.0%的结果。但是,当我将结果导出为PDF时,A只是0而B是正确的数量,从而导致正确显示数据。
为什么HTML查看返回的结果与导出为PDF时的结果不同?