[]
        
(Showing Draft Content)

过滤

概述

过滤属性('F')允许你设置模板内数据过滤的类型。此属性提供了两种过滤选项:条件过滤(Conditional)和切片过滤(Slice filters)。你可以单独使用这些过滤选项,或结合使用来从表格中过滤数据。此属性可以从单个或多个表格中过滤数据,以生成报告。

GcExcel 仅支持在常规数据源上使用过滤属性,如 java.sql.ResultSet 或 ITableDataSource。

type=warning

注意:你可以通过创建自定义数据表来对 JSON 数据源应用过滤。更多信息,请参考数据源中的自定义数据表。

过滤属性

条件过滤器

条件过滤器使用运算符和 AND、OR、NOT 以及 LIKE 等的关键字来过滤数据。LIKE 关键字和比较运算符具有最高优先级,将首先被评估。对于其余的关键字,其优先级顺序为:NOT > AND > OR。此外,使用成对的括号可以自定义这些运算符和关键字评估的操作顺序。

值类型: 表达式

F/Filter = (field1 > 1 AND field2 = 2 OR field3 <> 3)

下表列出了条件过滤器(Conditional Filter)所支持的运算符和关键字:

操作符/关键字

支持的操作符/关键字

符号

描述

操作符

小于

<

过滤出小于给定值的数据。

小于等于

<=

过滤出小于等于给定值的值。

大于

>

过滤出大于给定值的值。

大于等于

>=

过滤出大于等于给定值的值。

等于

=

过滤出等于给定值的值。

不等于

<>

过滤出不等于给定值的值。

关键字

AND

逻辑运算符,用于在查询中组合多个条件。当两个条件都为真时,它返回真。

例如:{{ds2.amount(F = (ds2.amount < 500 and ds2.age < 18))}}

OR

逻辑运算符,用于在查询中组合多个条件。如果至少有一个条件为真,则返回真。

例如:{{ds2.amount(F = (ds2.amount < 500 or ds2.age < 18))}}

NOT

逻辑运算符,用于在查询中否定一个条件。如果条件为假,则返回真;如果条件为真,则返回假。

例如:{{ds2.amount(F = (not ds2.amount < 500 or not ds2.age < 18))}}

包含

LIKE

一个用于模式匹配操作的关键字。以下有两种通配符可与 LIKE 运算符结合使用:

  • 星号 * 代表零个、一个或多个字符。

  • 问号 ? 代表单个字符。

例如:{{ds2.name(F = (ds2.name like "*wh?te?"))}}

分别使用 ~*~? 来匹配字符 *?以及他们自己。

type=warning

注意:在过滤条件中,左操作数必须是当前表中的字段,而右操作数可以是任何常量、当前表中的字段,或是另一个表中的引用字段。

示例 1:使用运算符进行过滤

{{order.oid(F = (order.count > 10))}}

下图展示了模板如何通过过滤出销售数量大于10的订单来生成报告。您还可以下载下面示例中使用的 Excel 模板布局。

FilterOperator.xlsx

image

示例 2:使用关键词进行过滤

{{order.oid(F = (order.cid ="C002" and order.pid = "W003"))}}

下面的图示展示了如何通过模板生成一份报告,该报告通过过滤筛选出客户ID为"C002"且产品ID为"W003"的所有订单。你也可以下载在下面示例中所使用的Excel模板布局。

FilterKeyWord.xlsx

image

示例3:多源报表

{{product.name(F=(product.pid = order.pid))}}

下面的图像展示了模板如何通过从不同的数据表中使用产品ID来筛选产品名称,从而生成一份报告。你也可以下载在下面示例中使用的Excel模板布局。

SimpleMultiDataSource.xlsx

image

示例4:复杂多源报表

Customer Name

Product Name

{{customer.name(F=(customer.cid = order.cid))}}

{{product.name(F=(product.pid = order.pid))}}

下面的图像展示了模板如何通过从不同的数据表中使用客户ID和产品ID来筛选客户和产品名称,从而生成一份报告。你也可以下载在下面示例中使用的Excel模板布局。

ComplexMultiDataSource.xlsx

image

切片过滤器

切片过滤器(Slice Filter)通过选取数组中从给定起始索引到给定终止索引的数据来过滤数据,同时还可以定义一个步长,用来确定索引之间的间隔。

值类型:数组

F/Filter = [start:stop:step]
  • start 指的是过滤开始的索引位置;

  • stop 指的是过滤结束前的索引位置,不包括这个位置本身;

  • step 定义了索引间的间隔,即每几个元素选择一个。

例如:使用切片过滤器

{{order.oid(F = [0:20:2])}}

下面的图像是关于模板如何生成报告的示例,该报告通过上述过滤规则筛选出前20个奇数位置的订单。你也可以下载在这个示例中使用的Excel模板布局。

SliceFilter.xlsx

image

示例:切片过滤反向操作

{{order.oid(F = [20:0:-2])}}

下面的图像展示了模板如何通过从索引20开始反向筛选最后二十个订单来生成报告。你也可以下载在下面示例中所使用的Excel模板布局。

SliceFilterReverseOperation.xlsx

image

type=warning

注意:当从记录的末尾开始迭代(反向操作)时,结果将会保持原来的顺序。这是GcExcel的一个限制。

组合过滤条件

你可以结合使用条件过滤器和切片过滤器来生成报告。

示例:组合过滤器

{{order.oid(F = (order.oid like "*1?")[0:5])}}

下面的图像展示了模板如何首先通过匹配表达式 "*1?" 来过滤订单ID,然后从过滤后的结果中选取前五条记录来生成报告。你也可以下载在下面示例中所使用的Excel模板布局。

CombinedFilter.xlsx

image

type=warning

注意:在过滤语句中,切片过滤器和条件过滤器只能出现零次或一次。