在SSRS中除以0时如何修复#Error

How to fix #Error when dividing by 0 in SSRS

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

此处:

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-。我知道我试过的上面的代码并没有这样做,但是当我也尝试这样做时,我也遇到了同样的错误

如有任何帮助,我们将不胜感激!

干杯,

威尔

您的问题可能在此 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 部分。它声明 IIF theSUM。不是它等于什么,也不是真或假部分。

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

据我所知,第一个条件 SUM 看起来没问题,假条件的分子也是如此。分母是您出现问题的地方。在我看来,您只是放错了 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++ 这样的程序在诊断这类问题时非常有用。我用它来格式化表达式并使用它有用的语法突出显示来将括号与其终止伙伴匹配。