2012-06-20 60 views
0

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

= 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%”,圆(@ Data.rp_TATStatAtBenchmark〜/@ Data.rp_TATSt atCount〜* 100)+“%”)

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

回答

0

如果@ Data.rp_TATStatCount_value为0,那么您看到“???”结果的原因是,是因为除以零是一个没有意义的数学表达式('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> 
+0

谢谢您的答复。我试图将计算出的列公式添加到我的数据层中,并在稍后显示它们时引用它,但结果是此时没有显示值而不是“???”。是否有必要拥有静态数据行?如果是这样,我怎样才能将它结合到我现有的数据层? 顺便说一句,感谢帮助我与这个和我以前的问题,我感谢它:) –

+0

另外,在第一个计算列,不应该第三项是: @ Data.rp_TATStatCount〜? (即使改变了这一点,没有改变,条目保持空白) –

+0

我使用静态数据行来创建示例演示,因此您不需要将其保留在实际内容中。另外,是的,有一个错误,Statcount2计算列中的第三项应与您的列名称相匹配:@ Data.rp_TATStatCount〜。在我的例子中做出这个改变应该可以让它正常工作 - 但是你可能只需要将2个计算列复制到你的定义中就可以使它工作。 – david