知识库

推荐内容

快逸做的更好

产品优势

您的位置: 首页 > 知识库 > 设计基础 > 巧用快逸报表属性中的显示值和独立多数据集

巧用快逸报表属性中的显示值和独立多数据集

复杂报表设计" target="_blank" class="quieeLink1">设计Web报表时,存储在数据库中的往往是员工D、员工编号、产品序号、简称,而报表展现出来的却需要是员工的姓名和产品的名称。

而且很多时候员工ID和员工姓名不是来自数据库的同一个表,在老式的报表工具中需要程序员写SQL将几个表中的数据字段拼接在一起。这时需要同时对这几个表进行WHERE条件运算,往往运算速度很慢;而且SQL写起来也比较复杂,后期维护困难。

在这种情况下,利用快逸报表的”报表属性”中的”显示值”和”独立多数据集”往往可以轻松的解决问题,而且解决方案非常直观,便于后期的维护和修改。具体应用例子我们来看下面这个张报表,如下图:

快逸报表中常见的订单统计表

这是一种常见的订单统计表,报表中统计了不同年份中,各个销售人员完成订单金额的情况,以及各年份的订单金额总和。

这张报表是一张典型的二级分组报表,第一级按年份进行分组,第二级按销售员进行分组,这时问题来了,如果产生数据集ds1的物理表中,只有”雇员ID”,没有雇员的姓氏和名字。那如何得到雇员的全名呢?如下图所示:

数据集ds1中只有雇员ID,没有雇员的姓氏和名字

图中:A2表达式为:=ds1.Group(year(订购日期),false)+”年”,B2表达式为:=ds1.Group(雇员ID,false),数据集ds1里面没有雇员的姓氏和名字。这时如果不想写SQL语句改数据集ds1来增加雇员的姓氏和名字,有没有更一种简单的方法得到雇员的姓名呢?答案是利用快逸”报表属性”中的”显示值”和”独立多数据集”。如下图所示:

利用快逸报表属性中的显示值和独立多数据集” width=

如图中所示:用简单的SQL语句增加一个数据集ds2:SELECT 雇员.雇员ID,雇员.姓氏,雇员.名字 FROM 雇员,然后直接设置B2的显示值为: ds2.select1(姓氏+名字,雇员ID==value()),这样就通过”显示值”表达式把”雇员ID”变成了”姓名”。这也就引出了快逸”独立多数据集的概念”,也就是在报表单元格中不能用多个数据集,但在单元格的”显示值”中却可以使用多个数据集,而且多个数据集可以相互关联。

我们再来看报表的C2和D2单元格的表达式,C2格中为:=ds1.sum(单价*数量),D2格中为:=sum(C2{}),根据快逸分组扩展的概念,C2只求数据本年本雇员的”单价*数量”,所以表达式很简单;而D2则通过更改主格为A1,从而通过sum(C2{})可以直接对本年度分组内C2格扩展出的所有单元格求和,如下图所示:

更改D2左主格,从而通过sum(C2{})可以直接对本年度分组内C2格扩展出的所有单元格求和

这时细心的读者可能会问:最后一列中的”比去年增长金额”如何计算?这个同样是利用”报表属性”中的”显示值”和”独立多数据集”:首先我们将数据集ds1原封不动的复制成数据集ds3:然后在E2里面写表达式:=year(ds1.订购日期)-1,再设置E2的”显示值”为:if(value() in ds3.Group(year(订购日期)), sum(C2{}) – ds3.sum(单价*数量,year(订购日期) == year(ds1.订购日期)-1),”去年为空”)。就能达到目的了,最终结果如第一张图所示。如果仔细观察还会发现用这种方法,还可以做出与上年或者上个月的同期比等报表,至于如何做留给读者自己去思考吧!

读到这里,有的读者可能还是觉得这样实现功能非常复杂,但是这仅仅是快逸报表免费版的功能,在快逸开发版和增强版中有更多高级功能,可以用更简单的方法来做本文的这张报表,包括直接在表达式中使用多个数据集。快逸报表开发版和增强版都提供免费试用,申请地址:http://www.quiee.com.cn/archives/341

快逸报表免费下载地址:http://www.quiee.com.cn/archives/337,推荐试用免费版。

引自:报表工具知识库
相关文章:Sql语句中的as问题 ; 多源关联分片介绍 ; 报表工具制表能力的探讨;五种主流web报表工具的功能对比模板与数据能否分离
其他相关内容:如何用多源关联设计复杂报表免费.NET Web报表工具下载探讨Web报表工具;.net报表研究

发布日期:2009/04/09
本文分类: 设计基础