【问题标题】:How to fix #Error when dividing by 0 in SSRS如何在SSRS中除以0时修复#Error
【发布时间】:2019-12-06 16:16:26
【问题描述】:

所以我知道这个问题之前已经回答过了,

这里:

SSRS 2008 - Dealing with division by zero scenarios

这里:

https://sqldusty.com/2011/08/01/ssrs-expression-iif-statement-divide-by-zero-error/

我确信这些可以满足我的需要。但是,我正在努力将语法的不同部分放在哪里

A) 我不太擅长这个,但我正在努力!

B) 代码太长了

这是我产生#Error的代码

=SUM(Fields!OperationalCharge.Value + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalCharge.Value, "WaterBillingData") - Fields!OperationalChargePreviousMonth.Value + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalChargePreviousMonth.Value, "WaterBillingData"))

/ SUM(Fields!OperationalChargePreviousMonth.Value + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalChargePreviousMonth.Value, "WaterBillingData")) * 100

这是我尝试过的:

=Iif(SUM(Fields!OperationalCharge.Value + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalCharge.Value, "WaterBillingData") - Fields!OperationalChargePreviousMonth.Value + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalChargePreviousMonth.Value, "WaterBillingData")) = 0, 0,
SUM(Fields!OperationalCharge.Value + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalCharge.Value, "WaterBillingData") - Fields!OperationalChargePreviousMonth.Value + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalChargePreviousMonth.Value, "WaterBillingData")) / SUM(Fields!OperationalChargePreviousMonth.Value + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalChargePreviousMonth.Value, "WaterBillingData")) * 100 ) = 0, 1, 
Iif(SUM(Fields!OperationalCharge.Value + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalCharge.Value, "WaterBillingData") - Fields!OperationalChargePreviousMonth.Value + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalChargePreviousMonth.Value, "WaterBillingData"))

但是,这给了我错误:

The Value expression for the Textrun 'Col.name.Paragraphs[0].TextRuns[0]' Contains an error: [BC30205] End of statement expected

我有一半认为我实际上已经做对了,但是当我更改它时,它不喜欢我在尝试解决此问题时阅读的其他内容的更新。

理想情况下,我希望任何0/0 显示N/a-。我知道我尝试的上述代码没有这样做,但是当我也尝试这样做时,我也遇到了同样的错误

任何帮助将不胜感激!

干杯,

威尔

【问题讨论】:

    标签: tsql reporting-services ssrs-2012


    【解决方案1】:

    您的问题可能在此 IIF 声明中。

    Iif(SUM(Fields!OperationalCharge.Value + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalCharge.Value, "WaterBillingData") - Fields!OperationalChargePreviousMonth.Value + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalChargePreviousMonth.Value, "WaterBillingData"))
    

    您似乎有布尔测试,但没有语句的 True 或 False 部分。它指出 IIFSUM。不是它等于什么,对真或假部分没有任何意义。

    【讨论】:

    • 就是这样,抱歉我应该早点评论!非常感谢您在这里的帮助,它让我更加头疼
    【解决方案2】:

    在查看表达式之前,我首先要提到的是 - 您需要尝试在查询级别计算其中的一些内容。如果您可以加入这些表而不是使用所有这些查找,您将节省大量时间和精力来处理此类问题。如果这不是一个可能的解决方案,则表达式中肯定缺少某些内容。

    据我所知,第一个条件 SUM 看起来不错,来自 false 条件的分子也是如此。分母是你的问题出现的地方。在我看来,您只是放错了IIF。最重要的是,你有一个放错位置的括号。您需要将IIF 移动到除号之后,删除* 100 之后的括号并将其移动到表达式的末尾。基本上,表达式的结尾应如下所示。

    / IIF(SUM(Fields!OperationalChargePreviousMonth.Value
                + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalChargePreviousMonth.Value, "WaterBillingData")) * 100 = 0,
                1, 
                SUM(Fields!OperationalCharge.Value 
                    + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalCharge.Value, "WaterBillingData") 
                    - Fields!OperationalChargePreviousMonth.Value 
                    + Lookup(Fields!InvoiceDate.Value,Fields!InvoiceDate.Value, Fields!OperationalChargePreviousMonth.Value, "WaterBillingData")))
    

    仅供参考,像 Notepad++ 这样的程序在诊断这类问题时非常有用。我用它来格式化表达式,并使用它有用的语法突出显示来匹配括号与其终止伙伴。

    【讨论】:

    • 非常感谢您在阅读了您所说的内容后,我将尝试在查询级别重新编写它以加快整个过程
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 2023-02-03
    相关资源
    最近更新 更多