使用IN在字段中的SSRS表达

时间:2015-11-05 18:38:30

标签: reporting-services

我正在尝试使用多值参数过滤字段中返回的数据。我需要根据3个条件进行过滤:

- 保修结束日期之前

- 记录上的AND服务类型必须与用户选择的MULTI-VALUE参数之一匹配

- 记录中的AND Order Type必须与用户选择的MULTI-VALUE参数之一匹配

目前,这适用于我上面描述的第一个选择(仅对那些具有服务日期< =保修结束日期的记录求和,但是,我无法获得语法以根据所选参数检查其他2个字段...

Sum(iif(Fields!FirstServiceDate.Value <= Fields!WarrantyEndDate.Value, CDbl(Fields!ExtendedCost.Value), CDbl(0)))

附件是我的布局。最后,我想首先显示剩余%左侧的所有内容,并允许用户深入查看发票详细信息 warranty

1 个答案:

答案 0 :(得分:0)

我不知道您使用参数过滤数据集的原因是什么,而不是直接过滤您的查询。然而,这可能是你正在寻找的。

试试这个:

=Sum(iif(
Fields!FirstServiceDate.Value <= Fields!WarrantyEndDate.Value
AND
Join(Parameters!MultiValSTParam.Value,",").Contains(Fields!ServiceType.Value)
AND
Join(Parameters!MultiValOTParam.Value,",").Contains(Fields!OrderType.Value)
,CDbl(Fields!ExtendedCost.Value)
,CDbl(0)
))

编辑:基于OP评论的版本。

您应该使用该参数来过滤在T-SQL级别生成数据集的查询。

创建@WarrantyEDParam(日期类型),@ServiceType@OderType参数,然后在您的查询中使用与此类似的内容。

select
    me.equipment_id,
    me.WarrantyEndDate,
    me.WarrantyReserveAmnt,
    so.invoice_id,
    so.service_type,
    so.order_type,
    so.cost,
    so.price
from
master_equipment me
left join sales_order so on me.equipment_id = so.equipment_id
where me.WarrantyEndDate <= @WarrantyEDParam
or so.equipment_id is null      --This line was added
and so.service_type in (@ServiceTypeParam)
and so.order_type in (@OrderTypeParam)

现在您将直接从查询中过滤数据,因此要获得ExtendedCost使用的总和:

=Sum(CDbl(Fields!ExtendedCost.Value))