如果用户从多值参数中选择全部,则使用if运行一个查询,如果不是,则使用另一个查询。所以我想我将所选参数与数据集中的行进行比较。 但是我收到了这个错误:
“用于数据集中参数'DataSet2'的表达式 'DataSet2'包括聚合或查找功能。聚合和 查询函数不能用于查询参数表达式。“
以下是提出问题的部分:
IIf(Parameters!SomeOptions.Count < COUNTROWS("SOME_LIST"), ….
当然使用COUNTROWS("SOME_LIST")
(它返回的值)补充15
可以正常工作。
任何人都知道为什么会这样,和/或任何解决方法?
答案 0 :(得分:6)
这是我在缺少IsSelectAll标志时使用的解决方法:
答案 1 :(得分:0)
如果您有一个多选参数,其数据源是数据集,并且您想知道是否选中了 ALL,请从您的 REPORT 数据集(如 SQL)中正确过滤,别再看了!
为什么这很重要?假设您有一个数据集(顺便说一句,喜欢数据集作为参数的数据源,将它们保存在服务器上以供反复使用)用于显示供应商列表,供用户从中选择一个或多个(多个)。如果该列表有 10,000 个长怎么办。您不想使用:WHERE VENDOR_ID IN(@VENDOR)。如果列表足够长,它会爆炸,您将不得不在 SSRS 日志中查找错误。所以,这就是为什么我们需要检查是否选择了 ALL 的原因之一。
创建一个与数据集参数相同的新参数(因此它们都使用相同的数据集并具有相同的默认值),确保将其设置为多选和隐藏(您不希望用户看到它) .我命名我的---所有地方---是我的参数名称,以便于区分。
对于用作 REPORT 数据的数据集,添加一个额外的参数。我喜欢称它为@Is----AllChecked,其中---- 是我的参数名称。它被命名为布尔值(1 表示真,0 表示假)。在本例中,它将被命名为@IsVendorAllChecked。
在 DEFAULT 值表达式中检查每个 REPORT 参数的计数是否相同(用户使用的和重复的),并返回一个值,如相同则为 1,否则为 0。例如 =IIF(Parameters!Vendor.Count = Parameters!VendorAll.Count, 1, 0)
在您的报告数据集中,评估参数值并在您的 SQL 中进行相应操作: where ( (@IsVendorAllChecked = 1 and vendor_id = vendor_id) 或 (@IsVendorAllChecked = 0 and vendor_id in(@Vendor)))< /p>
@Vendor 显然是用户交互的参数。
一直想做出贡献。 SE:报告生成器检查是否全部被选中 SE:报表生成器如何检查是否全部被选中 SE:Report Builder 参数查询表达式不能使用聚合