【问题标题】:SQL Table shows up regardless of IIF statement无论 IIF 语句如何,都会显示 SQL 表
【发布时间】:2021-02-12 09:56:39
【问题描述】:

目前我有一个包含 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, true,false)
  • =IIF(Parameters!Transaction.Value(0)=3, true,false)

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

我在这里做错了什么?

【问题讨论】:

标签: sql reporting-services ssrs-2019


【解决方案1】:

您的问题中缺少很多细节,但我猜..

  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,这也会返回 true。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多