将多值参数的值与 SSRS 中的数据集列进行比较

comparing values from a multi-value parameter to a dataset column in SSRS

我通过向存储过程传递一个多值参数创建了一个数据集。我现在需要的是检查参数中的所有值是否都返回到我的结果集的特定列中,如果没有,则在报告中显示这些值。

因此,例如,如果我将值 'a'、'b'、'c' 和 'd' 传递给我的参数,并且如果我的数据集列仅包含'a' 和 'd',那么我需要一种方法来在报表上显示 'b' 和 'c'。

谢谢, 普拉蒂克

首先,您需要一个为您的参数提供值的查询。查询可能看起来像这样:

select 'a' as ParamValue
union all
select 'b' as ParamValue
union all
select 'c' as ParamValue
union all
select 'd' as ParamValue

设置您的参数值以通过此查询填充:

现在添加一个 table 可以列出您的参数值。

接下来,您可以使用 Lookup 函数检查主数据集中是否存在每个值,如下所示:

=IIf(IsNothing(Lookup(Fields!PARAMVALUE.Value,Fields!COLVALUE.Value,Fields!COLVALUE.Value, "MainDataSet")), True, False)

您可以将其用作过滤器以仅显示此函数没有 return 值的参数值:

你能改变存储过程吗(或者在旧的基础上为这个报告做一个新的)?如果是这样,那么您可以从 INNER JOIN 更改为 OUTER JOIN 并获得该结果。例如,如果您的存储过程显示上个月有多少客户被计费并且看起来像:

SELECT ClientName, SUM(BillAmount) AS TotalBilled
FROM Clients
INNER JOIN Bills ON Clients.ClientId = Bills.ClientId AND Bills.BillDate >= DateAdd(m, -1, GetDate())
WHERE ClientId IN @ClientIds
GROUP BY ClientName
ORDER BY ClientName

那么这将排除任何未计费的客户。如果您像这样更改为 OUTER JOIN

SELECT ClientName, SUM(BillAmount) AS TotalBilled
FROM Clients
LEFT OUTER JOIN Bills ON Clients.ClientId = Bills.ClientId AND Bills.BillDate >= DateAdd(m, -1, GetDate())
WHERE ClientId IN @ClientIds
GROUP BY ClientName
ORDER BY ClientName

那么没有账单的客户仍然会显示 Null 金额的账单金额