集深V5中动态宏的应用
来源:互联网 发布:哪个编程语言最好学 编辑:程序博客网 时间:2024/05/22 10:31
动态宏,与动态参数十分类似,简单的说就是可以使用表达式的宏。
一、报表实例
在前面利用动态参数制作的报表“订货信息周报”中,一般不可能只需要按周或按时间查询,在实际业务中,按订单、按地区、按运货商等各种查询方法都可能用到。例如查看所有上海货主的订货信息,或者查看所有统一包裹运送的订单。
如果分为多张表设计的话,使用和修改都比较麻烦,而如果能在同一张表中实现按任意字段查询的话,无疑会方便许多。下面我们就介绍如何用动态宏来实现这个功能。
二、设计过程
第1步:新建报表
第2步:参数和宏的设置
1. 参数的设置
2. 宏的设置
我们希望在arg1中输入一个数字,来选择要进行过滤的字段(例如1代表订单ID,2代表订购日期等),arg2中输入检索关键字。例如:在arg1中输入1,arg2中输入10456,就是过滤出订单ID为10456的表。那么这些可按参数选择的规则如何在SQL语句中实现呢?这就需要使用动态宏。
通过菜单工具栏的【报表属性】-【宏定义】,增加一个新宏:
选择宏的类型为“动态宏”。
值的表达式为: case(arg1, list("1"), "DEMO_ORDERS.订单ID="+arg2, list("2"), "DEMO_ORDERS.订购日期 like '"+arg2+"%'", list("3"), "DEMO_ORDERS.货主地区='"+arg2+"'", list("4"), "DEMO_ORDERS.货主城市='"+arg2+"'", list("5"), "DEMO_ORDERS.运货商ID="+arg2, "1=1")
这个宏的作用是做数据集的检索条件的,其表达式的作用是按照arg1的值选择不同的检索条件。其中订购日期的检索使用like,目的是为了让日期的过滤更灵活。最后一行的缺省值的目的,是当arg1的值不在范围内时,直接列出所有数据。
注意:本例使用的表中,运货商字段的类型是整数,所以arg1为5时,返回字串中arg2的前后并没有加上单引号。
第3步:定义数据集
demo_订货信息: select DEMO_ORDERS.订单ID,DEMO_ORDERS.订购日期,DEMO_ORDERS.货主地区,DEMO_ORDERS.货主城市,DEMO_ORDERS.运货商ID from DEMO_ORDERS where ${macro1}
注意:这里WHERE子句后使用的是宏而不是参数了。
在复杂报表设计器中引用demo_订货信息和demo_运货商。
第4步:编辑报表
A2单元格表达式为:
="检索条件:"+case(arg1,list("1"),"订单ID=",list("2"),"订购日期 like ",list("3"),"货主地区=",list("4"),"货主城市=",list("5"),"运货商ID=","*=")+arg2
显示出当前的过滤条件。
第5步:预览报表
设置参数值,这里arg1为5,arg2为2,表示过滤出运货商为统一包裹的记录。预览结果如下:
如果arg1为2,arg2为1996-07,表示过滤出所有订购日期在1996年7月份的记录,预览结果如下:
arg为4,arg2 为上海,表示过滤出上海的订单信息,预览结果如下:
其它几个过滤字段大家可以自己试一下,注意按运货商过滤时,arg2要写1或2或3等,而不要写“联邦货运”。
五、小结
动态宏
简单的说,动态宏就是可以使用表达式的宏。
普通宏是直接将宏值传到报表中计算,动态宏是把传进来的宏值当成表达式进行计算,然后再把计算得到的值做为宏值传到报表中参与计算。
通过下面的例子可以看出两者的区别。首先定义两个宏,如下图所示:
两个宏的值是一样的,但一个是普通宏,一个是动态宏,把它们用到报表里,如下图:
预览结果如下图所示:
A1单元格的表达式相当于:="abc"+1+1,因此计算结果等于“abc11”,表达式计算过程中自动把1转成字符型。
B1单元格的表达式相当于:="abc"+2,因此计算结果等于“abc2”,表达式计算过程中自动把2转成了字符型。
六、函数说明
case()
函数说明: 根据表达式的不同计算结果,返回不同的值。
注:本函数从左到右计算,先出现的表达式先算,如果出现满足的表达式,则返回相应的结果,后面的不再计算。如果没有一个表达式满足条件,而且有缺省值表达式,则返回缺省值,否则返回null。
语法: case(Exp{,list(valueExp11,valueExp12,...),resultExp1{,list(valueExp21,valueExp22,...),resultExp2{,...{,defaultExp}}}})
参数说明:
Exp 判断用到的表达式
valueExp(n) 值表达式
resultExp(n) 返回结果表达式
defaultExp 缺省值表达式,如果所有表达式结果都不满足,则返回本表达式计算结果
示例:
例1:case("上海",list("北京","天津"),"1",list("武汉","上海"),"2")运算结果为"2"。
例2:case("上海",list("北京","天津"),"1",list("武汉"),"2","3") 运算结果为"3"。
例3:case("上海",list("北京","天津"),"1",list("武汉"),"2") 运算结果为null。
- 集深V5中动态宏的应用
- 集深V5中宏的应用
- v5中使用动态宏和会话变量对数据权限进行控制
- 集深V5中占比报表
- 润乾集深V5中参数与宏
- 【润乾】V5动态统计图如何设计不同的柱子颜色
- 动态SQL中DESCRIPTOR的应用
- 动态SQL中DESCRIPTOR的应用
- mybatis框架中动态sql的应用
- 关于CATIA V5二次开发中实体“体积”测量的宏问题
- 【润乾】V5参数和宏 的使用
- extjs中grid中嵌入动态combobox的应用
- 安卓中IOC框架中所用的动态代理的应用。
- 浅谈PB中动态DataWindow的技术应用
- 浅谈PB中动态DataWindow的技术应用
- 浅谈PB中动态DataWindow的技术应用
- TClientDataSet中关于TField、TFieldDef动态创立字段的应用
- STM32系统中应用的动态加载可行性研究过程<一>
- 完美解读Linux中文件系统的目录结构
- try,catch,finally执行及返回值的问题
- linux 高端内存页框管理:永久内核映射、临时内核映射以及非连续内存分配
- 如何通过AttachmentsUseCaption参数来控制附件文件名和图标的显示
- ORA-01578数据库坏块处理
- 集深V5中动态宏的应用
- Android emulator failed to allocate memory 8
- 二分搜索总结
- 四极管:android4.0 实现U盘挂载PC (一)
- 指针数组和数组指针
- du命令
- ActiveMQ开发实例3
- keyword in Jpa
- Java程序员面试中的多线程问题