登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

hurt0759的个人主页

人生常态--跋涉.人生暂态--歇息.

 
 
 

日志

 
 

水晶报表公式  

2009-12-31 10:15:31|  分类: IT |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

水晶报表公式

2009年03月01日 10:19

目录:

一、公式组件

二、公式语法

三、公式类型

----------------------------------------------------------------

公式包含两个关键部分:组件和语法。组件是创建公式所添加的部分,而语法是组织组件所遵循的规则。

在 Crystal Reports 中有几种不同种类的公式:报表、格式化、选定、搜索、运行总计条件和警报公式。报表中的多数公式为报表公式和条件格式化公式。

----------------------------------------------------------------

一、公式组件

在 Crystal Reports 中创建公式与在任何电子数据表应用程序中创建公式类似。可以在公式中使用下列组件:  

字段

示例:{客户.客户名}、{客户.去年销售额}

数字

示例:1、2、3.1416

Text

示例:“数量”、“:”、“您的文本”

运算符

示例:+(加)、/(除)、-x(求负)

运算符是可以在公式中使用的操作。

函数

示例:Round (x)、Trim (x)

函数执行求平均值、求和与计数之类的计算。列出所有可用的函数,其参数一并列出,并根据用途排列。

自定义函数

示例:cdFirstDayofMonth、cdStatutoryHolidays

自定义函数提供了一种共享和重复使用公式逻辑的途径。它们可存储在 Crystal 储备库中,而后可将其添加到报表中。一旦自定义函数添加到报表后,当创建公式时,用户就可在“公式专家”中使用自定义函数。

控制结构

示例:“If”和“Select”、“For”循环

组字段值

示例:Average (fld, condFld)、Sum (fld, condFld, "条件")

组字段值对组进行汇总。例如,可以使用组字段值来得出各个组在总计中所占百分比。

其它公式

示例:{@GrossProfit}、{@QUOTA}

有关详细信息,请参阅公式语法。

----------------------------------------------------------------

二、公式语法

语法规则用于创建正确的公式。一些基本规则有:

将文本字符串括在引号内。

将参数括在括号内(在合适的位置)。

引用的公式使用前导 @ 符号标识。

Crystal 语法和 Basic 语法

创建公式时,可以选择使用 Crystal 语法或 Basic 语法。几乎任何使用某种语法编写的公式都可以使用另一种语法来编写。报表可以包含使用 Crystal 语法的公式,也可以包含使用 Basic 语法的公式。

Crystal 语法是包括在 Crystal Reports 的所有版本中的公式语言。

如果熟悉 Microsoft Visual Basic 或 Basic 的其他版本,则您可能更熟悉 Basic 语法。总而言之,除了有特定扩展以处理报表外,Basic 语法以 Visual Basic 为模型。

如果您已经习惯了 Crystal 语法,则可以继续使用它,并且可受益于由 Visual Basic 所产生的新函数、运算符和控制结构。

注意:    

记录选定和组选定公式不能用 Basic 语法编写。

使用 Basic 语法不会减慢报表的处理过程。使用 Basic 语法公式的报表可以在运行 Crystal Reports 的任何机器上运行。

使用 Basic 语法公式无需同报表一起分发任何附加文件。

相关主题

若要了解 Basic 语法,请参阅使用 Basic 语法创建公式。

若要了解 Crystal 语法,请参阅使用 Crystal 语法创建公式。

----------------------------------------------------------------

三、公式类型

在 Crystal Reports 中有几种不同种类的公式:报表、格式化、选定、搜索、运行总计条件和警报公式。报表中的多数公式为报表公式和条件格式化公式。

报表公式

报表公式是在报表中创建的单独公式。例如,计算订购日期与发货日期之间天数的公式即为报表公式。

条件格式化公式

格式化公式更改报表的布局和设计,以及文本、数据库字段、对象或整个报表节的外观。通过“格式编辑器”来设置文本的格式。如果需要创建格式化公式,请从“格式编辑器”访问公式工作室。请参阅使用条件格式化。

选定公式

选定公式指定并限制在报表中出现的记录和组。您可直接输入这些公式,或者可使用“选择专家”指定选定内容。Crystal Reports 接着将生成记录选定和组选定公式。可以选择手动编辑这些公式,但必须使用 Crystal 语法。请参阅选择记录。

搜索公式

搜索公式帮助您在报表中定位数据。与选定公式类似,一般您不需要直接输入这些公式,而是使用“搜索专家”来指定搜索判据。Crystal Reports 生成该公式。可以选择手动编辑这些公式,但必须使用 Crystal 语法。

注意:     如果您已经了解 Basic 语法,则只需要了解少量的 Crystal 语法便可以修改大多数选定公式和搜索公式。

运行总计条件公式

运行总计条件公式使您能够定义运行总计求值或重置所依据的条件。请参阅创建条件运行总计。

警报公式

警报公式帮助您定义报表警报的条件和消息。请参阅关于报表警报。

-------------------------------------------------------------

水晶报表当前页汇总公式   

     

   建三个公式字段,第一个(公式1)输入下面的公式:   

   whileprintingrecords;   

   global    numbervar    ptotal;   

   ptotal:=0;   

   第二个(公式2)输入下面的公式:   

   whileprintingrecords;   

   global    numbervar    ptotal;   

   ptotal    :=    ptotal    +    [要汇总的字段];   

   如果要汇总的字段不是数字,就用tonumber()函数转换;   

   第三个(公式3)输入下面的公式:   

   whileprintingrecords;   

   global    numbervar    ptotal;   

   把公式1放在页眉,公式2放在详细资料,并隐藏公式1和公式2;把公式3放在页脚,格式公式3,设置为你要显示的格式。这样就行了。

------------------------------------------------------------------

水晶报表中记录超过14条时换页打印   (即每页打印多少固定的记录)

在    细节的 (Details)  

   新的一页(New page After)中写如下代码:   

   WhilePrintingRecords;   

   if    Remainder(RecordNumber,14)=0    then    true;

------------------------------------------------------------------

报表警报

目录:

一、关于报表警报

二、使用报表警报

1、创建报表警报

2、编辑报表警报

3、删除报表警报

4、查看报表警报

5、在公式中引用报表警报

----------------------------------------------------------------

一、关于报表警报

报表警报是在 Crystal Reports 中创建的、当报表数据遇到特定条件时出现的自定义消息。报表警报可以指示用户将采取的操作或有关报表数据的信息。

报表警报是用对指定条件进行计算的公式创建的。如果条件为真,则触发警报并显示出警报消息。消息可以是文本字符串或者是兼有文本和报表字段的公式。

一旦触发报表警报,则直到您刷新报表数据时才会再次对该警报进行计算。

报表警报是针对每个报表的,因此您需要决定何时使用它们,何时不使用它们。报表警报对于指出重要信息(如高于或低于某一界限的销售额)很有用。而且由于警报消息是由您创建的,因此也可针对您的数据。

----------------------------------------------------------------

二、使用报表警报

着重介绍为使用报表警报而需执行的任务:

1、创建报表警报

2、编辑报表警报

3、删除报表警报

4、查看报表警报

5、在公式中引用报表警报

----------------------------------------------

1、创建报表警报

创建报表警报时,必须完成下列三个步骤:

命名警报。

定义触发警报的条件。

创建希望在触发警报时显示的消息(此步骤是可选的)。

创建报表警报

在“报表”菜单上,指向“警报”,然后单击“创建或修改警报”。

出现“创建警报”对话框。

单击“新建”。

出现“创建警报”对话框。

在“名称”框中输入新警报的名称。

在“消息”框中输入警报消息。

“消息”框使您可以输入用作默认值的消息。如果希望每次触发警报时显示相同的消息,请在“消息”框中输入该消息。

然而,如果希望使用公式以便用数据元素自定义消息,请参阅下一个步骤。

如果希望使用公式创建警报消息,请单击“消息”框右侧的公式按钮。

出现公式工作室。有关如何使用编辑器的信息,请参阅使用公式编辑器。

输入警报消息公式。

例如,如果希望看到消息“Country is a star performer”(其中 Country 是某个具体国家/地区的名称),可以创建下列公式:

GroupName ({Customer.Country}) + " is a star performer"

注意:   

警报消息公式的结果必须是一个字符串。

DefaultAttribute 函数可用于引用添加到“消息”框中的消息。例如,如果“消息”框中的消息是“is a star performer”,则警报消息公式可以是:

GroupName ({客户.国家或地区}) + DefaultAttribute

该公式依赖于您在“消息”框中输入的文本,那些文本成为 DefaultAttribute。

消息条件公式可以使用 Crystal 语法或 Basic 语法来创建。

单击“条件”。

随即出现公式工作室。

输入警报条件公式。

警报公式可以基于重复性记录或基于汇总字段,但不能基于打印时间字段(如运行总计或打印时间公式)。警报公式不能有共享变量。

如果警报公式基于汇总字段,那么所使用的任何重复性字段必须在汇总字段中保持不变。例如,如果按照“国家/地区”、“地区”和“城市”分组,可以创建如下警报:

Sum ({客户.去年销售额}, {客户.地区})

在本例中,您的公式可以引用“国家/地区”或“地区”,但不能引用“城市”或“客户姓名”,因为它们是变化的。

注意:    警报条件公式可以使用 Crystal 语法或 Basic 语法来创建。

如果不希望计算警报,请清除“启用”复选框。

否则,保留它的选中状态。

单击“确定”保存警报。

随即返回到“创建警报”对话框,并且列出了您的新警报。您可以看到它的名称和状态(“启用”或“禁用”)。

在“创建警报”对话框中仅显示已启用和已禁用的警报。如果触发警报,则可以在“报表警报”对话框中看到它。

----------------------------------------------

2、编辑报表警报

在“报表”菜单上,指向“警报”,然后单击“创建或修改警报”。

在“创建警报”对话框中,选择要编辑的警报,然后单击“编辑”。

提示:    双击警报也可以对它进行编辑。

在“编辑警报”对话框中进行所需的更改。

单击“确定”保存更改。

注意:    如果已经触发警报,编辑它时会将其从“报表警报”对话框中删除。

----------------------------------------------

3、删除报表警报

在“报表”菜单上,指向“警报”,然后单击“创建或修改警报”。

在“创建警报”对话框中,选择要删除的警报,然后单击“删除”。

所选警报随即从“创建警报”对话框中删除。

注意:    如果已经触发警报,删除它时还会将其从“报表警报”对话框中删除。

----------------------------------------------

4、查看报表警报

可以通过下列方式查看触发的报表警报:

刷新报表数据。

从“报表”菜单的“警报”子菜单中选择“已触发的警报”。

注意:    如果希望在报表数据刷新时查看警报,必须在“选项”对话框的“建立报表”选项卡上选择“刷新时显示警报”(该选项在“报表选项”对话框中也可用)。

查看报表警报

在“报表”菜单上,指向“警报”,然后单击“已触发的警报”。

出现“报表警报”对话框。

选择要查看其记录的警报。

单击“查看记录”。

一个新报表选项卡打开,显示出触发警报的报表记录。如果记录是隐藏的,则记录组会显示出来,但不进行深化。

注意:    如果单击“查看记录”按钮之前选择的已触发警报不止一个,则结果是通过对所选警报执行 AND 布尔运算来生成的。

若要返回到“报表警报”对话框,请单击“预览”选项卡。

单击“关闭”关闭“报表警报”对话框。

----------------------------------------------

5、在公式中引用报表警报

可以在公式中引用警报。引用警报的任何公式都将成为打印时间公式。

有下列函数可用:

IsAlertEnabled( )

IsAlertTriggered( )

AlertMessage( )

这些函数的行为与在“创建警报”对话框中创建的警报相同:

IsAlertTriggered("AlertName") 仅对于触发警报的记录为真。

AlertMessage("AlertName") 在警报为真时显示记录的消息。

因为警报不是字段对象(不能把它们放到报表中),所以它们的表示形式与公式工作室中的报表字段不同。在“函数”树中,可以看到函数本身所在的“警报”标题。可用警报按名称列在此标题下方。

-------------------------------------------------------------------

如何向水晶报表数据源中的存储过程传参数

水晶报表会自动为每个“存储过程中的参数”建立一个“参数字段”,所以这就成了运行时给参数赋值的问题了……

参数字段运行时自定义

[Visual Basic]

' 声明将参数传递给

'查看器控件所需的变量。

Dim paramFields As New ParameterFields()

Dim paramField As New ParameterField()

Dim discreteVal As New ParameterDiscreteValue()

Dim rangeVal As New ParameterRangeValue()

' 第一个参数是具有多个值的离散参数。

' 设置参数字段的名称,它必须

'和报表中的参数相符。

paramField.ParameterFieldName = "客户姓名"

' 设置第一个离散值并将其传递给该参数

discreteVal.Value = "AIC Childrens"

paramField.CurrentValues.Add(discreteVal)

' 设置第二个离散值并将其传递给该参数。

' discreteVal 变量被设置为新值,这样,以前的设置

'就不会被覆盖。

discreteVal = New ParameterDiscreteValue()

discreteVal.Value = "Aruba Sport"

paramField.CurrentValues.Add(discreteVal)

' 将该参数添加到参数字段集合。

paramFields.Add(paramField)

' 第二个参数为区域值。paramField 变量

'被设置为新值,这样,以前的设置就不会被覆盖。

paramField = New ParameterField()

' 设置参数字段的名称,它必须

'和报表中的参数相符。

paramField.ParameterFieldName = "客户 ID"

' 设置区域的开始值和结束值并将区域传递给该参数。

rangeVal.StartValue = 42

rangeVal.EndValue = 72

paramField.CurrentValues.Add(rangeVal)

' 将第二个参数添加到参数字段集合。

paramFields.Add(paramField)

' 将参数字段集合放入查看器控件。

crystalReportViewer1.ParameterFieldInfo = paramFields

crystalReportViewer1.ReportSource = "c:\reports\my report.rpt"

[C#]

// 声明将参数传递给

//查看器控件所需的变量。

ParameterFields paramFields = new ParameterFields ();

ParameterField paramField = new ParameterField ();

ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();

ParameterRangeValue rangeVal = new ParameterRangeValue ();

// 第一个参数是具有多个值的离散参数。

// 设置参数字段的名称,它必须

//和报表中的参数相符。

paramField.ParameterFieldName = "客户姓名";

// 设置第一个离散值并将其传递给该参数。

discreteVal.Value = "AIC Childrens";

paramField.CurrentValues.Add (discreteVal);

// 设置第二个离散值并将其传递给该参数。

// discreteVal 变量被设置为新值,这样,以前的设置

//就不会被覆盖。

discreteVal = new ParameterDiscreteValue ();

discreteVal.Value = "Aruba Sport";

paramField.CurrentValues.Add (discreteVal);

// 将该参数添加到参数字段集合。

paramFields.Add (paramField);

// 第二个参数为区域值。paramField 变量

//被设置为新值,这样,以前的设置就不会被覆盖。

paramField = new ParameterField ();

// 设置参数字段的名称,它必须

//和报表中的参数相符。

paramField.ParameterFieldName = "客户 ID";

// 设置范围的开始值和结束值并将该范围传递给

//该参数。

rangeVal.StartValue = 42;

rangeVal.EndValue = 72;

paramField.CurrentValues.Add (rangeVal);

// 将第二个参数添加到参数字段集合。

paramFields.Add (paramField);

// 将参数字段集合放入查看器控件。

crystalReportViewer1.ParameterFieldInfo = paramFields;

[C++]

// 声明将参数传递给

//查看器控件所需的变量。

ParameterFields* paramFields = new ParameterFields ();

ParameterField* paramField = new ParameterField ();

ParameterDiscreteValue* discreteVal = new ParameterDiscreteValue ();

ParameterRangeValue* rangeVal = new ParameterRangeValue ();

// 第一个参数是具有多个值的离散参数。

// 设置参数字段的名称,它必须

//和报表中的参数相符。

paramField->ParameterFieldName = "客户姓名";

// 设置第一个离散值并将其传递给该参数。

String* val = "AIC Childrens";

discreteVal->Value = val;

paramField->CurrentValues->Add (discreteVal);

// 设置第二个离散值并将其传递给该参数。

// discreteVal 变量被设置为新值,这样,以前的设置

//就不会被覆盖。

discreteVal = new ParameterDiscreteValue ();

val = "Aruba Sport";

discreteVal->Value = val;

paramField->CurrentValues->Add (discreteVal);

// 将该参数添加到参数字段集合。

paramFields->Add (paramField);

// 第二个参数为区域值。paramField 变量

//被设置为新值,这样,以前的设置就不会被覆盖。

paramField = new ParameterField ();

// 设置参数字段的名称,它必须

//和报表中的参数相符。

paramField->ParameterFieldName = "客户 ID";

// 设置范围的开始值和结束值并将该范围传递给

//该参数。

rangeVal->StartValue = __box(42);

rangeVal->EndValue = __box(72);

paramField->CurrentValues->Add (rangeVal);

// 将第二个参数添加到参数字段集合。

paramFields->Add (paramField);

// 将参数字段集合放入查看器控件。

crystalReportViewer1->ParameterFieldInfo = paramFields;

crystalReportViewer1->ExportReport();

  评论这张
 
阅读(2844)| 评论(1)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018