2.8 使用过滤器和输入控件

域使用不同的机制来筛选数据。

  • 可以通过在域中选择字段并指定比较值来过滤域(和域主题)。可以配置一些过滤器,供用户来选择数据。

  • 在域设计中,还可以定义基于条件的过滤器;当报告运行时,这些过滤器不会显示在报告查看器中。

不管您要处理域还是主题中的数据,都可以在专用编辑器中定义过滤器。此类过滤器可以减少视图默认返回的数据量,因而有助于提高视图的初始性能。

为防止用户查看整个数据集,您也可以在 JRXML 主题中使用输入控件,或者使用域设计中定义的过滤器,最终用户是看不到这些控件和过滤器的。有关详细信息,请参见部分 2.8.3, 输入控件和过滤器可用性

输入控件与过滤器可以平稳交互。例如,您可以在从包含输入控件的 JRXML 主题获取数据的专用视图内创建过滤器。

服务器会根据过滤器和输入控件刷新编辑器。由于输入控件与过滤器的某些组合不会返回数据,因此可能会导致生成空视图。

注:如果结果集为空,请检查是否使用了过滤器与输入控件的不兼容组合(例如,是否将标准过滤器与仅保留过滤器相组合),或者是否使用了定义不当的自定义过滤器表达式。(数据必须满足多个过滤器中的所有准则,而不是只满足这些过滤器的一部分准则。)有关详细信息,请参见自定义过滤

JRXML 是一种 XML 文件格式,用于保存和共享针对 ZENworks Reporting 及使用它的应用程序(例如 iReport Designer)创建的报告。JRXML 是一种开放格式,它使用 XML 标准来精确定义报告的所有结构和配置。

在某些情况下,过滤器可能会与视图参数冲突,此时,您必须通过编辑 JRXML 文件来重命名导致冲突的字段。

2.8.1 使用过滤器

可在以下位置定义过滤器:

  • 数据选择器(从域创建视图时)。

  • 专用编辑器(即使在视图基于 JRXML 主题的情况下)。

有关在数据选择器中定义过滤器的信息,请参见预过滤数据

此外,您可以使用自定义表达式来控制如何将过滤器应用到一个或多个字段,以及要应用哪些过滤器。有关详细信息,请参见自定义过滤

要在专用编辑器中创建过滤器,请执行以下操作:

  1. 数据来源选择面板中右键单击某个字段,然后单击创建过滤器

    过滤器面板中会显示一个新过滤器。如果过滤器面板已隐藏,则当您创建新过滤器时,该面板会显示。

    如果结果为空,请检查是否使用了过滤器与输入控件的不兼容组合。单击 ,将输入控件与过滤器面板中的过滤器进行比较。

    对于 Oracle 数据库,您在创建过滤器时可以使用“Null”值。对于 MS SQL 和 Sybase 数据库,可以使用空白。

  2. 使用过滤器中的字段来更改过滤器的值。

    根据选定的数据类型,过滤器可能是多选、单选列表或文本输入。

  3. 单击 ,然后选择最小化所有过滤器最大化所有过滤器,以切换过滤器中项目的展开状态。

  4. 单击 ,然后选择去除所有过滤器以去除过滤器。

  5. 单击 以隐藏过滤器的细节。

  6. 单击 以查看过滤器的细节。

  7. 单击全选复选框(如果显示在过滤器面板中)以选择数据集中的所有值。

    对于数字和日期,过滤器面板中不会显示全选框。

注:全选复选框不会确保每次报告运行时会选中所有值。相反,该复选框是一种快捷方式,帮助您快速选择数据集中当前可用的所有值。为确保在编辑或运行报告期间视图中显示所有值,请去除整个过滤器。在面板上,您还可以右键单击表中的某一列,通过显示的上下文菜单创建过滤器。在“图表”选项卡中,必须右键单击“数据来源选择”面板中的字段

当您更改过滤器时,服务器将使用新值来确定要显示的数据。如果您只更改了过滤器中的运算符,则必须取消选择该过滤器中的值,然后重新选择该值才能应用更新的过滤器。

如果过滤器包含多个值,您并不需要重新选择所有值。更改运算符后,按住 Ctrl 单击取消选择某个值,然后按住 Ctrl 单击重新选择该值。

相对日期

可以根据相对于当前系统日期的日期范围来过滤视图中的信息。要查看此信息,可以使用基于日期的过滤器,并使用格式 <关键字>+/-<数字> 指定一个文本表达式来描述您要查看的相对日期或日期跨度。

  • 关键字指出您要使用的时间跨度。选项包括:“日”、“周”、“季”、“半年”和“年”。

  • +- 指出时间跨度是在选定的日期之前还是之后。

  • 数字指出您要包含在过滤器中的时间跨度数目。

要创建相对日期过滤器,请执行以下操作:

  1. 遵循部分 2.8.1, 使用过滤器中的指导。

  2. 在过滤器的第一个文本框中,指定用于描述相对日期或日期跨度的表达式。

  3. 在过滤器的第二个文本框中,指定过滤器的基准日期。

要创建复杂过滤器,请执行以下操作:

  1. 右键单击交叉表中的某个组成员,然后选择仅保留排除

    针对内部组创建过滤器时,出现的过滤器可能会创建为复杂过滤器。

    复杂过滤器不可编辑,但可去除。如果创建并锁定了数据选择器向导过滤器,专用编辑器中也会出现复杂过滤器。

自定义过滤

如果您创建了多个过滤器,这些过滤器默认会通过隐式“与”运算符连接。也就是说,表、图表或交叉表中显示的数据就是应用所有过滤器后保留的数据。

不过,通过自定义过滤器功能,您不仅可以应用包含更复杂的嵌套式 AND、OR 和 NOT 运算符的自定义表达式,还可以对单个字段应用多重过滤器,从而控制所显示的数据。

注:对通过 OLAP 连接创建的专用视图无法使用自定义过滤器。

在以下情况下,自定义过滤器非常有用:

  • 使用“与”运算符不足以解决问题时。例如:假设有一家跨国公司需要针对其在华尔街办事处部署的未获许可的 Windows 操作系统产品检查相关数据。在此例中,用户有一张表,其中包含以下几列:

    • 地点

    • 操作系统产品名称

    • 许可证类型

    为了分析上述特定许可证数据,用户创建了下列(简单)过滤器,其中两个过滤器是针对“许可证类型”字段的:

    • A):“地点”等于“华尔街”

    • B):“操作系统产品名称”包含“Windows”

    • C):“许可证类型”等于“未知”

    • D):“许可证类型”等于“评估”

    然后,为了只显示所需信息,创建以下自定义表达式:

    • A and (B and (C or D))

    其含义为:

    • (“地点”为“华尔街”) and ((“操作系统产品名称”包含“Windows”) and ((“许可证类型”为“未知”) or (“许可证类型”为“评估”)))

  • 当您需要清除字段中的某些结果时。例如,如果该公司想要针对所有 Windows 操作系统产品(完全许可的除外)检查相关数据,某用户在一张表中使用以下列:

    • 操作系统产品名称

    • 许可证类型

    为了分析上述特定许可数据,该用户创建了以下(简单)过滤器:

    • A):“操作系统产品名称”包含“Windows”

    • B):“许可证类型”等于“完全”

    然后,为了只显示所需信息,创建以下自定义表达式:

    • A and (not B)

    其含义为:

    • (“操作系统产品名称”包含“Windows”) and (not (“许可证类型”等于“完全”))

这里只是列举了两个应用场景来说明,自定义过滤器可以显示您需要的结果,还可使视图变得更加精确。自定义过滤器还可以应用于许多其他场合下。

其他自定义过滤器任务包括:

  • 创建自定义表达式

  • 编辑自定义表达式

  • 去除自定义表达式

  • 向单个字段应用多个过滤器

    注:自定义过滤器可应用于视图,但过滤器细节将不会显示在预览中,也不会显示在基于该视图生成的报告中。

要创建和应用自定义过滤器,请执行以下操作:

  1. 部分 2.8.1, 使用过滤器中所述,为数据创建两个或更多个过滤器。这些过滤器可以是基于标准字段的过滤器,也可以是仅保留排除过滤器。

    当您创建要在自定义表达式中使用的过滤器时,视图中的数据将会消失,因为大部分数据都不满足所有过滤器准则。当您创建自定义表达式并将某些 AND 更改为 OR 与 NOT 时,数据会再次显示。

  2. 在过滤器面板底部,展开自定义过滤器表达式部分。

  3. 在文本输入框中,使用字母标记并结合以下运算符输入过滤器表达式:

    • AND 会缩小结果范围,只包含满足运算符前后两个过滤器的字段。

    • OR 会扩大结果范围,将会包含满足运算符前面或后面的过滤器的字段。

    • NOT 会排除与准则匹配的结果。

    • 括号用于将多个过滤器组合成表达式中的单个项目。

      注:过滤器中的字母标记区分大小写,而且必须为大写。

  4. 单击应用。您的视图会加以更新,反映出新应用的过滤器准则。

创建自定义过滤器后,可将另一个过滤器添加到表达式中,或者去除现有的表达式。

注:如果要删除的简单过滤器是某个自定义过滤器的一部分,您必须先将其从自定义过滤器表达式中去除,否则在删除该过滤器的同时会删除自定义过滤器表达式。

要将新过滤器添加到现有的自定义表达式,请执行以下操作:

  1. 过滤器面板中创建一个新过滤器。

  2. 自定义过滤器表达式中,单击文本输入框内部以编辑表达式。

  3. 将新的过滤器添加到表达式中。

  4. 单击应用以应用新的准则。

要从自定义表达式中去除某个过滤器,请执行以下操作:

  1. 展开自定义过滤器表达式部分。

  2. 在文本输入框中,从表达式中去除不需要的过滤器,并视需要调整表达式。

  3. 单击应用以应用新的准则。

使用自定义表达式时,可以删除现有表达式以及创建新表达式。

要从视图中去除自定义表达式,请执行以下操作:

  1. 展开自定义过滤器表达式部分。

  2. 从文本输入框中清除表达式。

  3. 单击应用。该表达式随即去除,剩余的过滤器则保持不变。

在优化自定义表达式时,可以从过滤器面板中删除未使用的过滤器。

  • 如果要从自定义过滤器中去除过滤器,请将鼠标光标置于过滤器标题栏中的 上,然后单击去除过滤器

  • 如果要去除所有现有过滤器(包括自定义表达式),请将鼠标光标置于过滤器面板中的 上,然后单击去除所有过滤器

2.8.2 使用输入控件

在专用编辑器中,您可以查看主题中定义向用户显示的输入控件。您可以接受控件的默认值,也可以输入其他值。专用编辑器会通过在工具栏上显示活动的 图标,来指明视图包含输入控件。单击 图标可以选择新值,或者将值另存为此视图的新默认值。

要使用过滤器在视图中添加输入控件,请执行以下操作:

  1. 创建新过滤器,或使用过滤器面板中的某个现有过滤器。

  2. 在“过滤器”中,单击新过滤器旁边的 ,然后选择显示运算符

  3. 从下拉列表中选择一个运算符,并在文本框中指定值。

    使用视图来运行报告时,该过滤器将显示为输入控件。

  4. 将光标置于 上,然后选择将专用视图另存为...

  5. 为视图命名,选择位置,然后单击保存

  6. 在工具栏上单击

    系统只会显示主题中定义的输入控件。如果主题中未定义输入控件,该按钮将灰显。

要编辑视图输入控件的值,请执行以下操作:

  1. 在工具栏上单击

    一个窗口即会显示,其中列出了主题中定义的输入控件。

  2. 选择新值。

  3. 要更改输入控件的默认值,请选中保存视图时将这些值设置为默认值复选框。

    当您保存视图时,选定的值会变成默认值。

  4. 单击确定

    专用视图即会显示更新的数据。

2.8.3 输入控件和过滤器可用性

当您运行报告时,输入控件和过滤器将显示在编辑器中。

  • 编辑视图时,可将输入控件设置为可见或不可见:

    • 设置为始终提示的输入控件将显示在编辑器中,并且在报告运行之前始终会显示。

    • 未设置为始终提示的输入控件在编辑器中不会显示,但会在报告运行时显示。

  • 可以锁定或解除锁定在数据选择器向导中创建的过滤器:

    • 解除锁定的过滤器将在编辑器中显示过滤器细节,在报告运行时,您可以通过选项按钮来使用这些过滤器。

    • 当您单击图标 时,锁定的过滤器将在编辑器中显示输入控件。但是,在运行报告时,您将无法通过选项按钮来使用这些过滤器。您可以从编辑器中去除过滤器,以便用户在运行报告时可以看到所有未过滤的数据。

  • 运行报告时,始终可以通过编辑器的过滤器面板以及通过选项按钮来使用编辑器中定义的过滤器。

为所需运行时间较长的大型视图设置输入控件时,请考虑将该视图设置为始终提示。在报告运行之前,报告查看器会提示您提供输入选项以防报告使用默认输入选项运行。

可以使用解除锁定的过滤器。如果输入控件或过滤器未显示在报告查看器中,单击选项按钮即可查看。

要将某个输入控件设置为提示模式,请执行以下操作:

  1. 在储存库中找到一个主题,然后单击编辑

  2. 控件和资源面板中的输入控件选项下,单击始终提示

要确定某个输入控件是否可见,请执行以下操作:

  1. 在储存库中找到一个主题(例如参数化报告主题),然后单击编辑

  2. 控件和资源面板上,单击输入控件的名称。

  3. 查找输入控件面板上,单击下一步

    创建输入控件面板的底部,如果可见复选框处于选中状态,则报告运行时其中会显示该输入控件。

    如果您没有为输入控件指定默认值,则当用户基于主题创建视图时,系统会提示他们选择值。

要锁定过滤器,请执行以下操作:

  1. 在数据选择器中选择字段后,单击预过滤器

  2. 双击字段面板中的某个字段。

  3. 过滤器面板中定义一个过滤器。

    有关详细信息,请参见预过滤数据

  4. 选中已锁定复选框,然后单击确定

  5. 单击打开专用编辑器。

    过滤器面板中的已锁定标题下将会显示该过滤器的名称以及有关锁定的备注。