为什么我的Switch语句无法按预期运行?

时间:2020-02-12 08:26:16

标签: sql-server reporting-services ssrs-2012

我得到了我认为是一个非常简单的小switch语句,但是它在某些单元格中返回了一条#error消息……我编写的表达式是:

=Switch(ReportItems!DisplayCheck.Value = "Didn't Exist", "-", ReportItems!FTEP.Value = 0, 0, TRUE, ReportItems!SicknessP.Value/ReportItems!FTEP.Value)

这仅在DisplayCheck =“不存在”的单元格上显示错误-所有其他单元格都正常工作。所以我知道它至少在某种程度上起作用,但是由于某些原因,当第一个表达式返回true时不是吗?

我也尝试过:

=Switch(ReportItems!FTEP.Value = "-", "-", ReportItems!FTEP.Value = 0, 0, TRUE, ReportItems!SicknessP.Value/ReportItems!FTEP.Value)

但是每个单元格都返回了#error。非常感谢您提供任何见识。

2 个答案:

答案 0 :(得分:0)

记住switch和iif是方法,并且没有流控制设备,因此每条路径都将执行,除以0会导致错误。

因此,即使它们被控制流屏蔽,也必须替换为0 还必须考虑空值

=Switch(ReportItems!FTEP.Value = "-", "-", ReportItems!FTEP.Value = 0 or isnothing(ReportItems!FTEP.Value)
, 0, TRUE, ReportItems!SicknessP.Value/iif(ReportItems!FTEP.Value = 0 or 
isnothing(ReportItems!FTEP.Value),1,ReportItems!FTEP.Value))

答案 1 :(得分:0)

我认为问题在于您的switch语句返回不同的数据类型。作为测试,请尝试将第一个返回值从"-"更改为nothing或一些明显的数字,例如-999

如果获得正确的结果(没有错误),则必须决定如何使所有数据类型相同。选项可能是

  1. "-"替换为nothing
  2. "-"替换为0
  3. 将第二和第三测试设为字符串

您可能最终会得到类似

的信息
=Switch(
        ReportItems!DisplayCheck.Value = "Didn't Exist", "-", 
        ReportItems!FTEP.Value = 0, "0", 
        TRUE, CStr(ReportItems!SicknessP.Value/ReportItems!FTEP.Value)
        )