【问题标题】:Show all records/some records based on parameter value根据参数值显示所有记录/部分记录
【发布时间】:2013-08-13 07:40:56
【问题描述】:

我有一个返回大约 100 行的存储过程。一列是类别。

在 SSRS 中,我创建了与该存储过程相关的 DataSet。在报告正文中,我有 Tablix,我与 DataSet 相关。

现在,我有一个名为 FilterColumn 的附加参数,它包含数据集中的所有不同类别,以及一个名为“所有产品”的行。

如何根据该参数过滤 tablix 以显示特定类别的产品还是所有产品?

【问题讨论】:

  • 参数是单值还是多值?是否有任何原因您不能在存储过程级别进行过滤,例如数据在报告的其他地方使用?
  • 其实是为了演示,展示过滤器的变化。参数是单值的。
  • 还有一个,抱歉...您的参数称为Sorting,但它实际上用于过滤 Tablix。它是否正确?看起来有点混乱。
  • @IanPreston 感谢您的建议,我已经更正了问题文本 :) 事实上,故事是关于过滤,而不是排序

标签: reporting-services ssrs-2008 ssrs-2012


【解决方案1】:

您需要设置类似于以下的过滤器:

表达式在哪里:

=IIf(Parameters!FilterColumn.Value = Fields!Category.Value
        or Parameters!FilterColumn.Value = "All products"
    , "Include"
    , "Exclude")

这将根据参数值匹配行类别,或者,如果值 = All products,则将包括所有行。

正如 cmets 和其他答案中提到的,这在 SP 中也是可能的,但因为它似乎是专门为了演示功能,所以这应该在报告级别上解决问题。

【讨论】:

  • 这是否适用于具有多个过滤器但只能填充一个的报告集?
【解决方案2】:

我已经创建了一些解决方案并为我工作:

Expression字段中,我放了第一个表达式:

1.  Iif(Parameters!FilterColumn.Value = "All", 1, Fields!Category.Value)

Value 字段中,我放了第二个表达式:

2.  Iif(Parameters!FilterColumn.Value = "All", 1, Parameters!FilterColumn.Value)

所以,当我在参数中选择“全部”值时,第一个表达式将产生 1,第二个表达式将产生 1,并且我有 1 = 1,这对所有行都是正确的,并且我得到了表中的所有行。

当我从参数中选择特定类别时,第一个表达式的结果将是Fields!Category.Value,第二个表达式的结果将是Parameters!FilterColumn.Value。很简单,我得到了Fields!Category.Value = Parameters!FilterColumn.Value,或者只是给我在参数中选择的类别所在的行。

【讨论】:

    【解决方案3】:

    将附加参数传递给您的存储过程,以便您将已排序的数据发送到您的报表。这将避免根据您的参数选择创建多个 Tablix。

    【讨论】:

    • 或者您可以在 Tablix 上右键单击要排序的列。 Tablix 属性--> 选择排序-->要排序的列。
    • 故事是关于过滤而不是排序,混淆是因为我命名参数Sorting。现在我正在纠正这个,对不起:)
    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2020-08-12
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多