SSRS 2008中的级联多值参数问题

时间:2014-01-27 21:55:06

标签: sql-server ssrs-2008

基本上我已经使用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值字符串,并在执行依赖数据集之前检查其长度是否大于等。

但是现在,当我打开报告时,作业位置的下拉列表为空,禁用并保持不变,直到更改单位值或运行报告。在那之后,他们似乎刷新好了。 所以我的问题是,控件被禁用的原因是什么(检索单位,为什么表达式作为工作位置的参数值会混淆它?)以及如何以正确的方式处理它,不能似乎在网上找到了一些真正相同的东西。

非常感谢任何帮助。

1 个答案:

答案 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

现在你所拥有的是一个将返回两个输出的查询:

  1. 如果有最终用户可以看到的单位,那么这些单位将显示为正常而没有添加到列表中。
  2. 如果最终用户无法看到单位,则单个值/选项将显示在@Unit下拉列表中,该列表将显示“No Units Available”。然后,您的Position_Title参数下拉列表将找不到UnitID等于“00000000-0000-0000-0000-000000000000”的任何位置。
  3. 现在,如果您有任何其他依赖于Position参数的参数,您可能会遇到类似的问题,其中您的以下相关参数无法找到值,因为Position参数没有可用值。如果是这种情况,请对Position参数重复上述逻辑(从而创建一个仅在找不到与@Unit匹配的位置时显示的选项)。

    希望这是有道理的。如果您有任何问题或疑虑,请发表评论。我知道这可能看起来过于复杂(并且在某处可能会有一个更简单的解决方案)但我已经一次又一次地使用它并且它对我很有用,并且限制了SSRS错误的数量和奇怪的行为最终用户看到了。