IIF声明LogiXML

时间:2012-06-20 16:42:20

标签: .net vbscript iif-function

我在尝试执行以下操作时遇到问题。我试图在标题中加入一个iif语句。这是在标签上评估的当前行:

= round(@ Data.rp_TATStatAtBenchmark~ / @ Data.rp_TATStatCount~ * 100)+“%”

我已将其更改为以下内容以便在@ Data.rp_TATStatCount = 0和@Data.rp_TATStatAtBenchmark = 0时输入错误(由于某种原因,报告显示???当第二个值为0而不是显示时只是“0%”。无论如何,这就是我想写的:

= IIf((@ Data.rp_TATStatAtBenchmark~ =“0”或@ Data.rp_TATStatCount~ =“0”),“0%”,round(@ Data.rp_TATStatAtBenchmark~ / @ Data.rp_TATStatCount~ * 100)+“%”)

但它不起作用。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

如果@ Data.rp_TATStatCount~值为0,则表示您看到“???”的结果因为除以零是一个没有意义的数学表达式('undefined')。这总是会返回undefined'???'而不是数字 - 所以结果永远不会是0.因为简单地替换了令牌变量,即使你使用的是iif()语句,表达式仍然会被检查有效性。

如果要创建除以零的异常,则还需要提供计算以检查rp_TATStatCount = 0的时间,并将其替换为非零整数,或使用不同的列名。最好的方法可能是创建第二个计算列,检查零(你的iif()语句),然后使用这个新创建的列来执行round()函数。

这是使用现有列名称的静态数据层内的快速示例:

<DataLayer Type="Static" ID="dlStatic">
 <StaticDataRow rp_TATStatAtBenchmark="0" rp_TATStatCount="0" />
   <CalculatedColumn Formula="iif(@Data.rp_TATStatCount~=0, 1, @Data.rpTATStatCount~)" ID="StatCount2" />
   <CalculatedColumn Formula="iif(@Data.rp_TATStatAtBenchmark~ = &quot;0&quot; OR @Data.rp_TATStatCount~ = &quot;0&quot;, &quot;0%&quot;, round(@Data.rp_TATStatAtBenchmark~ / @Data.StatCount2~ * 100) + &quot;%&quot;)" ID="pctCol" />
</DataLayer>