SSRS:当Multi-value Parameter = Select ALL删除脚本中的过滤器
SSRS: When Multi-value Parameter = Select ALL remove filter in Script
我有一个包含多个多值参数的报表。我想做的是如果参数是 = Select All 我会将该参数删除到我的 SQL 脚本中。
示例是我有一个产品组和产品名称参数,我想要的是如果用户 select 是我的脚本的所有产品组:
SELECT * FROM TABLE WHERE PRODUCT_NAME IN (@ProductName)
如果用户没有 select 所有产品组,我的脚本将是这样的:
SELECT * FROM TABLE WHERE PRODUCT_NAME IN (@ProductName)
AND PRODUCT_GROUP IN (@ProductGroup)
我想知道当多值参数为 = Select All 时如何检测。我认为如果我只是删除脚本上的过滤器,这将真正有助于工具的加载时间。
据我所知,您无法检测到用户何时检查了 "Select All"。
要在用户选择多值参数中的所有选项时完全删除过滤器,您必须在存储过程中使用逻辑来检查是否所有选项都在参数中传递给它,并且如果是这样,请不要在主查询中使用该参数。
您可以将自己的 ALL
值添加到参数中。在数据集查询中检查用户是否选择了 'ALL' 如果是则不要使用参数。
像这样:
IF ('ALL' IN @ProductGroup)
BEGIN
SELECT * FROM TABLE WHERE PRODUCT_NAME IN (@ProductName)
END
ELSE
SELECT * FROM TABLE WHERE PRODUCT_NAME IN (@ProductName)
AND PRODUCT_GROUP IN (@ProductGroup)
它没有经过测试,但应该可以工作
如果您的参数基于数据集,您可以比较参数中选择的元素数量与参数数据集中的项目数量。
=IIF(Parameters!AREA.Count = CountRows("Areas"), "ALL", "Some")
我有一个包含多个多值参数的报表。我想做的是如果参数是 = Select All 我会将该参数删除到我的 SQL 脚本中。 示例是我有一个产品组和产品名称参数,我想要的是如果用户 select 是我的脚本的所有产品组:
SELECT * FROM TABLE WHERE PRODUCT_NAME IN (@ProductName)
如果用户没有 select 所有产品组,我的脚本将是这样的:
SELECT * FROM TABLE WHERE PRODUCT_NAME IN (@ProductName)
AND PRODUCT_GROUP IN (@ProductGroup)
我想知道当多值参数为 = Select All 时如何检测。我认为如果我只是删除脚本上的过滤器,这将真正有助于工具的加载时间。
据我所知,您无法检测到用户何时检查了 "Select All"。
要在用户选择多值参数中的所有选项时完全删除过滤器,您必须在存储过程中使用逻辑来检查是否所有选项都在参数中传递给它,并且如果是这样,请不要在主查询中使用该参数。
您可以将自己的 ALL
值添加到参数中。在数据集查询中检查用户是否选择了 'ALL' 如果是则不要使用参数。
像这样:
IF ('ALL' IN @ProductGroup)
BEGIN
SELECT * FROM TABLE WHERE PRODUCT_NAME IN (@ProductName)
END
ELSE
SELECT * FROM TABLE WHERE PRODUCT_NAME IN (@ProductName)
AND PRODUCT_GROUP IN (@ProductGroup)
它没有经过测试,但应该可以工作
如果您的参数基于数据集,您可以比较参数中选择的元素数量与参数数据集中的项目数量。
=IIF(Parameters!AREA.Count = CountRows("Areas"), "ALL", "Some")