这周我看到了同样的事情,结果证明是因为我的多值参数的“默认列表”中有一些值有时不在数据选择中——在我的例子中,默认列表的值是对于我可能选择的某些日期无效。
这让我很着迷:SSRS 在开发预览期间允许在默认列表中使用无效值,但不允许在生产环境中使用它们。
在我的示例中,报表是在报表生成器中开发的。当我在报表生成器中对报表进行“运行”(预览)时,按照设计,默认列表值的列表参数复选框被选中。但是当我保存报表并以用户的方式运行它时——从 Reporting Services 浏览器页面运行报表——然后没有选择任何值——没有默认值。
然后,为了解决这个问题,我采用了所有选择标准,并将它们应用于默认列表——确保“默认值”仅包含“可用值”中的值——然后是默认值在 Report Builder 开发和 SSRS 生产中都被选中。
示例:假设我对“可用值”的选择查询是:
SELECT Type
FROM MyTable
WHERE Date <= @BEG_DATE
AND Date >= @END_DATE
并假设,使用 2013 年 1 月 1 日和 2013 年 12 月 31 日作为日期,以上返回 'A','B','C','X','Y','Z' 为值列表,供用户选择(显示为复选框)。
现在,假设我对“默认值”的选择查询是:
SELECT Type
FROM MyTable
WHERE Type IN ('A','B','G','H')
此示例中的问题是,对于日期 2013 年 1 月 1 日和 2013 年 12 月 31 日,默认值“G”和“H”不是有效值。
此示例中的修复方法是在“默认值”查询中添加到“WHERE”子句。它变成:
SELECT Type
FROM MyTable
WHERE Type IN ('A','B','G','H')
AND Date <= @BEG_DATE
AND Date >= @END_DATE
现在,当针对日期 1/1/2013 和 12/31/2013 运行此默认值查询时,“G”和“H”会退出默认值,只留下“A”和“B” " 作为默认值。 “A”和“B”都可以选择,因为它们也都在参数的可用值中。因此,默认多值参数现在可以工作,无论是在开发中,还是在保存报告后(部署后、发布后)并从浏览器运行它。