我有一个旧报表,其中的一列具有如下所示的表达式:
=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))
我不懂如何阅读代码,不知道是否有人可以解释它?
答案 0 :(得分:1)
这称为内联if或iif()
。
内联,如果基本上遵循以下原则:
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
-第一个测试为true(不等于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)
,因为我们没有到达{{1 }}
有关SSRS中表达式的更多信息,请参见here。