本帖最后由 williamluo 于 2017-12-26 17:55 编辑
有些报表的数据查询条件可能有多个,条件之间还有关联关系,即在用户选定第一个条件之后,第二个条件的可选内容是根据第一个条件的选定值确定的。这种报表数据的多条件查询称为级联查询。 在下面的示例中,有两个查询条件: 【地区】:比如华北、华东等。 【城市】:比如北京、上海等。 用户先用一个下拉框选定一个地区,再从另一个下拉框中选择城市。城市下拉框中列出的城市,是根据地区条件,从数据库查询出来的该地区的城市列表。如下图:
实现这种级联查询的思路如下: (1)创建数据集DataSet1,包含的数据是地区列表。 (2)创建参数P1,基于数据集DataSet1,让用户选择地区。 (3)创建数据集DataSet2,以参数P1为查询条件,查出某一地区的城市列表。 (4)创建参数P2,基于数据集DataSet2,让用户选择城市。 (5)创建数据集DataSet3,以参数P2作为查询条件,查出指定城市的业务数据。 (6)添加报表元素,比如表格或图表,展示数据集DataSet3中的业务数据。
下面介绍具体的操作步骤。
(1)创建数据集DataSet1为第一级参数准备数据集,查询出所有的【地区】,SQL语句如下: select DISTINCT 地区 from 客户
(2)创建参数P1
第一级参数为用户提供下拉框,以便选择地区。参数定义信息如下图:
为了以下拉框形式显示,指定参数的【可选值】来自数据集,如下图: 其中,【值字段】一般是编码性质的字段,实际传递的参数值就是这个字段的值;【标签字段】一般是名称性质的字段,是显示在下拉框中便于用户识别、选择的。
在本例中,两个字段都选择【地区】字段。
(3)创建数据集DataSet2为第二级参数准备的数据集为城市列表,并且为了实现级联查询的效果,这个城市列表并不包括全国所有的城市,而是要根据第一级【地区】参数,过滤出选定地区的城市。
先定义数据集参数@Parameter1,引用第一级参数P1:
再定义数据集的查询,SQL语句如下: select 城市 from 客户 where 地区 in(@Parameter1);
(4)创建参数P2
第二级参数为用户提供下拉框,选择一个城市。参数可选值来自数据集DataSet2:
(5)创建数据集DataSet3数据集DataSet3是真正需要展示为报表内容的数据。
先添加数据集参数,将报表参数P2引用过来:
再定义查询语句,使用城市作为过滤条件: select * from 客户 where 城市 in(@city)
(6)添加报表元素拖放一个表格到设计区,绑定数据集DataSet3的字段,设置适当的格式,如下图:
预览效果如下图:
|