PB数据窗口对象之计算域、排列、过滤、分组和其他

计算域

----------

计算域是指在数据窗口的设计状态下添加到数据窗口中的Computed Field部件,它是一个数据窗口部件,具有部件的属性特征。计算字段是指在数据窗口对应的SQL语句中添加的表达式,计算字段是一个字段,它具有字段的属性特征。它们的区别主要体现在脚本中。计算字段因为具有字段的特征,所以SetItem等对字段操作的函数可以用来操作计算字段而不能来操作计算域,当需要在程序中动态设置值时,就应该使用计算字段而不能使用计算域,典型情况是对计算出来的值进行误差校正。这两个对象都可以使用GetItem一类的函数来读取取值。

常用函数:
条件判断
If ( boolean, truevalue, falsevalue )
Case ( column WHEN value1 THEN result1 { WHEN value2 THEN result2 { ... } } {ELSE resultelse } )

累积,(表格最右面一列各行是某列对应行前面所有行的累加和)
CumulativeSum(column{for range})
其中,column是列名、列号,或者是由列名、列号、常量、运算符,甚至其他函数构成的表达式,但取值必须是数值型的。For range是进行累积的范围。大多数显示样式的数据窗口都可以使用如下内容。
All:缺省值,累积指定列的所有取值
Group n:在指定的分组内对指定字段进行累积运算。Group是保留字,n代表组号,如1。
Page:在页范围内进行累积运算。

百分比
Percent ( column { FOR range { DISTINCT { expres1 {, expres2 {, ... } } } } } )
Percent可以用来计算某字段在指定范围内当前行的取值占该范围内该字段累计和的比例。
其中,column以及For range和上面CumulativeSum函数中的完全相同。选项DISTINCT用来指定只统计不相等的字段,表达式expresX是用来区分行是否相同的标准。该函数和表达式column/sum(columnfor range)是等价的。
CumulativePercent(column{FOR range})
用来计算当前的累积和占总和的比例
其中的column和for range和上面的相同。该函数和下面的表达式是等价的:
CumulativeSum(column for range)/sum(column for range)

引用不同行的数据
在数据窗口的表达式中,可以直接使用列名数组引用不同行的字段值,下标是一个相对数,相对于当前行而言的。例如,假设在数据窗口中有一列名为product_id,在数据窗口表达式中,product_id和product_id[0]是指当前行的product_id值。product_id[-1]是指前面一行的product_id值,product_id[1]是指下一行的product_id值。
使用这种引用方法,可以很简洁地提供更友好的数据显示格式。例如,当product_id改变时,用另外一种颜色显示月份、销售量、库存量等,可以修改这些字段的颜色表达式(应该以product_id排序):
if(getrow()=1,rgb(255,0,0),if(product_id =product_id[-1],rgb(255,0,0),rgb(255,255,255)))

数据行的修改状态
isRowNew()
isRowModified()
if(isRowNew(),'新',if(isRowModified(),'改','旧'))

其他
date
isSelected
average
count
sum


排序、过滤和分组
----------
排序
Rows->Sort
*双击Columns列表框中的字段或表达式,进入ModifyExpression窗口,可以进行表达式定义,表示要使用该表达式进行排序。
上面的方法定义的排序是在客户端执行的,要在服务器端进行数据排序,可以通过修改数据窗口对应的SQL来实现。
----------
过滤
Rows->Filter
在对话框中输入表达式,在定义表达式时,有些经常使用的运算符,如like、betweem、in、match等需要特别关注一下。*特别是match具体可以在程序中测试,具体见PB帮助-match。
上面的方法同排序是在客户端执行的,要在服务器端进行数据排序,可以通过SQL语句中使用where子句,然后用带参数的retrieve来过滤。
----------
分组
Rows->Create Group
*双击“Columns”列表框中的字段或表达式,进入ModifyExpression窗口,进行表达式定义。创建分组后,数据窗口中又增加了两个带(band),Headergroup name用来先死组名,放置用来分组的表达式或者字段;Trailer group name放置分组的总结信息。
数据窗口创建后定义的分组和使用分组样式创建的数据窗口在显示效果上相同,区别在于前面一中方式是在数据完全从服务器端传送到客户端后进行的,后一种是直接在服务器按照分组取出数据的。
*最后介绍一种方法,同样可以达到Group的效果。比如,显示各个地区产品销售情况的数据,应该使用地区作为分组。在数据窗口画板中选择窗口菜单Rows->Sort,选择以字段“region”进行排序;然后再选择窗口菜单Rows->Supress Reapting values…,指定压缩字段“region”的重复值即可。
----------


其他
----------
数据窗口中的当前页和总共页
string ls_currentPageNo
string ls_totalPage
ls_currentPageNo = dw_1.Describe("evalue('page()',1)") // ?? 获取当前页号
ls_totalPage = dw_1.Describe("evalue('PageCount()',1)") //获取总共多少页
----------
数据窗口对象的中备份和恢复数据
备份:File->Save Rows As //或Preview窗口中右键->Save Rows As
恢复:Rows->Import
----------

阅读更多
个人分类: PB数据窗口对象
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭