【问题标题】:Allow mulitple values not working in SSRS允许多个值在 SSRS 中不起作用
【发布时间】:2018-02-09 21:54:24
【问题描述】:

我有一个使用多值参数的报表,在 SQL 中运行时可以毫无问题地提取数据。当在存储过程中应用并通过 SSRS 处理并在选择多个值时启用“允许多值”时,报告不返回任何数据。与其他用户一样,如果我选择单个值,报告将返回数据。

我做了一些功课并尝试增加我的参数值,但这也没有帮助。

请参阅下面的查询。有问题的参数是@material 参数。

With Zone as 
(Select 
 name,
 id 
 From datex_Footprint.LocationContainersView
 Where 
 typename IN ('Zone', 'Area') 
)
SELECT inv.projectId,
       inv.projectName,
       inv.materialLookupCode,
       inv.materialDescription,
       CASE
           WHEN sn.id IS NULL
           THEN inv.totalPackagedAmount
           ELSE 1
       END AS totalPackagedAmount,
       inv.licensePlateLookupCode,
      z.name WarehouseZone,
       inv.locationName,
       sn.id serialNumberId,
       sn.lookupCode,
       udf.SerialRef1,
       udf.SerialRef2,
       udf.SerialRef3,
       udf.SerialRef4,
       udf.SerialRef5
FROM datex_footprint.InventoryDetailedViewByLicensePlateLot inv
     LEFT OUTER JOIN datex_footprint.SerialNumbers sn ON sn.lotId = inv.lotId
                                                         AND sn.licensePlateId = inv.licensePlateId
                                                         AND sn.archived = 'False'
     LEFT OUTER JOIN datex_footprint.SerialNumbersUdfs udf ON udf.id = sn.id
    INNER JOIN datex_footprint.LocationContainersView lcv ON lcv.id = inv.locationId
     INNER JOIN datex_footprint.locationcontainers LC ON LC.id = lcv.id
 INNER JOIN Zone z ON z.id = LC.parentid
WHERE inv.projectName IN(@projectName)
     AND inv.materialLookupCode IN(@material)
AND (inv.locationName IN(@locationName)
OR (@locationName IS NULL));

【问题讨论】:

  • 您是否将@material 传递给存储过程参数?
  • 是的。虽然我认为艾伦斯科菲尔德一针见血。我认为删除 SP 并直接在数据集中运行查询将解决问题。将在周二再次报告。

标签: sql reporting-services


【解决方案1】:

如果您不必使用存储过程,那么解决此问题的最简单方法是将此代码直接放入您的数据集中。然后它将按您的预期工作,SSRS 会将您的多值参数转换为逗号分隔的列表并将其注入到 SQL 语句中。

如果您必须使用存储过程,那么您需要自己进行所有转换,包括在存储过程中拆分值。有很多关于如何做到这一点的例子,例如http://www.codeulike.com/2012/03/ssrs-multi-value-parameters-with-less.html

就我个人而言,我总是将数据集代码直接放在数据集查询中,这样更方便,意味着 SQL 服务器上的对象更少,但安全性可能更低。

【讨论】:

  • 谢谢,我会在星期二回去工作时试试这个,并会报告。
  • 将其作为存储过程删除并直接作为数据集运行查询解决了我的问题。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 2013-02-05
  • 2017-11-04
  • 2019-06-05
相关资源
最近更新 更多