为什么不能在SSRS中的查询参数表达式中使用聚合和查找函数?

时间:2013-12-02 21:34:04

标签: sql reporting-services reporting

如果用户从多值参数中选择全部,则使用if运行一个查询,如果不是,则使用另一个查询。所以我想我将所选参数与数据集中的行进行比较。 但是我收到了这个错误:

  

“用于数据集中参数'DataSet2'的表达式   'DataSet2'包括聚合或查找功能。聚合和   查询函数不能用于查询参数表达式。“

以下是提出问题的部分:

IIf(Parameters!SomeOptions.Count < COUNTROWS("SOME_LIST"), ….

当然使用COUNTROWS("SOME_LIST")(它返回的值)补充15可以正常工作。 任何人都知道为什么会这样,和/或任何解决方法?

2 个答案:

答案 0 :(得分:6)

这是我在缺少IsSelectAll标志时使用的解决方法:

  1. 添加另一个名为InternalParameter_SomeOptions的内部参数。
  2. 将默认值和可用值设置为与SomeOptions相同的数据集。
  3. 将表达式设置为= IIF(参数!SomeOptions.Count&lt;&gt;参数!InternalParameter_SomeOptions.Count,nothing,Join(参数!SomeOptions.Value,“|”))

答案 1 :(得分:0)

如果您有一个多选参数,其数据源是数据集,并且您想知道是否选中了 ALL,请从您的 REPORT 数据集(如 SQL)中正确过滤,别再看了!

为什么这很重要?假设您有一个数据集(顺便说一句,喜欢数据集作为参数的数据源,将它们保存在服务器上以供反复使用)用于显示供应商列表,供用户从中选择一个或多个(多个)。如果该列表有 10,000 个长怎么办。您不想使用:WHERE VENDOR_ID IN(@VENDOR)。如果列表足够长,它会爆炸,您将不得不在 SSRS 日志中查找错误。所以,这就是为什么我们需要检查是否选择了 ALL 的原因之一。

  1. 创建一个与数据集参数相同的新参数(因此它们都使用相同的数据集并具有相同的默认值),确保将其设置为多选和隐藏(您不希望用户看到它) .我命名我的---所有地方---是我的参数名称,以便于区分。

  2. 对于用作 REPORT 数据的数据集,添加一个额外的参数。我喜欢称它为@Is----AllChecked,其中---- 是我的参数名称。它被命名为布尔值(1 表示真,0 表示假)。在本例中,它将被命名为@IsVendorAllChecked。

  3. 在 DEFAULT 值表达式中检查每个 REPORT 参数的计数是否相同(用户使用的和重复的),并返回一个值,如相同则为 1,否则为 0。例如 =IIF(Parameters!Vendor.Count = Parameters!VendorAll.Count, 1, 0)

  4. 在您的报告数据集中,评估参数值并在您的 SQL 中进行相应操作: where ( (@IsVendorAllChecked = 1 and vendor_id = vendor_id) 或 (@IsVendorAllChecked = 0 and vendor_id in(@Vendor)))< /p>

@Vendor 显然是用户交互的参数。

一直想做出贡献。 SE:报告生成器检查是否全部被选中 SE:报表生成器如何检查是否全部被选中 SE:Report Builder 参数查询表达式不能使用聚合