【问题标题】:SSRS Parameter values in WHERE clauseWHERE 子句中的 SSRS 参数值
【发布时间】:2015-07-24 06:47:29
【问题描述】:

(已编辑清理)

我有一个带有多值参数的 SSRS 报告。我需要的是参数的每个值都与“where”子句中的条件相对应。

所以我的查询是这样的:

select stuff,...

WHERE

column A != column B OR
column C != column D OR...

一直这样下去。只有在不同的列对之间存在差异时才给出结果。

所以希望我描述得很好。因此,例如,如果上面是我的 where 子句,我希望参数具有如下值:

“A 和 B 的区别” “C&D的区别”

并且能够选择多个......所以只有用户选择的那些被合并。

编辑 - 部分解决方案 ******************************************* ***

好的,我有逻辑,感谢汉诺威拳头的正确方向,我想出了这个:

WHERE
col 1 <> CASE WHEN CHARINDEX("Where1",@Parameter) = 0 THEN col 1 ELSE col 2 END OR  
col 3 <> CASE WHEN CHARINDEX("Where2",@Parameter) = 0 THEN col 3 ELSE col 4 END 

……等等……

这样,如果未选择参数,则 where 子句的那部分会查找该列不等于自身的结果——所以当然没有……

但是,仍然存在一个问题。如果我只选择 1 个参数值,这在 SSRS 中有效,但如果我选择多个,我会收到错误“charindex 函数需要 2 到 3 个参数”。 >-(

我部署了它,但它吐出的东西略有不同:

参数数据类型 nvarchar 对 charindex 函数的参数 3 无效

SSRS 对此的处理方式是 fladdoodle,但我不确定是什么。

【问题讨论】:

  • 您能否在您的问题中提供您的实际查询,或者至少提供您想要的实际 where 子句?
  • 好的。我想不出一种方法来使用我头顶上的一个多选参数来做到这一点。有多少比较,它总是一个固定的数字吗?
  • 大约有 20 次比较,不,不是一个固定的数字。它正在检查在多个字段中输入的数据,以查看特定步骤中是否存在差异。每个文档的所有数据都在一行中......所以基本上我选择了一行并寻找用户选择的任何列的差异(每个键控字段都有不同的列供其他人键控) .一些丑陋的旋转可能是可行的,但我相当肯定这会扼杀我的大脑和性能,呵呵。

标签: reporting-services parameters where


【解决方案1】:

我有点模糊你是如何尝试这样做的。

如何在 SQL 中包含 WHERE 子句并使用参数来确定是否使用了 WHERE 的那部分?这可能不是您所需要的,但应该让您了解我的意思。

WHERE (ColA <> ColB or CHARINDEX("Where1", @Parameter) = 0)

您的参数将 Where1 作为选择之一(对于 Value - Label 可能更具描述性)。如果选择它,CHARINDEX 结果将 not0 并且 ColA ColB 条件需要为true 以显示该记录。

为您需要的每个参数/WHERE 组合重复。

【讨论】:

  • 这很有帮助......没有想到这一点,而且它对于我正在尝试做的事情来说大多是正确的,但有一个问题。我在所有组合之间使用 OR。如果我使用 AND,这将起作用,但我希望它显示任何选定的组合何时为真,而不是所有组合。事实上,如果他们不选择单个参数,就像说 WHERE col A col B OR charindex(etc...) = 0,这意味着它会给我一切。
【解决方案2】:

知道了。
如上所述,此代码有效(从汉诺威拳头朝这个方向推动):

WHERE  
col 1 <> CASE WHEN CHARINDEX("Where1",@Parameter) = 0 THEN col 1 ELSE col 2 END OR
col 3 <> CASE WHEN CHARINDEX("Where2",@Paremeter) = 0 THEN col 3 ELSE col 4 END

等等……

参数问题对我来说是新的,但简单地说(这不经常这样做——因此我的困难:-P),SSRS 包括参数值之间的逗号(这是有道理的,因为我们可以使用 IN 语句如 WHERE 列 IN (@Parameter)

所以这就是为什么当我选择多个时它会抱怨。在这里结合优秀的选择答案:

Passing multiple values for a single parameter in Reporting Services

解决了剩下的问题:)

【讨论】:

    【解决方案3】:

    当您将多值参数传递给数据集时 用表达式连接多值参数

    = JOIN(Parameters!multivalue parameter.Value,",")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多