SSRS中多列的多值参数

时间:2014-03-30 22:01:21

标签: sql-server reporting-services

我正在使用SSRS构建报告,并且在多个值上过滤了多个列,但我需要传递要配对的值的参数。

例如,我有一个包含以下列的表:Employee,TransDate,Hours,Comment 此表中的主键是Employee和TransDate的组合(我无法修改)。

我需要能够使用参数@Employee和@TransDate从此表返回多行。如果我只是将两个参数MultiValue并在我的WHERE中使用IN语句,那么我将两者混合使用。例如,如果我的参数是: @Employee = 6899,5203 @TransDate = 01/09 / 2014,01 / 10/2014 然后我得到4行;每个员工在每个日期。

我需要将@Employee和@TransDate作为键值一起传递(6899,01 / 09/2014),并传递这些参数的多个实例。我不知道如何将它与SSRS和WHERE IN语句一起放在我的SQL查询中。

我希望我只是遗漏了一些简单的东西,但我今天无法解决这个问题。

1 个答案:

答案 0 :(得分:1)

您可以在报告中添加第三个参数,允许用户从Employee和Date参数中选择的可用Employee / Date组合列表中进行选择。

在此参数中,您可以创建一个组合Employee和TransDate值的人工键(以及一个关联的用户友好型标签"列用于显示)。保留Employee和TransDate的前两个参数的目的是最小化第三个参数中可用选项的数量(当然,您可以只使用第三个参数而不对Employee和TransDate进行过滤,但这可能会导致参数列表中可能存在大量可能的值。)

参数值查询的SQL看起来像这样(假设Employee是一个整数,TransDate是一个Datetime):

SELECT
  CONVERT(VARCHAR, Employee) + '_' + CONVERT(VARCHAR, TransDate, 112) AS ParamValue
  CONVERT(VARCHAR, Employee) + ' - ' + CONVERT(VARCHAR, TransDate, 103) AS ParamLabel
FROM
  TableName
WHERE
  (Employee IN (@Employee))
  AND (TransDate IN (@TransDate))

在主数据集查询中,您可以使用此参数中的选定值仅返回选定的Employee / TransDate组合:

SELECT Col1, Col2, COl3, bla , bla
FROM 
   TableName 
WHERE
   CONVERT(VARCHAR, Employee) + '_' + CONVERT(VARCHAR, TransDate, 112) IN (@Parameter3)