【问题标题】:comparing values from a multi-value parameter to a dataset column in SSRS将多值参数中的值与 SSRS 中的数据集列进行比较
【发布时间】:2016-05-16 21:24:48
【问题描述】:

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

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

谢谢, 普拉提克

【问题讨论】:

  • 你的列是什么数据类型?可以使用自定义代码来完成。
  • 它是一个 varchar。即使我想到了自定义代码,我卡住的地方是遍历我列的所有唯一值,我无法弄清楚那部分。

标签: stored-procedures reporting-services parameters ssrs-2012


【解决方案1】:

首先,您需要一个为您的参数提供值的查询。查询可能如下所示:

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

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

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

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

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

您可以将其用作过滤器,仅显示此函数不返回值的参数值:

【讨论】:

  • 很抱歉,当您说我需要一个查询来为我的参数提供值时,我没有把您带到那里,该参数将在运行时从最终用户那里获取值
  • 我没有可以提供给参数的预定义值列表,我的意思是它可以是我的数据集列中的所有内容以及更多内容。因此,在这种情况下,我不确定如何为从我的参数获取值的数据集构造查询。
  • 参数是否是一个文本框,用户可以在其中输入他们想要的任何值?
  • 搞定了!将您的解决方案与此处给出的解决方案相结合link
【解决方案2】:

您能否更改存储过程(或在此报表的旧存储过程的基础上创建一个新存储过程)?如果是这样,那么您可以从 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 的账单金额

【讨论】:

  • 我害怕改变存储过程是不可能的/
猜你喜欢
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
相关资源
最近更新 更多