【问题标题】:Report Builder - Use one dataset in the where clause of the query for another dataset报表生成器 - 将查询的 where 子句中的一个数据集用于另一个数据集
【发布时间】:2019-05-28 04:21:39
【问题描述】:

我正在使用 SQL Server Report Builder 2014。

DatasetA 是从 DatasourceA 中的 TableA 创建的,并且包含一列 ID。

我的报告所基于的 DatasetB 需要在 DatasourceB WHERE TableB.ID IN (DatasetA) 中包含 TableB 中的所有行。

我已经进行了很多 Google 搜索,但找不到有效的解决方案。有什么建议吗?

【问题讨论】:

    标签: reporting-services dataset


    【解决方案1】:

    据我所知,当您在查询设计器(文本模式)中使用where name in (@aa)并单击“确定”时,它会提示如下

    你可以硬编码,它似乎支持在设计器中测试单个参数,但是当你在报告中预览它时,你可以传递多个参数。您可以单击“确定”忽略它或在其中传递硬代码以查看参数是否可以工作。

    另外,如果你想在参数列表中显示数据集A的值,你可以在参数属性中设置可用值(从查询中获取值)

    【讨论】:

      【解决方案2】:

      为此,您可以在报告中使用隐藏参数,让我们调用ParamA。使用DatasetA 填充ParamA,将其设置为多选参数并使用DatasetA 设置默认值,即将选择所有项目。

      然后在DatasetBwhere id in (@ParamA)

      【讨论】:

      • 感谢您的反馈。我实际上已经尝试过这种技术,但肯定遗漏了一些重要的东西。我认为参数在 where 子句中需要一个&符号,即(@Parama)中的 where id?如果这是正确的,那么当我这样做时,当我在查询设计器中运行查询时,我首先会通过“定义查询参数”对话框提示输入参数详细信息。如果我只是点击“OK”,我会在“@”处得到一个“意外符号”异常。我很确定参数定义正确(内部、允许多个值、可用和默认值是我的数据集和值字段)。
      • 我猜我不应该在尝试运行查询时被提示,但我不确定如何保证它使用数据集。
      • 如果它提示您,则表示它无法解析查询。很难提供进一步的建议,但我可以向您保证,这项技术在我使用过的情况下是有效的。也许是查询中的语法错误,也许是参数名称/定义的问题?
      • 在 SSMS 中测试查询,将参数条件更改为可测试的内容。如果没问题,那么我有时会使用查询创建一个新报告,让报告生成器重新生成数据集和参数 - 然后将任何更改复制到真实报告中。
      • 今天向前迈出了一小步。我的数据集查询中的参数语法不是“@ParamName”,而是“?”即“ID在哪里(?)”。所以这不是查询中参数的驱动程序限制,而是不同的语法。然而,我的“?”参数需要表示多个值,但是当我选中参数定义中的“允许多个值”复选框时,我在运行时得到以下异常:“无法为数据集'DataSetA'添加多值查询参数'Parama',因为它是数据扩展不支持。”所以也许现在我有一个驱动程序限制。
      猜你喜欢
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 2019-12-11
      • 1970-01-01
      • 2019-06-16
      相关资源
      最近更新 更多