【问题标题】:SSRS divide by 0 error even when using iif() isnothing() and =0 or =nothing即使使用 iif() isnothing() 和 =0 或 =nothing 时,SSRS 除以 0 错误
【发布时间】:2019-02-20 21:52:22
【问题描述】:

我想在报告中实现一个简单的百分比变化公式...公式为 (a-b)/b。

问题有时是进入数据集的 b 的值是空白/空......此外,SSRS 似乎无法通过我正在使用的iif() 语句准确地实现这一点。相反,每当报告呈现时,对于公式中缺少 b 数据的任何行项目,我都会在该单元格中显示可怕的“错误”。我正在使用的单元格中的公式如下。这里有什么问题?为什么 SSRS 看不到 sum(b) = nothingisnothing(sum(b)) 的计算结果为真?就好像它绕过了公式的那一部分并继续进行数学运算,除以 0 并抛出错误?

=iif( 
    isnothing(sum(Fields!BR_Quantity.Value))=true or sum(Fields!BR_Quantity.Value)=0 or sum(Fields!BR_Quantity.Value)=nothing,
    nothing,
    (sum(Fields!Full_Case_Quantity.Value)-sum(Fields!BR_Quantity.Value)) / sum(Fields!BR_Quantity.Value)
)

【问题讨论】:

标签: reporting-services iif


【解决方案1】:

IIF 函数计算表达式的 TRUE 和 FALSE 部分。

在分子和分母上使用单独的 IIF:

=IIF(ISNOTHING(SUM(Fields!BR_Quantity.Value)) OR SUM(Fields!BR_Quantity.Value) = 0, 0, SUM(Fields!Full_Case_Quantity.Value) - SUM(Fields!BR_Quantity.Value)
/
 IIF(ISNOTHING(SUM(Fields!BR_Quantity.Value)) OR SUM(Fields!BR_Quantity.Value) = 0, 1, SUM(Fields!BR_Quantity.Value) )

这样,当你的分母为 0 或 NULL 时,结果表达式为 0 / 1

有点蹩脚,但微软不会修复它。

【讨论】:

  • 好的,我明天试试这个方法。我完全认为 iif() 函数不像 t-SQL 那样工作很糟糕
  • 奇怪的是,如果数字是整数,它可以正常工作。也使用像 =Iif(Fields!b.Value=0, 0, Cdbl(Fields!a.Value)/Cdbl(Fields!b.Value)) 这样的 Cdbl 函数似乎可以从表达式中删除错误
  • 我认为最好的方法是使用自定义代码,如此答案 stackoverflow.com/questions/19189132/… 。简单的vb代码,让你的表达更具可读性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多