Crystal Reports - 从数据库中过滤数据

时间:2009-10-12 21:05:50

标签: sql crystal-reports filtering

我有一个连接数据库的水晶报告。此信息来自的数据表相当大,我需要知道如何过滤信息。

我的报告中有一个需要一系列要求的字段。我要从中提取的数据表对我不需要的其他部门提出了所有这些无关紧要的要求 例如:

我只需要查看NY IT Office服务信息。我的数据表中的列显示了所有内容,例如厨房服务,洗衣,停车,IT部门信息,最后是Office服务。有时我从中抽出的条目涉及所有这些部门 - 但我只关心我的部门 那么我怎样才能在我的字段上放置一个过滤器来显示我需要为我的特定部门看到的内容并且不显示其他信息?我尝试使用选择编辑器...但似乎我是告诉它不显示厨房服务,例如,它不会显示整个条目(即使我的部门参与)。

我不知道这是否清楚 - 但是使用这个该死的公式编辑器的一些帮助将非常感激。

3 个答案:

答案 0 :(得分:3)

将条件逻辑放入详细信息部分的“抑制”部分:

  1. 打开部分专家
  2. 选择左侧窗格中的详细信息部分
  3. 点击右侧窗格(Common选项卡下)中抑制(No Drill-Down)选项右侧的奇怪外观按钮。通常,按钮上的文字会改变颜色以指示是否存在条件逻辑 - 红色表示存在;蓝色意味着没有。 alt text
  4. 如果部门与您预期的部门不匹配,请提供一个布尔语句以评估为真
  5. 这将停止报告的“详细信息”部分中的输出。如果您已经细分了详细信息部分,则必须为每个子部分设置此逻辑。

    一个常见的误解我注意到在Crystal Reports中支持这些东西一直认为Suppression / etc需要用IF ... THEN完全刷新布尔语句 - 这不是必需的,你需要的只是实际的声明评价。

    这可以在几乎任何可以放在Crystal Report上的属性上完成。

答案 1 :(得分:1)

如果你有8.5之后的任何版本的Crystal,你几乎可以使用你想要的任何SQL作为报告的命令源,从而无需创建任何数据库对象。

此要求字段中存储了什么?听起来有点像每行有多个值。

编辑:好的,因为该字段确实是多个值,所以您可以尝试各种各样的事情。

1)如果“办公室服务”绝对是唯一的(例如,“主办公室服务”和“办公室服务”没有条目),那么您可以在记录选择公式中使用简单的LIKE:

{tblData.MultipleValueField} LIKE "*Office Services*"

2)如果您无法做出这样的假设,那么您可以使用数组将值拆分出来,然后测试是否存在“Office服务”:

"Office Services" In Split({tblData.MultipleValueField}, ",")

选项1可能运行得更快,因为过滤器将在服务器端完成,并且将通过网络发送更少的记录。选项2将涉及Crystal进行过滤和更多网络流量。 我希望其中一个符合您的要求。

答案 2 :(得分:0)

您可以通过存储过程访问数据,并在其中构建过滤器逻辑。