【问题标题】:IIF condition in SSRS and handling zerosSSRS 中的 IIF 条件和处理零
【发布时间】:2018-12-11 14:53:41
【问题描述】:

我在 SSRS 中有一个相当复杂的公式,由于某种原因,它在遇到零值时会显示错误,即使我在公式中处理零也是如此。谁能建议如何解决这个问题?

=iif(datepart("h",Now())=6, iif(SUM(Fields!PYRevenue.Value) = 0, 0,((SUM(Fields!Revenue.Value) - SUM(Fields!PYRevenue) .Value)) / SUM(Fields!PYRevenue.Value))) ,iif(SUM(Fields!PYRevenue.Value) = 0, 0,(SUM(Fields!Revenue.Value) / SUM(Fields!PYRevenue.Value))))

【问题讨论】:

  • 您遇到了什么错误,正在使用什么值,PYRevenue 和 Revenue 都是 0 吗?我正在使用这个查询并且没有收到任何错误。 Declare @YourTable Table ([ID] int, PYRevenue int, Revenue int ) Insert Into @YourTable Values (1,6,7) ,(2,3,6) ,(3,0,0) SELECT * FROM @YourTable

标签: reporting-services ssrs-2008 iif


【解决方案1】:

抱歉,在正确缩进之前,我误读了您的公式。即使您检查了 PYRevenue = 0,也需要在两次出现“/”之后包含另一个 IIF(),如下所示:

iif( 总和(字段!PYRevenue.Value)= 0, 0, ( (SUM(Fields!Revenue.Value) - SUM(Fields!PYRevenue.Value) ) / IIF(SUM(Fields!PYRevenue.Value) = 0, 1, SUM(Fields!PYRevenue.Value)) )

SSRS 计算所有表达式,因此即使您的父逻辑阻止该块被命中,您也必须处理 0 值。

【讨论】:

    【解决方案2】:

    为匆忙的回答道歉......在我的手机上这样做......

    如果 SUM(PYRevenue) 为零,即使您的最后一个表达式不会被使用,它仍然会被计算并给出除以零的错误。 2种方法解决。 对于任何不简单的事情,我个人都使用 SWITCH 而不是 IIF。

    或者,您需要检查您部门两侧的 SUM(PYRevenue)。伪代码将是 =IIF(SUM(PYRevenue)=0,0,SUM(Revenue)) / IIF(SUM(PYRevenue)=0, 1, SUM(PYRevenue)) 所以如果 sum PY 为零,则执行 0/1 否则执行收入/pyrevenue

    【讨论】:

    • 在我发布之后,我看到了 Chris Hackett 的更新答案,基本上是一样的,除了如果你得到除数的两边都正确,你真的不需要外部 IIF。..
    猜你喜欢
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多