基本上我已经使用SSRS 2008构建了一个报告,该报告具有级联参数,独立的是一个多值参数(工作单位),其中填充了来自数据库查询的值,相关参数(各个工作中包含的作业位置) units)也从带有where子句的查询中获取值,如下所示:
WHERE position.unitId IN (@units)
@units是多值参数。 单位的默认值是查询本身 - 用户有权访问所有这些值。因此,在打开报告时,将选择所有可用的单位并检索所有相应的工作职位 - 工作正常。但是aser也可以访问任何单元,这使得依赖查询失败,因为没有检索单元,因此@units不包含任何值。我本来以为在@units存在值之前不会触发查询..无论如何我在尝试以各种方式查询工作职位之前检查@units的内容:
*用以下表达式替换@units参数:= IIF(参数!units.Count = 0,“00000000-0000-0000-0000-000000000000”,参数!units.Value)
*使另一个参数包含逗号分隔的@units值字符串,并在执行依赖数据集之前检查其长度是否大于等。
但是现在,当我打开报告时,作业位置的下拉列表为空,禁用并保持不变,直到更改单位值或运行报告。在那之后,他们似乎刷新好了。 所以我的问题是,控件被禁用的原因是什么(检索单位,为什么表达式作为工作位置的参数值会混淆它?)以及如何以正确的方式处理它,不能似乎在网上找到了一些真正相同的东西。
非常感谢任何帮助。
答案 0 :(得分:1)
我遇到过类似的问题。需要明确的是,从SSRS的角度来看,这不是问题。 SSRS认为这是正确的行动方案。我如何解决这个问题的方法是:
您需要修改预先填充@Unit参数的查询。在下面的代码中,我说“@Unit Script”我引用当前运行的SQL脚本来预先填充@Unit参数。
With Unit_CTE as (
--Insert @Unit Script here
)
, Count_of_Units as (
Select Count(1) as Unit_Count
From Unit_CTE
)
--Begin a query that will only return a value when Unit_Count returns 0
Select null as 1st_Field --this will be a placeholder for your first field in the @Unit Script
--To union two queries together, they must have the same number of fields, each with compatible output types.
--Therefore, you will need to create an empty or null placeholder field for each field in your @Unit script
, '00000000-0000-0000-0000-000000000000' as Unit_ID
, 'No Units Available' as Unit_Name --or whatever else you're calling the Unit name field
From Count_of_Units
Where Unit_Count = 0
Union All
--Insert your @Unit Script here
现在你所拥有的是一个将返回两个输出的查询:
现在,如果您有任何其他依赖于Position参数的参数,您可能会遇到类似的问题,其中您的以下相关参数无法找到值,因为Position参数没有可用值。如果是这种情况,请对Position参数重复上述逻辑(从而创建一个仅在找不到与@Unit匹配的位置时显示的选项)。
希望这是有道理的。如果您有任何问题或疑虑,请发表评论。我知道这可能看起来过于复杂(并且在某处可能会有一个更简单的解决方案)但我已经一次又一次地使用它并且它对我很有用,并且限制了SSRS错误的数量和奇怪的行为最终用户看到了。