如何在ssrs中的IIF表达式中使用多个条件(使用AND)

时间:2014-04-01 12:41:38

标签: sql sql-server reporting-services iif

我只想在SSRS报告中隐藏具有零数量的行。 有以下多个数量列,如开仓股票,调度总额,转出,出售数量,库存调整和结算股票等。 我正在使用以下表达式执行此任务。

    =IIF(Fields!OpeningStock.Value=0 AND Fields!GrossDispatched.Value=0 AND 
Fields!TransferOutToMW.Value=0 AND Fields!TransferOutToDW.Value=0 AND 
Fields!TransferOutToOW.Value=0 AND Fields!NetDispatched.Value=0 AND Fields!QtySold.Value=0 
AND Fields!StockAdjustment.Value=0 AND Fields!ClosingStock.Value=0,True,False)

但是,通过在行可见性中使用此表达式,报告会隐藏除Totals Row之外的所有行。即使报告应显示具有上述列数量的行。 总值显示正确。

注意:我在Detail Row上设置了此行可见性表达式。

不使用表达式结果如下。

对于前2行,所有数量都是0(ZERO),我想隐藏这2行。

enter image description here

如何解决此问题或必须使用哪个表达式来获取所需的结果?

先谢谢你的帮助。

3 个答案:

答案 0 :(得分:11)

你可以尝试一下吗?

=IIF((Fields!OpeningStock.Value=0) AND (Fields!GrossDispatched.Value=0) AND 
(Fields!TransferOutToMW.Value=0) AND (Fields!TransferOutToDW.Value=0) AND 
(Fields!TransferOutToOW.Value=0) AND (Fields!NetDispatched.Value=0) AND (Fields!QtySold.Value=0) 
AND (Fields!StockAdjustment.Value=0) AND (Fields!ClosingStock.Value=0),True,False)

注意:将Hidden设置为False会使行可见

答案 1 :(得分:3)

你根本不需要IIF()。无论如何,比较都会返回真或假。

此外,由于此行可见性位于组行上,因此请确保在字段中使用与在行中的字段中使用相同的聚合函数。因此,如果您的组行显示总和,那么您将其放入隐藏属性。

=Sum(Fields!OpeningStock.Value) = 0 And
Sum(Fields!GrossDispatched.Value) = 0 And 
Sum(Fields!TransferOutToMW.Value) = 0 And
Sum(Fields!TransferOutToDW.Value) = 0 And
Sum(Fields!TransferOutToOW.Value) = 0 And
Sum(Fields!NetDispatched.Value) = 0 And
Sum(Fields!QtySold.Value) = 0 And
Sum(Fields!StockAdjustment.Value) = 0 And
Sum(Fields!ClosingStock.Value) = 0

但是对于上面的版本,如果一个记录的值为1,一个记录的值为-1,而其他记录的值为零,则sum也为零,并且该行可以隐藏。如果那不是你想要的,你可以写一个更复杂的表达式:

=Sum(
    IIF(
        Fields!OpeningStock.Value=0 AND
        Fields!GrossDispatched.Value=0 AND
        Fields!TransferOutToMW.Value=0 AND
        Fields!TransferOutToDW.Value=0 AND 
        Fields!TransferOutToOW.Value=0 AND
        Fields!NetDispatched.Value=0 AND
        Fields!QtySold.Value=0 AND
        Fields!StockAdjustment.Value=0 AND
        Fields!ClosingStock.Value=0,
        0,
        1
    )
) = 0

这实际上是一种计算任何字段不为零的行数的奇特方式。如果组中的每一行的每个字段都为零,则表达式返回true并隐藏该行。

答案 2 :(得分:0)

这是一个应该给你一些想法的例子..

=IIF(First(Fields!Gender.Value,"vw_BrgyClearanceNew")="Female" and 
(First(Fields!CivilStatus.Value,"vw_BrgyClearanceNew")="Married"),false,true)

我认为你必须确定数据来源的数据源名称或表名。