【问题标题】:SQL Report Builder 3.0 trying to check for nulls OR a date in a date range and received filter errorsSQL Report Builder 3.0 尝试检查空值或日期范围内的日期并收到过滤器错误
【发布时间】:2014-02-19 02:29:46
【问题描述】:

我是报表生成器的新手,我将它与 SharePoint 2010 一起使用来创建包含多个列表的报表。我有一个数据集,其中包含一个日期时间字段列,我需要对其进行查询以限制拉回报告的行。我认为过滤器可以解决问题......但是我似乎无法找出只提取我需要的东西的正确方法。 我需要 orderstatus 已完成且 date1 为空或已推迟到 2015 年的所有行。

示例数据:

ID  DATE1           OrderStatus
1   Empty           Completed
2   Empty           Not Started
3   12/01/2012      Completed
4   03/05/2013      Completed
5   08/21/2014      Completed
6   12/31/2014      Completed
7   01/07/2015      Completed
8   01/08/2015      Not Started
9   01/31/2015      Completed

在组属性中,我添加了 OrderStatus (Text) = Completed 的过滤器,这有效,但我还需要所有日期为空的行(或 1960 年之前的任何内容)或年份为 2015 年且 orderstatus 已完成的日期。 从上面的数据中,我希望在我的报告中看到以下行: 1、7、9

有没有更好的方法来添加 OR 选项,当我将 fx 用于表达式或值时,我得到 rsfilter 错误。 这是第一个过滤器:

 Expression    OrderStatus (Text)
 Operator       =
 Value             Completed

这是我添加的第二个过滤器:(此过滤器收到错误,不会处理)

 Expression    Date1   (Date/Time)
 Operator       =
 Value [Expr]   =(Fields!Date1.Value) < 12/01/1960 Or (Fields!Date1.Value) > 12/31/2014

我尝试了使用 OrElse、Xor、IsNothing、多个 Ands 等的不同方法...在查询级别进行行和报告级别过滤,但仍然得到类似的结果。 有人能指出我实现最终目标的正确方向吗?我在 Microsoft 中查看过,他们的示例没有 1 列需要空白和包含在结果集中的日期范围的场景。

我已按照指示更正了上述语法错误,但仍有 RSFilterProcessError。我会看看其他例子。该工具无法让我轻松复制过滤器代码并粘贴到此处。欢迎所有建议。

【问题讨论】:

  • 我更正了语法并收到了类型错误,因此我修改了表达式以仅计算 并休了一年,以便类型兼容。现在我收到以下错误............无法评估分组“Details1”的 FilterValue。 (rsFilterEvaluationError)

标签: sql sql-server reporting-services reportbuilder3.0


【解决方案1】:

我可以在这些表达式中看到语法问题:

Year(Fields!Date1.Value < 1960)
Year(Fields!Date1.Value = 2015)

括号放错地方了。 Year() 是一个接受日期参数并返回年份的函数,然后您将其与一个值进行比较。

将它们更改为:

Year(Fields!Date1.Value) < 1960
Year(Fields!Date1.Value) = 2015

【讨论】:

  • 我对语法进行了更改,我收到关于数据类型的错误,错误读取“无法执行分组“Details1”的 FilterExpression 处理。无法比较 System.DateTime 和 System 类型的日期.Boolean. 请检查filterExpression(rsComparisonTypeError)返回的数据类型
  • 您的代码非常混乱。 “或”后面的等号有什么作用?去掉它。查看更多示例并复制它们。
  • 我查看了所有可以找到并从 Microsoft 复制的示例......但是它们没有为 OR 场景提供解决方案,因此可能至少无法在组属性过滤器中完成日期字段。我可能必须将其带回行或查询级别才能使其工作。还是谢谢。
【解决方案2】:

我在尝试将复杂的语句放入报表生成器的过滤器时遇到了一些困难。对我有用的是将过滤器设置为布尔值并将表达式设置为 iif。

表达式: =IIF(Year(Fields!Date1.Value)

类型: 布尔值

运营商: =

价值: 是的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多