代码之美-水晶报表内功心法 --公式、函数与运行时总计 内功心法运行图

26 2009-7

【水晶报表内功心法】--公式、函数与运行时总计

分类:水晶报表 | 评论:0 | 浏览:123

本文的主题是:函数与公式、运行时总计。

本文还是以基础讲解为主,后面的一些实际场景中会有具体的使用

1:公式

公式可以说是水晶报表里精髓,其重要性有点像Excel的宏一样。

公式基本上可以分为两类,一是格式化类。一是运算类。当然,格式化的公式也是需要运算的。

水晶报表的一些内置的功能,本身也是依赖于公式的,只是做了封装。

公式有两种语法:crystal语法和Basic语法,没有根本性差异。

如果你之前用过Basic类的语言,那么这个就非常容易了。

可以从此处下载一个独立版本的水晶报表帮助文档,方便查阅。

《CR XI水晶报表开发官方中文帮助文档》

格式化类主要出现在如下位置:

比如,我们要把某个列中值等于12的值设置为蓝色,等于15的设置为红色,其余的设置为黑色。

在字段上点右键,格式化该字段,



这个图上的(x+2)后面就是一个公式,如果里面没有内容,这个图标就是这种默认的颜色。

如果里面有内容,则图标会变成红色。

本文的示例数据延续前文中的例子

实例1,如果用户分数等于12,则显示为蓝色,如果等于15分则显示为蓝色,其他显示为黑色。

点击上图中的(x+2),进入公式编辑界面。


代码之美-【水晶报表内功心法】--公式、函数与运行时总计 内功心法运行图

我抓了个大图,里面做了一些标记。

公式本身就比较简单了,不必再进行说明。

注意前面的图上左上角的两个指向,x+2是指检查该公式是否正确,检查完毕后停留在当前界面

保存并关闭,则是先检查后保存公式并且关闭本界面,回到前一界面上。

好了,我们再运行一下程序,效果就出来了。



实例2,控制每3条记录换页

进入节专家

  

点中“详细资料节”,勾选后面的“在后面新建页”,然后编辑后面的公式为



如果公式有错误,则会有类似下面的提示,当然,根据错误的不同,提示也不一样



再预览一下,之前我们显示1页的数据,已经分页了。注意上面的 1+,说明页数多于一页。



但是并没有显示实际页数,这是水晶报表的一个优化机制。如果是多页的数据,它只显示第一页

有点类似于我们的一些数据库分页操作一样。但是这个也带来很多批评。

而实际上,解决方法也是有的。

就是这样

CrystalReportViewer1.ReportSource = myReport;

CrystalReportViewer1.ShowLastPage();

CrystalReportViewer1.ShowFirstPage();

实际上也是模拟了我们的一个手工动作,就是先点击跳到最后一页,然后再切到第一页。

这个动作用户是感觉不到的,尚可以接受。

前面的是两个格式化类的公式,下面说一下运算类公式。

实例3,如果分数<15则显示不合格,等于15则为合格,大于15则为优秀

这个就是对数据的再加工了。

新建一个公式字段x1





然后把x1拖到界面上,放到原来数据的后面,预览后就显示



实例4,代码中修改公式

新建一个公式字段x2,里面就放一个现有字段即可



显示效果如下



恩,没什么感觉吧。

另外做一个公式字段x2title,作为x2这一列的题头

  

然后代码里控制一下:

myReport.DataDefinition.FormulaFields["x2"].Text = "{RPT_CR_TEST1.Scores}";

myReport.DataDefinition.FormulaFields["x2title"].Text = "'得分情况'";

特别注意的是,原公式中返回的是字符串的话,要把引号带进去。

myReport.DataDefinition.FormulaFields["x2title"].Text = "'得分情况'";

再看效果



这个可以实时变化的字段,有很多用处的。

用过的朋友应该记得,在分组、图表、交叉表的时候,都可以使用公式字段作为运算字段的

如果我们在代码中控制公式里的字段变化,那么自然也达到了动态分组、动态图表等效果了

类似的应用可以参考:

《在水晶报表中实现任意选择指定字段显示-模板及C#升级版》

《用公式实现动态设置图表的轴数据项 》

这个是单一公式,公式之间可以嵌套使用,有时候也可以结合全局变量进行多公式协作

这些在后面的一些实际应用场景中会讲到。

2:运行时总计

我们知道报表里内置了求和和计数等汇总功能,但是如何只求部分数据的和呢?

实例5:

求大于15分的所有分数的和,求大于15分的人的个数,并求得平均值

新建一个运行时总计字段Rtotal0,这个用于获取分数和





注意在“求值”的位置,编辑后面的公式:



新建一个运行时总计字段Rtotal1,这个用于获取人数



注意这个求值也是用了公式的,所以(x+2)是红色的,公式的内容跟Rtotal0一样。

因为都是同样的规则。

新建一个公式字段x3,

C#语言: Codee#9906

//定义一个字符串变量

stringvar s1;

//定在一个数值型变量

numbervar n1;

s1 := '得分大于15分的所有人的平均得分为';

//对于If Else逻辑来说,每个分支逻辑返回的数据类型,都应该是一样的

//进行一个保护,防止分母为0

if {#RTotal1}=0 then

s1+'-'

else

//一个分支逻辑有多条语句,可以用括号括起来,这样更加清晰

(

//计算平均值

n1 := {#RTotal0}/{#RTotal1};

s1+cstr(n1,2

这个公式是个小典型,里面用到了变量。

实质上跟我们在程序里用的变量差别不大。

因为考虑到求平均值时可能出现分母为0的情况,所以进行了一个保护。

注意公式的默认语法是Crystal语法,其赋值方式为 x:=5,x=5 则是一个逻辑判断

(有时候又可以混用,不过最好按照规则走)

看一下实际的运行效果



运行时总计,就是数据从上往下显示时的一种数据处理,

他的数据只能从上往下走,按照一定的规则处理其中的一些数据。

它一定要出现在数据的下面(或与数据平行),而不能与其他Max,Sum等聚合函数一样可以出现在数据之前。

实质上,运行时总计,本身就是公式的一种特殊应用。

3:函数

函数其实也是基于公式的,跟我们普通程序一样。如果有很多重复的公式,那么可以提炼成函数进行复用。

我们就以前面的公式x1进行改造。

模板上不能直接进入函数编辑界面,先要进入公式编辑界面。

新建一个函数,setTitle





先使用编辑器,

直接把现在的公式拷贝进去,注释一份做参考,实际一份做改造

点击保存的时候,有报错。函数中是不能直接使用字段的。



我们做一个变量x来接后面可能的输入值,可能是字段,也可能是其他



然后我们把公式x1改掉



还是可以实现同样的效果。

前面的界面上我们看到另外一个“使用提取器”的按钮。

我们也来用一下

新建一个函数setTitle2,点击使用提取器按钮



这个就是从现有的公式中提炼成函数的,很方便吧,呵呵。

我们选中x1(为了方便演示,我把函数删掉,恢复到原来的公式内容),这时候工具会自动把数据库字段设置为参数。

点击确定后,函数就建好了,可以再进行适当编辑



其他:

公式可以通过与参数的结合,实现更复杂的效果。

函数是基于公式的,公式是可以直接调用函数。

函数间可以互相调用。

函数中不能使用报表参数字段(parameterField),不能使用数据库字段

公式和运行时总计中则都可以使用。

本文中的公式相对比较基础一些,后面开始进入更复杂的阶段。

主要是分组、图表、子报表及交叉表,这些部分的处理方法与之前稍有不同

基础应用之外,还会结合一些实际场景,并且会综合之前讲解的一些内容,做一些深入。

原文发表于:

http://topic.csdn.net/u/20090726/14/100eadf9-60a2-415a-aaf7-d7796f4da924.html

<< 【水晶报表内功心法】--完美Excel(下)【转载】PULL模式下设置子报表的数据源信息 >>

Tags: 内功心法

点击这里获取该日志的TrackBack引用地址

相关文章:

【水晶报表内功心法】信手拈来,掌控对象 之 多值参数传入(2009-10-9 20:59:48)

发表评论:

名称(*)

邮箱

网站链接

验证(*)

正文(*)(留言最长字数:1000)

记住我,下次回复时不用重新输入个人信息

[URL] [URL2] [EMAIL] [EMAIL2] [B] [I] [U] [S] [QUOTE] 显示UBB表情>>

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

敏捷开发经典之作



网站分类

想法 (4)

水晶报表 (23)

水晶易表 (0)

BOE系 (0)

微软系图表报表 (1)

商业智能资源 (2)

VB6&ASP归档 (9)

最近发表

[10/28]为乐Phone带来更多乐趣,欢迎加入联想开发社区

[10/27]乐Phone,随身互联网终端

[03/19]水晶报表视频教程导引

[03/17]水晶报表常用资源导引和下载

[03/17]ZBLOG改造日志

[03/16]您访问的文件可能已经被删除或转移

[03/16]水晶报表书籍推荐

[02/09]【转载】2010年Gartner企业绩效管理四分区

[02/04]使用分组实现超多列分段同页及分页显示

[10/31]VS2010beta2中RDLC与水晶报表之简单评测

[10/09]【水晶报表内功心法】信手拈来,掌控对象 之 多值参数传入

[08/11]【转载】PULL模式下设置子报表的数据源信息

[07/26]【水晶报表内功心法】--公式、函数与运行时总计

[07/07]【水晶报表内功心法】--完美Excel(下)

[07/07]【水晶报表内功心法】--完美Excel(上)

  

爱华网本文地址 » http://www.413yy.cn/a/25101011/79624.html

更多阅读

水晶报表教程 水晶报表开发工具

水晶报表教程——简介本文以一个三层结构的ASP.NET程序为例,介绍如何使用crystalreport来制作一份报表的ASP.NET水晶报表教程,其中着重介绍用ASP.NET水晶报表创建图表的技巧。水晶报表教程——方法/步骤水晶报表教程 1、报表是应用程

图解水晶头的接法 电话水晶头接法图解

图解水晶头的接法——简介昨天,移动了一下自己的电脑,结果自己的电脑网线短了不能用了,怎么办呢,还好自己边有工具,自己做一条长点的网线吧。可是水晶头怎么接呢?图解水晶头的接法——工具/原料水晶头两个、切线工具、网线、测线器图解水

芊之美大码女装 芊之美大码女装官网

限今日包邮 芊之美正品 韩版 胖mm 显瘦特大码加大码女装休闲裤子找同款 99.03 316件 芊之美2012冬款胖mm女装韩版中长款修身加大码薄款棉袄棉衣棉服找同款 599.04 98件 芊之美 大码女装欧美镶钻易

yes!光之美少女5 光之美少女第一季

yes!光之美少女5第二部(yes!光之美少女5gogo)简介:主角:梦原望美 光之美少女成员:夏目玲、春日野丽、秋元小町、水无月香恋,添加光之美少女角色美美野来未(米露)精灵:可可、果果、帕鲁儿王国相邻各国的国王梦原

声明:《代码之美-水晶报表内功心法 --公式、函数与运行时总计 内功心法运行图》为网友忘川边蒹葭分享!如侵犯到您的合法权益请联系我们删除