【问题标题】:Cascading multi-value parameter issue in SSRS 2008SSRS 2008 中的级联多值参数问题
【发布时间】:2018-10-22 22:02:33
【问题描述】:

基本上我已经使用 SSRS 2008 构建了一个报告,该报告具有级联参数,独立的参数是一个多值参数(工作单位),其中填充了来自数据库查询的值,依赖参数(相应工作中包含的职位) units) 还从带有 where 子句的查询中获取值,如下所示:

WHERE position.unitId IN (@units)

@units 是多值参数。 单位的默认值是查询本身——用户可以访问所有这些。因此,在打开报告时,会选择所有可用单位并检索所有相应的工作职位 - 工作正常。但是 aser 也不能访问任何单元,这会导致相关查询失败,因为没有检索到任何单元,因此 @units 不包含任何值。我原以为在@units 存在值之前不会触发查询。无论如何,在以各种方式查询工作职位之前,我尝试检查@units 的内容:

*将@units 参数替换为以下表达式:=IIF(Parameters!units.Count = 0, "00000000-0000-0000-0000-000000000000", Parameters!units.Value)

*具有另一个参数,其中包含@units 值的逗号分隔字符串,并在执行相关数据集之前检查其长度是否大于 0,等等。

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

任何帮助将不胜感激。

【问题讨论】:

    标签: sql-server ssrs-2008


    【解决方案1】:

    我也遇到过类似的问题。需要明确的是,从 SSRS 的角度来看,这不是问题。 SSRS 认为这是正确的做法。我解决此问题的方法是执行以下操作:

    您需要修改预填充@Unit 参数的查询。在下面的代码中,我说“@Unit 脚本”是指运行以预填充 @Unit 参数的当前 SQL 脚本。

    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 下拉列表中将显示一个值/选项,显示为“没有可用的单位”。然后,您的 Position_Title 参数下拉菜单将找不到 UnitID 等于“00000000-0000-0000-0000-000000000000”的任何职位。

    现在,如果您有任何其他依赖于 Position 参数的参数,您可能会遇到类似的问题,您的以下依赖参数无法找到值,因为 Position 参数没有可用的值。如果是这种情况,请对 Position 参数重复上述逻辑(从而创建一个仅在没有找到与 @Unit 匹配的 Position 时显示的选项。

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

    【讨论】:

    • 非常感谢,这几乎解决了这个问题,很好的方法! :)
    • 谢谢!我还使用它来构建更复杂的参数选项列表。例如,您可以使用这种方法在列表或空行之间添加分隔符以表示中断。我尝试使用它来增加最终用户体验的友好性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    相关资源
    最近更新 更多