微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无论 IIF 语句如何,SQL 表都会显示

如何解决无论 IIF 语句如何,SQL 表都会显示

目前我有一份包含 3 个表格的 SSRS 报告。

我已经定义了 3 个参数值:

  • 表 A = 1
  • 表 B = 2
  • 表 C = 3

我还创建了 3 个表:

  • 表A
  • 表 B
  • 表 C

我还创建了以下 iif 语句

  • =IIF(Parameters!Transaction.Value(0)=1,true,false)
  • =IIF(Parameters!Transaction.Value(0)=2,false)
  • =IIF(Parameters!Transaction.Value(0)=3,false)

我的系统没有出错,但这个查询不起作用 - 无论选择什么参数,它仍然显示所有 3 个表。

在这里做错了什么?

解决方法

您的问题中遗漏了很多细节,但我会猜测..

  1. “我创建了 3 个表”表示您在报表上创建了 3 个表 (tablix) 控件,而不是您创建了 3 个数据库表。
  2. 您想根据参数选择显示/隐藏这些表格
  3. 您的参数是多值的
  4. 您显示的 IIF 语句位于每个表的 hidden 属性中。

如果有任何错误,请更新您的问题以澄清。

您的表达式的问题在于它们只检查第一个选定的参数值(因为您正在引用索引 (0)),因此所有三个的结果每次都相同。

要解决这个问题,您可以执行以下操作...

=("|" & JOIN(Parameters!Transaction.Value,"|") & "|").Contains("|1|") =False

对其他两个用 "|1|""|2|" 替换 "|3|" 的表重复此操作。

所有这一切都是 JOIN() 由管道 | 符号分隔的所有选定参数值,这将给我们类似

1|2|3  or 1|2 for exmaple

接下来我们在开始和结束添加一个管道给我们

|1|2|3|  or |1|2| for exmaple

如果您的参数值为 10 或更多并且检查“1”是否存在,即使未选择 1 但选择了 10,这也将确保使用安全。

最后,我们检查连接的值是否包含字符串 |1||2| 等,并将结果与​​ false 进行比较。这样我们就不需要使用 IIF 语句

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。