【问题标题】:SSRS 2016 - Change a portion of SQL based upon parameter choiceSSRS 2016 - 根据参数选择更改部分 SQL
【发布时间】:2016-12-12 19:52:18
【问题描述】:

我有 7 个报告都使用相同的查询,除了 where 子句中的一行。如何将这些合并为 1 个报告并根据所选报告类型更改行。

代码示例 从备注中选择a.remark a.code in (:rpt_parm)

:rpt_parm 有 7 个选项,但我似乎无法让查询接受我放入值中的值列表或使用返回列表的数据集。

注意,我正在使用 SSRS 2016 与 VS2015 和 Oracle 数据库连接。

【问题讨论】:

  • 有办法做到这一点。我们需要查看所有 SQL 和参数选项才能提供帮助。
  • @WesPalmer 我真正想做的是从备注中选择 a.remark a where :rpt_parm 但我可以摆脱上述情况。报告类型将是 POU 备注、POD 备注等......并且将具有 ('P100', 'P105', P0110') 或 ('P200', 'P205', 'P210') 等值。 ...如何将该列表正确放入值字段中以供查询使用?

标签: reporting-services oracle11g ssrs-2008 ssrs-2016


【解决方案1】:

我假设列表是指逗号分隔的列表?

从 SSRS 报告中,最好的方法是将参数列表传递到存储过程中。它将被接受为单值字符串。在存储过程中,您需要将字符串拆分为字符串表,然后根据字符串值字段使用该表连接到查询的其余部分。

【讨论】:

    【解决方案2】:

    您可以更改您的查询以简单地接受类似这样的报告类型(MS-SQL...抱歉没有 Oracle 实例):

    declare @report_type int;
    select  *
    from    remarks a
    where   (@report_type = 'POU Remarks' and a.remarks in ('P100', 'P105', 'P0110'))
    or      (@report_type = 'POD Remarks' and a.remarks in ('P200', 'P205', 'P210'))
    or      ...;
    

    【讨论】:

    • 你必须为查询做一个单独的存储过程吗?
    • 仅当您需要时。查询可以嵌入到报表的数据集中。我们通常为每个报告创建一个过程,以便在我们发现需要调整但很多人只是嵌入他们的查询时更容易提供给 dba。当多个报告将使用相同的查询时,请使用共享数据集。
    【解决方案3】:

    https://dataqueen.unlimitedviz.com/2013/10/how-to-use-a-delimited-string-in-a-multi-valued-parameter/

    这太棒了。参数中每个选项的值中的逗号分隔字符串,然后在查询的参数部分,您使用 split 函数。

    我承认我对 SSRS 还很陌生,我们正面临着严重的时间紧缩,要在年底前将 100 份 Discoverer 报告转换为 SSRS。但我的编程强迫症让我想在第一次尽可能正确地做到这一点。

    非常感谢您的帮助。

    否定上面的,它只返回列表中的第一个值

    【讨论】:

      【解决方案4】:

      我不确定我是否正确理解了这个问题,但我会试一试。

      我认为您可以有一个包含两列 optionvalue 的表 helper。对于每个选项,您拥有的行数与该选项的值一样多。 (因此一个值可能出现不止一次 - 与使用该值的选项一样多。)

      然后,您只需输入选项编号,例如:option。您的查询应该是:

      ... where a.code in (select value from helper where option = :option)
      

      如果性能有问题,您可以在option 上添加索引。这应该比任何基于逗号分隔字符串的解决方案都更有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-27
        • 1970-01-01
        • 2020-08-22
        • 2020-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多