我有一个旧报告,其中有一列的表达式如下所示:
=IIf(Sum(Fields!projqty.Value)<>0, IIf(Max(Fields!projekttargettime.Value)=1,
(Sum(Fields!projtime.Value+Fields!acwtime.Value)),
(Sum(Fields!projqty.Value)*Fields!targettime.Value)),
(Sum(Fields!projqty.Value)*Fields!targettime.Value))
我不明白如何阅读代码,想知道是否有人可以解释它?
称为内联 if 或 iif()
。
内联 if 基本上是这样的: iif(<test condition>, <value for true>, <value for false>)
对于您的示例,您还嵌套了 iif()
语句来解决问题。它去..
IIf(Sum(Fields!projqty.Value)<>0
- 检查此sum(Fields!projqty.Value)
是否不等于 0
IIf(Max(Fields!projekttargettime.Value)=1
- 第一个测试为真(不等于 0(,所以现在我们要检查这个max(Fields!projekttargettime.Value)
是否等于 1
(Sum(Fields!projtime.Value+Fields!acwtime.Value)),
- 我们之所以来到这里,是因为sum(Fields!projqty.Value)
不等于 0,max(Fields!projekttargettime.Value)
等于 1
(Sum(Fields!projqty.Value)*Fields!targettime.Value)),
- 我们之所以来到这里,是因为sum(Fields!projqty.Value)
不等于 0,max(Fields!projekttargettime.Value)
不等于 1
(Sum(Fields!projqty.Value)*Fields!targettime.Value))
- 最后,我们到达这里,因为原始sum(Fields!projqty.Value)
等于 0。我们从不检查max(Fields!projekttargettime.Value)
,因为我们没有到达iif()
的那部分
有关 SSRS 中的表达式的详细信息,请参阅此处。